From patchwork Tue May 5 10:13:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Brezillon X-Patchwork-Id: 1283410 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=collabora.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20170209 header.b=tq8NI1wB; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49GbDY0PTtz9sT0 for ; Tue, 5 May 2020 20:14:21 +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:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version: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=F7+ugVSm6SpOJo3Xmol+VDG+IPY5GccJVLUD+YTgLho=; b=tq8NI1wBnbs1O+ ciA8H2vJF3LMhSKIrgTraI9m4mcd95aVYneXNyrjRAfH3bdZTyX1eWMYc1dWhshnKirttVdasCKbz sA1MVPWWBB2SbxgHvGZKiXxh5mWDAoklpZ8uhQYMEqBNn2awM3ZIHElu2OXSmBQiJixhXVdWKK+jR SZnHBuLVP8mINZX1VThYh0O4fCsPK6Anmwr+s8cGJoWd9vrWuvMNihtS+btuOTM9Br3GyJ5r4PRaj qfkWqvHPyyj+ejD76NIAaYiAR6YPY3zux11wtBy10iiF6ZlXeGvxdotvmV4ZbtYwv0xzME9fKwP34 Yfse1Yar6pnei28EoUJg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuag-0007MP-Ec; Tue, 05 May 2020 10:14:18 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuaN-00075O-Ik for linux-mtd@lists.infradead.org; Tue, 05 May 2020 10:14:01 +0000 Received: from localhost.localdomain (unknown [IPv6:2a01:e0a:2c:6930:d3ea:1c7:41fd:3038]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 29DC62A1988; Tue, 5 May 2020 11:13:58 +0100 (BST) From: Boris Brezillon To: Miquel Raynal , linux-mtd@lists.infradead.org, Lubomir Rintel Subject: [PATCH v2 01/19] mtd: rawnand: Propage CS selection to sub operations Date: Tue, 5 May 2020 12:13:35 +0200 Message-Id: <20200505101353.1776394-2-boris.brezillon@collabora.com> X-Mailer: git-send-email 2.25.3 In-Reply-To: <20200505101353.1776394-1-boris.brezillon@collabora.com> References: <20200505101353.1776394-1-boris.brezillon@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200505_031359_744278_86647A73 X-CRM114-Status: GOOD ( 14.32 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , Boris Brezillon , Vignesh Raghavendra , Tudor Ambarus Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Some controller using the instruction parse infrastructure might need to know which CS a specific sub-operation is targeting. Let's propagate this information. Signed-off-by: Boris Brezillon Reviewed-by: Miquel Raynal --- Changes in v2: * Add R-b --- drivers/mtd/nand/raw/nand_base.c | 3 ++- include/linux/mtd/rawnand.h | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c index 3a0e85ebcbe3..1cb5cf7a049a 100644 --- a/drivers/mtd/nand/raw/nand_base.c +++ b/drivers/mtd/nand/raw/nand_base.c @@ -2119,7 +2119,7 @@ static void nand_op_parser_trace(const struct nand_op_parser_ctx *ctx) char *prefix = " "; unsigned int i; - pr_debug("executing subop:\n"); + pr_debug("executing subop (CS%d):\n", ctx->subop.cs); for (i = 0; i < ctx->ninstrs; i++) { instr = &ctx->instrs[i]; @@ -2183,6 +2183,7 @@ int nand_op_parser_exec_op(struct nand_chip *chip, const struct nand_operation *op, bool check_only) { struct nand_op_parser_ctx ctx = { + .subop.cs = op->cs, .subop.instrs = op->instrs, .instrs = op->instrs, .ninstrs = op->ninstrs, diff --git a/include/linux/mtd/rawnand.h b/include/linux/mtd/rawnand.h index e26a87b0fbd9..c92de1fa4eaf 100644 --- a/include/linux/mtd/rawnand.h +++ b/include/linux/mtd/rawnand.h @@ -702,6 +702,7 @@ struct nand_op_instr { /** * struct nand_subop - a sub operation + * @cs: the CS line to select for this NAND sub-operation * @instrs: array of instructions * @ninstrs: length of the @instrs array * @first_instr_start_off: offset to start from for the first instruction @@ -718,6 +719,7 @@ struct nand_op_instr { * controller driver. */ struct nand_subop { + unsigned int cs; const struct nand_op_instr *instrs; unsigned int ninstrs; unsigned int first_instr_start_off; From patchwork Tue May 5 10:13:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Brezillon X-Patchwork-Id: 1283411 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=collabora.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20170209 header.b=S65ZwtqO; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49GbF53p7gz9sRf for ; Tue, 5 May 2020 20:14:49 +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:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version: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=VR7TZ5jJdZENrkL80xsoAggJTm5qfW1PgTY7bYmGww4=; b=S65ZwtqOQfvaSw ILOlJae/0csKdiHSJcZcFYxEL327qj4AR/fsltYahBBHvwsMg2pxxlNhJGh594ap0fOXcc0N9/vnP a3AomFWkJa8hkBAM0A6dGqVSYnGoUoQORSYi+iMppQ+OTWNHtfIR64WLysSuATw28rai4fcFlcHPf cwIS7kyPdfk6wsdtP4kq49WC2iV0/Ja9EBHFyhr5fJ80MGVn0Ig+GL/puUNbaAOjVxirVSPmnUpvO V7rL8YhDgZLroxa9ff+LlBWGhdPnPoSTl3Y+aj4jBow0f0cmw6peWe1Y/VM1fos60NptHbrIpjnO1 tMAa1oX8R3Iu7z0YenrA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuaz-0007bo-7y; Tue, 05 May 2020 10:14:37 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuaN-00075S-SS for linux-mtd@lists.infradead.org; Tue, 05 May 2020 10:14:01 +0000 Received: from localhost.localdomain (unknown [IPv6:2a01:e0a:2c:6930:d3ea:1c7:41fd:3038]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 871172A1ADC; Tue, 5 May 2020 11:13:58 +0100 (BST) From: Boris Brezillon To: Miquel Raynal , linux-mtd@lists.infradead.org, Lubomir Rintel Subject: [PATCH v2 02/19] mtd: rawnand: cafe: Get rid of an inaccurate kernel doc header Date: Tue, 5 May 2020 12:13:36 +0200 Message-Id: <20200505101353.1776394-3-boris.brezillon@collabora.com> X-Mailer: git-send-email 2.25.3 In-Reply-To: <20200505101353.1776394-1-boris.brezillon@collabora.com> References: <20200505101353.1776394-1-boris.brezillon@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200505_031400_045809_B45F1511 X-CRM114-Status: GOOD ( 10.45 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , Boris Brezillon , Vignesh Raghavendra , Tudor Ambarus Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Driver files are not parsed for doc generation, and the cafe_nand_read_page() kernel-doc header was wrong, so let's get rid of it. Signed-off-by: Boris Brezillon Reviewed-by: Miquel Raynal --- Changes in v2: * Add R-b --- drivers/mtd/nand/raw/cafe_nand.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/drivers/mtd/nand/raw/cafe_nand.c b/drivers/mtd/nand/raw/cafe_nand.c index 2a0df13df5f3..1296380a4996 100644 --- a/drivers/mtd/nand/raw/cafe_nand.c +++ b/drivers/mtd/nand/raw/cafe_nand.c @@ -357,13 +357,8 @@ static int cafe_nand_read_oob(struct nand_chip *chip, int page) return nand_read_oob_op(chip, page, 0, chip->oob_poi, mtd->oobsize); } -/** - * cafe_nand_read_page_syndrome - [REPLACEABLE] hardware ecc syndrome based page read - * @mtd: mtd info structure - * @chip: nand chip info structure - * @buf: buffer to store read data - * @oob_required: caller expects OOB data read to chip->oob_poi - * + +/* * The hw generator calculates the error syndrome automatically. Therefore * we need a special oob layout and handling. */ From patchwork Tue May 5 10:13:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Brezillon X-Patchwork-Id: 1283412 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=collabora.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20170209 header.b=aLSW/iQF; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49GbFF0XHwz9sRf for ; Tue, 5 May 2020 20:14:57 +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:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version: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=n+KuOqu10w9q6uTf23CHh+kx/yx3jeIya3tq6dvSmBg=; b=aLSW/iQFz5o4aT b3ElzPZ3vkxI3dbXlPm+tEYBwEb36WVqdqzFi1E6EOvVq5SXy5yIcSxZygO9fI+TVCQvChydhHC8I hLcGLmTfxNjRckzJ0g8G8cczghfXeMw2urYp3vXtK0AjJSPSClk1t1Q1syr+Qvg2kOVwezFS0qErU JLqY8fK9WS69X76i9Nn4Bapru1a5le4QOBzdwDG5DYDgJ22KFV4iEsApp4cBobhRcxGkbf77aUVIn TZQhO2GbPE9UWm044B6EGkN69Hr7hiUKC5EgTlHQBqWEaYQWSCKLI9YMS8nHEp/ml4+M0xvEsuJ1h 0292VnCVZY6AOE+66dJw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVubF-0007qx-It; Tue, 05 May 2020 10:14:53 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuaO-00075Z-53 for linux-mtd@lists.infradead.org; Tue, 05 May 2020 10:14:02 +0000 Received: from localhost.localdomain (unknown [IPv6:2a01:e0a:2c:6930:d3ea:1c7:41fd:3038]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id D793B2A1AE0; Tue, 5 May 2020 11:13:58 +0100 (BST) From: Boris Brezillon To: Miquel Raynal , linux-mtd@lists.infradead.org, Lubomir Rintel Subject: [PATCH v2 03/19] mtd: rawnand: cafe: Rename cafe_nand_write_page_lowlevel() Date: Tue, 5 May 2020 12:13:37 +0200 Message-Id: <20200505101353.1776394-4-boris.brezillon@collabora.com> X-Mailer: git-send-email 2.25.3 In-Reply-To: <20200505101353.1776394-1-boris.brezillon@collabora.com> References: <20200505101353.1776394-1-boris.brezillon@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200505_031400_317099_9FA39B90 X-CRM114-Status: GOOD ( 11.09 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , Boris Brezillon , Vignesh Raghavendra , Tudor Ambarus Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Let's rename that one cafe_nand_write_page() to be consistent with other function names. Signed-off-by: Boris Brezillon Reviewed-by: Miquel Raynal Tested-by: Lubomir Rintel --- Changes in v2: * Add R-b/T-b --- drivers/mtd/nand/raw/cafe_nand.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/mtd/nand/raw/cafe_nand.c b/drivers/mtd/nand/raw/cafe_nand.c index 1296380a4996..03964e092243 100644 --- a/drivers/mtd/nand/raw/cafe_nand.c +++ b/drivers/mtd/nand/raw/cafe_nand.c @@ -525,9 +525,9 @@ static struct nand_bbt_descr cafe_bbt_mirror_descr_512 = { }; -static int cafe_nand_write_page_lowlevel(struct nand_chip *chip, - const uint8_t *buf, int oob_required, - int page) +static int cafe_nand_write_page(struct nand_chip *chip, + const uint8_t *buf, int oob_required, + int page) { struct mtd_info *mtd = nand_to_mtd(chip); struct cafe_priv *cafe = nand_get_controller_data(chip); @@ -628,7 +628,7 @@ static int cafe_nand_attach_chip(struct nand_chip *chip) cafe->nand.ecc.size = mtd->writesize; cafe->nand.ecc.bytes = 14; cafe->nand.ecc.strength = 4; - cafe->nand.ecc.write_page = cafe_nand_write_page_lowlevel; + cafe->nand.ecc.write_page = cafe_nand_write_page; cafe->nand.ecc.write_oob = cafe_nand_write_oob; cafe->nand.ecc.read_page = cafe_nand_read_page; cafe->nand.ecc.read_oob = cafe_nand_read_oob; From patchwork Tue May 5 10:13:38 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Brezillon X-Patchwork-Id: 1283413 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=collabora.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20170209 header.b=FJZNfk+4; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49GbFv0NqFz9sSx for ; Tue, 5 May 2020 20:15:31 +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:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version: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=DEfNRvgeD5hJ9SZDe5LflAYGMjTbGKE2aDkWv7j367o=; b=FJZNfk+4JhwCh/ DsgRNQRiGdcXYdi2yXJNhkUeypioVi0Mcq58zY028SZHKHld94qjSIKQsY7twsVeMztKT2ziQ7K53 JO6zck60gkjBbGaMyM4O8WO4MOaiub0DXG+kA1IhQaAs7oxgvRAwljaawpK1c6uPw1WCnJT5mQL73 x0ZI9dm7Dm/7+yWGp54B9HbT9PBLYeSsIwgmDwQvDxkdersrvjXL7Faj2u2y1gfztCxZyvOam8hJX ubq0qr4pUbNyJ4ieKsLOVULf0sYoPIMvV0BL10c7AQpQVznbeYT8rqTo54EJvzcNuQP7x3x8hwWJQ IzU5yaAQIqgMHn3HPfQw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVubf-00028d-9P; Tue, 05 May 2020 10:15:19 +0000 Received: from bhuna.collabora.co.uk ([46.235.227.227]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuaO-00075n-Hy for linux-mtd@lists.infradead.org; Tue, 05 May 2020 10:14:02 +0000 Received: from localhost.localdomain (unknown [IPv6:2a01:e0a:2c:6930:d3ea:1c7:41fd:3038]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 26CF62A1AE6; Tue, 5 May 2020 11:13:59 +0100 (BST) From: Boris Brezillon To: Miquel Raynal , linux-mtd@lists.infradead.org, Lubomir Rintel Subject: [PATCH v2 04/19] mtd: rawnand: cafe: Use a correct ECC mode and pass the ECC alg Date: Tue, 5 May 2020 12:13:38 +0200 Message-Id: <20200505101353.1776394-5-boris.brezillon@collabora.com> X-Mailer: git-send-email 2.25.3 In-Reply-To: <20200505101353.1776394-1-boris.brezillon@collabora.com> References: <20200505101353.1776394-1-boris.brezillon@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200505_031400_735691_2FF92E3F X-CRM114-Status: GOOD ( 13.01 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [46.235.227.227 listed in list.dnswl.org] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , Boris Brezillon , Vignesh Raghavendra , Tudor Ambarus Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org The NAND_ECC_HW_SYNDROME name is a bit misleading. It's actually used for drivers that interleave data and ECC bytes inside a page, which is not the case here. Let's fix that and pass the ECC algorithm used by the ECC engine. Signed-off-by: Boris Brezillon Reviewed-by: Miquel Raynal Tested-by: Lubomir Rintel --- Changes in v2: * Add R-b/T-b --- drivers/mtd/nand/raw/cafe_nand.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/nand/raw/cafe_nand.c b/drivers/mtd/nand/raw/cafe_nand.c index 03964e092243..47aacfab8ecb 100644 --- a/drivers/mtd/nand/raw/cafe_nand.c +++ b/drivers/mtd/nand/raw/cafe_nand.c @@ -624,7 +624,8 @@ static int cafe_nand_attach_chip(struct nand_chip *chip) goto out_free_dma; } - cafe->nand.ecc.mode = NAND_ECC_HW_SYNDROME; + cafe->nand.ecc.mode = NAND_ECC_HW; + cafe->nand.ecc.algo = NAND_ECC_RS; cafe->nand.ecc.size = mtd->writesize; cafe->nand.ecc.bytes = 14; cafe->nand.ecc.strength = 4; From patchwork Tue May 5 10:13:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Brezillon X-Patchwork-Id: 1283414 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=collabora.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20170209 header.b=r5WOrFCN; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49GbG90ztzz9sSx for ; Tue, 5 May 2020 20:15:45 +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:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version: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=Cl1UXiobGdIKedTvCkwKDO2huHczl5Bd/EcsYJG7a7g=; b=r5WOrFCNwvFvbF As4+F2P7lPseadUKWgN6zcJdbqZQskc8bfK8f2eMmdsg3M/O5rnwk3AME1fXi+7kZoPNh0ndYVtiH BbfbEOx3/6Enk5S3mcOf76HhRzwK9o284uOEeEh2vilHaZDYcKiEIYB+YreycsaYTW1VXsf79Hk/y XhzKdXz6faKBEZstGzdza7ipWjjh06d91SOKyk3RWU0sp/5eWJ6piWsBuV2jo4k8JTaLv1HnuT7Lo HQg57tuHbJUROJYe4Uskpt+paqvz7hmN0McUIAemna/J8khDCJABKjm5wNl5ErAAYmohwg0J6Vlm7 6z68xmNTobwBTjnrhkGg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVubt-0002N6-F1; Tue, 05 May 2020 10:15:33 +0000 Received: from bhuna.collabora.co.uk ([46.235.227.227]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuaP-00076r-Q8 for linux-mtd@lists.infradead.org; Tue, 05 May 2020 10:14:03 +0000 Received: from localhost.localdomain (unknown [IPv6:2a01:e0a:2c:6930:d3ea:1c7:41fd:3038]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 6B11D2A0201; Tue, 5 May 2020 11:13:59 +0100 (BST) From: Boris Brezillon To: Miquel Raynal , linux-mtd@lists.infradead.org, Lubomir Rintel Subject: [PATCH v2 05/19] mtd: rawnand: cafe: Include linux/io.h instead of asm/io.h Date: Tue, 5 May 2020 12:13:39 +0200 Message-Id: <20200505101353.1776394-6-boris.brezillon@collabora.com> X-Mailer: git-send-email 2.25.3 In-Reply-To: <20200505101353.1776394-1-boris.brezillon@collabora.com> References: <20200505101353.1776394-1-boris.brezillon@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200505_031401_977942_B4AF70CA X-CRM114-Status: GOOD ( 11.88 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [46.235.227.227 listed in list.dnswl.org] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , Boris Brezillon , Vignesh Raghavendra , Tudor Ambarus Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Drivers should not include asm headers directly. Signed-off-by: Boris Brezillon Reviewed-by: Miquel Raynal Tested-by: Lubomir Rintel --- Changes in v2: * Add R-b/T-b --- drivers/mtd/nand/raw/cafe_nand.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/mtd/nand/raw/cafe_nand.c b/drivers/mtd/nand/raw/cafe_nand.c index 47aacfab8ecb..156a308b530b 100644 --- a/drivers/mtd/nand/raw/cafe_nand.c +++ b/drivers/mtd/nand/raw/cafe_nand.c @@ -23,7 +23,7 @@ #include #include #include -#include +#include #define CAFE_NAND_CTRL1 0x00 #define CAFE_NAND_CTRL2 0x04 From patchwork Tue May 5 10:13:40 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Boris Brezillon X-Patchwork-Id: 1283428 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=collabora.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20170209 header.b=U8OYq2a/; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49GbKL5k6gz9sRf for ; Tue, 5 May 2020 20:18:30 +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:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version: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=8AxdY5bl6zeYdYw/3N2jbYzO7wUsOBeNE+tV/CVi4MI=; b=U8OYq2a/fTsFFf xPF+ICXjg6xo9Y8LpGPbn9S2vsEzRDtUveMLK3S3SW9yXCTgod1raJe0WL+YLXEwaX3qu9ixPQ/Gw mx+by4oE3rNWBgf4/CFKQioept5uG7vM5jN/GQvzVJJIBRULplP3zT11lcYHWPQyw+BLPu+jVnifN 49nSzaE3TgkcEezEYmEkXpWNgisn/9ny6o+IS2Cquw8nsTQaBEuPXJllsJkkAOPpTcMFMnLHU+pOx M6q4FERBt4/USvbnf1IYKeD6YpxVPPRg0sMRsTRIF6930wr9t8AR4P4T3pkg2fIpwwzmN6O7a1zPB HdSoDAPraHcTMiGMBHfg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVueh-0005Hf-Rg; Tue, 05 May 2020 10:18:27 +0000 Received: from bhuna.collabora.co.uk ([46.235.227.227]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuaP-00076s-QI for linux-mtd@lists.infradead.org; Tue, 05 May 2020 10:14:07 +0000 Received: from localhost.localdomain (unknown [IPv6:2a01:e0a:2c:6930:d3ea:1c7:41fd:3038]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id AD4982A1AF5; Tue, 5 May 2020 11:13:59 +0100 (BST) From: Boris Brezillon To: Miquel Raynal , linux-mtd@lists.infradead.org, Lubomir Rintel Subject: [PATCH v2 06/19] mtd: rawnand: cafe: Demistify register fields Date: Tue, 5 May 2020 12:13:40 +0200 Message-Id: <20200505101353.1776394-7-boris.brezillon@collabora.com> X-Mailer: git-send-email 2.25.3 In-Reply-To: <20200505101353.1776394-1-boris.brezillon@collabora.com> References: <20200505101353.1776394-1-boris.brezillon@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200505_031402_140792_9D3F1D0A X-CRM114-Status: GOOD ( 19.43 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [46.235.227.227 listed in list.dnswl.org] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , Boris Brezillon , Vignesh Raghavendra , Tudor Ambarus Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org The driver has a bunch of magic values. Let's define proper register fields based on the spec [1] and use them. [1]http://wiki.laptop.org/images/5/5c/88ALP01_Datasheet_July_2007.pdf Signed-off-by: Boris Brezillon Reviewed-by: Lubomir Rintel Tested-by: Lubomir Rintel --- Changes in v2: * Add R-b/T-b * Get rid of unrelated select_chip() change * Fix CE selection logic * s/CAFE_NAND_CTRL2_CMD2/CAFE_NAND_CTRL2_HAS_CMD2/ (Reported by Lubomir) --- drivers/mtd/nand/raw/cafe_nand.c | 349 ++++++++++++++++++++++++------- 1 file changed, 268 insertions(+), 81 deletions(-) diff --git a/drivers/mtd/nand/raw/cafe_nand.c b/drivers/mtd/nand/raw/cafe_nand.c index 156a308b530b..7fb5b21aeb00 100644 --- a/drivers/mtd/nand/raw/cafe_nand.c +++ b/drivers/mtd/nand/raw/cafe_nand.c @@ -9,6 +9,7 @@ * Copyright © 2006 David Woodhouse */ +#include #define DEBUG #include @@ -25,37 +26,127 @@ #include #include -#define CAFE_NAND_CTRL1 0x00 -#define CAFE_NAND_CTRL2 0x04 -#define CAFE_NAND_CTRL3 0x08 -#define CAFE_NAND_STATUS 0x0c -#define CAFE_NAND_IRQ 0x10 -#define CAFE_NAND_IRQ_MASK 0x14 -#define CAFE_NAND_DATA_LEN 0x18 -#define CAFE_NAND_ADDR1 0x1c -#define CAFE_NAND_ADDR2 0x20 -#define CAFE_NAND_TIMING1 0x24 -#define CAFE_NAND_TIMING2 0x28 -#define CAFE_NAND_TIMING3 0x2c -#define CAFE_NAND_NONMEM 0x30 -#define CAFE_NAND_ECC_RESULT 0x3C -#define CAFE_NAND_DMA_CTRL 0x40 -#define CAFE_NAND_DMA_ADDR0 0x44 -#define CAFE_NAND_DMA_ADDR1 0x48 -#define CAFE_NAND_ECC_SYN01 0x50 -#define CAFE_NAND_ECC_SYN23 0x54 -#define CAFE_NAND_ECC_SYN45 0x58 -#define CAFE_NAND_ECC_SYN67 0x5c -#define CAFE_NAND_READ_DATA 0x1000 -#define CAFE_NAND_WRITE_DATA 0x2000 +#define CAFE_NAND_CTRL1 0x00 +#define CAFE_NAND_CTRL1_HAS_CMD BIT(31) +#define CAFE_NAND_CTRL1_HAS_ADDR BIT(30) +#define CAFE_NAND_CTRL1_NUM_ADDR_CYC GENMASK(29, 27) +#define CAFE_NAND_CTRL1_HAS_DATA_IN BIT(26) +#define CAFE_NAND_CTRL1_HAS_DATA_OUT BIT(25) +#define CAFE_NAND_CTRL1_NUM_NONMEM_READ_HIGH GENMASK(24, 22) +#define CAFE_NAND_CTRL1_WAIT_BSY_AFTER_SEQ BIT(21) +#define CAFE_NAND_CTRL1_NUM_NONMEM_READ_LOW BIT(20) +#define CAFE_NAND_CTRL1_CE BIT(19) +#define CAFE_NAND_CTRL1_CMD GENMASK(7, 0) -#define CAFE_GLOBAL_CTRL 0x3004 -#define CAFE_GLOBAL_IRQ 0x3008 -#define CAFE_GLOBAL_IRQ_MASK 0x300c -#define CAFE_NAND_RESET 0x3034 +#define CAFE_NAND_CTRL2 0x04 +#define CAFE_NAND_CTRL2_AUTO_WRITE_ECC BIT(30) +#define CAFE_NAND_CTRL2_PAGE_SIZE GENMASK(29, 28) +#define CAFE_NAND_CTRL2_ECC_ALG_RS BIT(27) +#define CAFE_NAND_CTRL2_HAS_CMD2 BIT(8) +#define CAFE_NAND_CTRL2_CMD2 GENMASK(7, 0) -/* Missing from the datasheet: bit 19 of CTRL1 sets CE0 vs. CE1 */ -#define CTRL1_CHIPSELECT (1<<19) +#define CAFE_NAND_CTRL3 0x08 +#define CAFE_NAND_CTRL3_READ_BUSY_RESET BIT(31) +#define CAFE_NAND_CTRL3_WP BIT(30) + +#define CAFE_NAND_STATUS 0x0c +#define CAFE_NAND_STATUS_CONTROLLER_BUSY BIT(31) +#define CAFE_NAND_STATUS_FLASH_BUSY BIT(30) + +#define CAFE_NAND_IRQ 0x10 +#define CAFE_NAND_IRQ_MASK 0x14 +#define CAFE_NAND_IRQ_CMD_DONE BIT(31) +#define CAFE_NAND_IRQ_FLASH_RDY BIT(30) +#define CAFE_NAND_IRQ_DMA_DONE BIT(28) +#define CAFE_NAND_IRQ_BOOT_DONE BIT(27) + +#define CAFE_NAND_DATA_LEN 0x18 +#define CAFE_NAND_ADDR1 0x1c +#define CAFE_NAND_ADDR2 0x20 + +#define CAFE_NAND_TIMING1 0x24 +#define CAFE_NAND_TIMING1_TCLS GENMASK(31, 28) +#define CAFE_NAND_TIMING1_TCLH GENMASK(27, 24) +#define CAFE_NAND_TIMING1_TALS GENMASK(23, 20) +#define CAFE_NAND_TIMING1_TALH GENMASK(19, 16) +#define CAFE_NAND_TIMING1_TWB GENMASK(15, 8) +#define CAFE_NAND_TIMING1_TRB GENMASK(7, 0) + +#define CAFE_NAND_TIMING2 0x28 +#define CAFE_NAND_TIMING2_TRR GENMASK(31, 28) +#define CAFE_NAND_TIMING2_TREA GENMASK(27, 24) +#define CAFE_NAND_TIMING2_TDH GENMASK(23, 20) +#define CAFE_NAND_TIMING2_TDS GENMASK(19, 16) +#define CAFE_NAND_TIMING2_TRH GENMASK(15, 12) +#define CAFE_NAND_TIMING2_TRP GENMASK(11, 8) +#define CAFE_NAND_TIMING2_TWH GENMASK(7, 4) +#define CAFE_NAND_TIMING2_TWP GENMASK(3, 0) + +#define CAFE_NAND_TIMING3 0x2c +#define CAFE_NAND_TIMING3_TAR GENMASK(31, 28) +#define CAFE_NAND_TIMING3_TCLR GENMASK(27, 24) + +#define CAFE_NAND_NONMEM_READ_DATA 0x30 +#define CAFE_NAND_ECC_READ_CODE 0x38 + +#define CAFE_NAND_ECC_RESULT 0x3C +#define CAFE_NAND_ECC_RESULT_RS_ERRORS BIT(18) +#define CAFE_NAND_ECC_RESULT_STATUS GENMASK(17, 16) +#define CAFE_NAND_ECC_RESULT_NO_ERROR (0 << 16) +#define CAFE_NAND_ECC_RESULT_CORRECTABLE_ERRS (1 << 16) +#define CAFE_NAND_ECC_RESULT_UNCORRECTABLE_ERRS (2 << 16) +#define CAFE_NAND_ECC_RESULT_FAIL_BIT_LOC GENMASK(13, 0) + +#define CAFE_NAND_DMA_CTRL 0x40 +#define CAFE_NAND_DMA_CTRL_ENABLE BIT(31) +#define CAFE_NAND_DMA_CTRL_RESERVED BIT(30) +#define CAFE_NAND_DMA_CTRL_DATA_IN BIT(29) +#define CAFE_NAND_DMA_CTRL_DATA_LEN GENMASK(11, 0) + +#define CAFE_NAND_DMA_ADDR0 0x44 +#define CAFE_NAND_DMA_ADDR1 0x48 +#define CAFE_NAND_ECC_SYN_REG(x) (((x) / 2) + 0x50) +#define CAFE_NAND_ECC_SYN_FIELD(x) (((x) % 2) ? GENMASK(31, 16) : GENMASK(15, 0)) + +#define CAFE_NAND_CTRL4 0x60 +#define CAFE_NAND_CTRL4_NO_READ_DELAY BIT(8) + +#define CAFE_NAND_DRIVE_STRENGTH 0x64 +#define CAFE_NAND_DRIVE_STRENGTH_VAL GENMASK(4, 0) + +#define CAFE_NAND_READ_DATA 0x1000 +#define CAFE_NAND_WRITE_DATA 0x2000 + +#define CAFE_GLOBAL_CTRL 0x3004 +#define CAFE_GLOBAL_CCIC_CLK_ENABLE BIT(14) +#define CAFE_GLOBAL_SDH_CLK_ENABLE BIT(13) +#define CAFE_GLOBAL_NAND_CLK_ENABLE BIT(12) +#define CAFE_GLOBAL_CLKRUN_ENABLE_SET BIT(11) +#define CAFE_GLOBAL_CLKRUN_ENABLE_CLEAR BIT(10) +#define CAFE_GLOBAL_SW_IRQ_SET BIT(7) +#define CAFE_GLOBAL_SW_IRQ_CLEAR BIT(6) +#define CAFE_GLOBAL_STOP_MASTER_DONE BIT(5) +#define CAFE_GLOBAL_STOP_MASTER BIT(4) +#define CAFE_GLOBAL_MASTER_RESET_CLEAR BIT(3) +#define CAFE_GLOBAL_MASTER_RESET_SET BIT(2) +#define CAFE_GLOBAL_SW_RESET_CLEAR BIT(1) +#define CAFE_GLOBAL_SW_RESET_SET BIT(0) + +#define CAFE_GLOBAL_IRQ 0x3008 +#define CAFE_GLOBAL_IRQ_MASK 0x300c +#define CAFE_GLOBAL_IRQ_PCI_ERROR BIT(31) +#define CAFE_GLOBAL_IRQ_VPD_TWSI BIT(26) +#define CAFE_GLOBAL_IRQ_CCIC BIT(2) +#define CAFE_GLOBAL_IRQ_SDH BIT(1) +#define CAFE_GLOBAL_IRQ_NAND BIT(0) + +#define CAFE_GLOBAL_RESET 0x3034 +#define CAFE_GLOBAL_RESET_CCIC BIT(2) +#define CAFE_GLOBAL_RESET_SDH BIT(1) +#define CAFE_GLOBAL_RESET_NAND BIT(0) + +#define CAFE_FIELD_PREP(reg, field, val) FIELD_PREP(CAFE_##reg##_##field, val) +#define CAFE_FIELD_GET(reg, field, val) FIELD_GET(CAFE_##reg##_##field, val) struct cafe_priv { struct nand_chip nand; @@ -104,7 +195,8 @@ static const char *part_probes[] = { "cmdlinepart", "RedBoot", NULL }; static int cafe_device_ready(struct nand_chip *chip) { struct cafe_priv *cafe = nand_get_controller_data(chip); - int result = !!(cafe_readl(cafe, NAND_STATUS) & 0x40000000); + int result = !!(cafe_readl(cafe, NAND_STATUS) & + CAFE_NAND_STATUS_FLASH_BUSY); uint32_t irqs = cafe_readl(cafe, NAND_IRQ); cafe_writel(cafe, irqs, NAND_IRQ); @@ -164,16 +256,20 @@ static void cafe_nand_cmdfunc(struct nand_chip *chip, unsigned command, struct cafe_priv *cafe = nand_get_controller_data(chip); int adrbytes = 0; uint32_t ctl1; - uint32_t doneint = 0x80000000; + uint32_t doneint = CAFE_NAND_IRQ_CMD_DONE; cafe_dev_dbg(&cafe->pdev->dev, "cmdfunc %02x, 0x%x, 0x%x\n", command, column, page_addr); if (command == NAND_CMD_ERASE2 || command == NAND_CMD_PAGEPROG) { /* Second half of a command we already calculated */ - cafe_writel(cafe, cafe->ctl2 | 0x100 | command, NAND_CTRL2); + cafe_writel(cafe, + cafe->ctl2 | + CAFE_NAND_CTRL2_HAS_CMD2 | + CAFE_FIELD_PREP(NAND_CTRL2, CMD2, command), + NAND_CTRL2); ctl1 = cafe->ctl1; - cafe->ctl2 &= ~(1<<30); + cafe->ctl2 &= ~CAFE_NAND_CTRL2_AUTO_WRITE_ECC; cafe_dev_dbg(&cafe->pdev->dev, "Continue command, ctl1 %08x, #data %d\n", cafe->ctl1, cafe->nr_data); goto do_command; @@ -209,26 +305,29 @@ static void cafe_nand_cmdfunc(struct nand_chip *chip, unsigned command, cafe->data_pos = cafe->datalen = 0; /* Set command valid bit, mask in the chip select bit */ - ctl1 = 0x80000000 | command | (cafe->ctl1 & CTRL1_CHIPSELECT); + ctl1 = CAFE_NAND_CTRL1_HAS_CMD | + CAFE_FIELD_PREP(NAND_CTRL1, CMD, command) | + (cafe->ctl1 & CAFE_NAND_CTRL1_CE); /* Set RD or WR bits as appropriate */ if (command == NAND_CMD_READID || command == NAND_CMD_STATUS) { - ctl1 |= (1<<26); /* rd */ + ctl1 |= CAFE_NAND_CTRL1_HAS_DATA_IN; /* Always 5 bytes, for now */ cafe->datalen = 4; /* And one address cycle -- even for STATUS, since the controller doesn't work without */ adrbytes = 1; } else if (command == NAND_CMD_READ0 || command == NAND_CMD_READ1 || command == NAND_CMD_READOOB || command == NAND_CMD_RNDOUT) { - ctl1 |= 1<<26; /* rd */ + ctl1 |= CAFE_NAND_CTRL1_HAS_DATA_IN; /* For now, assume just read to end of page */ cafe->datalen = mtd->writesize + mtd->oobsize - column; } else if (command == NAND_CMD_SEQIN) - ctl1 |= 1<<25; /* wr */ + ctl1 |= CAFE_NAND_CTRL1_HAS_DATA_OUT; /* Set number of address bytes */ if (adrbytes) - ctl1 |= ((adrbytes-1)|8) << 27; + ctl1 |= CAFE_NAND_CTRL1_HAS_ADDR | + CAFE_FIELD_PREP(NAND_CTRL1, NUM_ADDR_CYC, adrbytes - 1); if (command == NAND_CMD_SEQIN || command == NAND_CMD_ERASE1) { /* Ignore the first command of a pair; the hardware @@ -240,9 +339,15 @@ static void cafe_nand_cmdfunc(struct nand_chip *chip, unsigned command, } /* RNDOUT and READ0 commands need a following byte */ if (command == NAND_CMD_RNDOUT) - cafe_writel(cafe, cafe->ctl2 | 0x100 | NAND_CMD_RNDOUTSTART, NAND_CTRL2); + cafe_writel(cafe, + cafe->ctl2 | CAFE_NAND_CTRL2_HAS_CMD2 | + CAFE_FIELD_PREP(NAND_CTRL2, CMD2, NAND_CMD_RNDOUTSTART), + NAND_CTRL2); else if (command == NAND_CMD_READ0 && mtd->writesize > 512) - cafe_writel(cafe, cafe->ctl2 | 0x100 | NAND_CMD_READSTART, NAND_CTRL2); + cafe_writel(cafe, + cafe->ctl2 | CAFE_NAND_CTRL2_HAS_CMD2 | + CAFE_FIELD_PREP(NAND_CTRL2, CMD2, NAND_CMD_READSTART), + NAND_CTRL2); do_command: cafe_dev_dbg(&cafe->pdev->dev, "dlen %x, ctl1 %x, ctl2 %x\n", @@ -250,16 +355,23 @@ static void cafe_nand_cmdfunc(struct nand_chip *chip, unsigned command, /* NB: The datasheet lies -- we really should be subtracting 1 here */ cafe_writel(cafe, cafe->datalen, NAND_DATA_LEN); - cafe_writel(cafe, 0x90000000, NAND_IRQ); - if (cafe->usedma && (ctl1 & (3<<25))) { - uint32_t dmactl = 0xc0000000 + cafe->datalen; + cafe_writel(cafe, CAFE_NAND_IRQ_CMD_DONE | CAFE_NAND_IRQ_DMA_DONE, + NAND_IRQ); + if (cafe->usedma && + (ctl1 & (CAFE_NAND_CTRL1_HAS_DATA_IN | + CAFE_NAND_CTRL1_HAS_DATA_OUT))) { + uint32_t dmactl = CAFE_NAND_DMA_CTRL_ENABLE | + CAFE_NAND_DMA_CTRL_RESERVED; + + dmactl |= CAFE_FIELD_PREP(NAND_DMA_CTRL, DATA_LEN, + cafe->datalen); /* If WR or RD bits set, set up DMA */ - if (ctl1 & (1<<26)) { + if (ctl1 & CAFE_NAND_CTRL1_HAS_DATA_IN) { /* It's a read */ - dmactl |= (1<<29); + dmactl |= CAFE_NAND_DMA_CTRL_DATA_IN; /* ... so it's done when the DMA is done, not just the command. */ - doneint = 0x10000000; + doneint = CAFE_NAND_IRQ_DMA_DONE; } cafe_writel(cafe, dmactl, NAND_DMA_CTRL); } @@ -295,7 +407,7 @@ static void cafe_nand_cmdfunc(struct nand_chip *chip, unsigned command, command, 500000-c, irqs, cafe_readl(cafe, NAND_IRQ)); } - WARN_ON(cafe->ctl2 & (1<<30)); + WARN_ON(cafe->ctl2 & CAFE_NAND_CTRL2_AUTO_WRITE_ECC); switch (command) { @@ -322,10 +434,8 @@ static void cafe_select_chip(struct nand_chip *chip, int chipnr) /* Mask the appropriate bit into the stored value of ctl1 which will be used by cafe_nand_cmdfunc() */ - if (chipnr) - cafe->ctl1 |= CTRL1_CHIPSELECT; - else - cafe->ctl1 &= ~CTRL1_CHIPSELECT; + cafe->ctl1 &= ~CAFE_NAND_CTRL1_CE; + cafe->ctl1 |= CAFE_FIELD_PREP(NAND_CTRL1, CE, chipnr); } static irqreturn_t cafe_nand_interrupt(int irq, void *id) @@ -334,7 +444,9 @@ static irqreturn_t cafe_nand_interrupt(int irq, void *id) struct nand_chip *chip = mtd_to_nand(mtd); struct cafe_priv *cafe = nand_get_controller_data(chip); uint32_t irqs = cafe_readl(cafe, NAND_IRQ); - cafe_writel(cafe, irqs & ~0x90000000, NAND_IRQ); + cafe_writel(cafe, + irqs & ~(CAFE_NAND_IRQ_CMD_DONE | CAFE_NAND_IRQ_DMA_DONE), + NAND_IRQ); if (!irqs) return IRQ_NONE; @@ -368,25 +480,31 @@ static int cafe_nand_read_page(struct nand_chip *chip, uint8_t *buf, struct mtd_info *mtd = nand_to_mtd(chip); struct cafe_priv *cafe = nand_get_controller_data(chip); unsigned int max_bitflips = 0; + u32 ecc_result, status; cafe_dev_dbg(&cafe->pdev->dev, "ECC result %08x SYN1,2 %08x\n", cafe_readl(cafe, NAND_ECC_RESULT), - cafe_readl(cafe, NAND_ECC_SYN01)); + cafe_readl(cafe, NAND_ECC_SYN_REG(0))); nand_read_page_op(chip, page, 0, buf, mtd->writesize); chip->legacy.read_buf(chip, chip->oob_poi, mtd->oobsize); - if (checkecc && cafe_readl(cafe, NAND_ECC_RESULT) & (1<<18)) { + ecc_result = cafe_readl(cafe, NAND_ECC_RESULT); + status = CAFE_FIELD_GET(NAND_ECC_RESULT, STATUS, ecc_result); + if (checkecc && status == CAFE_NAND_ECC_RESULT_CORRECTABLE_ERRS) { unsigned short syn[8], pat[4]; int pos[4]; u8 *oob = chip->oob_poi; int i, n; for (i=0; i<8; i+=2) { - uint32_t tmp = cafe_readl(cafe, NAND_ECC_SYN01 + (i*2)); + uint32_t tmp = cafe_readl(cafe, NAND_ECC_SYN_REG(i)); + uint16_t idx; - syn[i] = cafe->rs->codec->index_of[tmp & 0xfff]; - syn[i+1] = cafe->rs->codec->index_of[(tmp >> 16) & 0xfff]; + idx = FIELD_GET(CAFE_NAND_ECC_SYN_FIELD(i), tmp); + syn[i] = cafe->rs->codec->index_of[idx]; + idx = FIELD_GET(CAFE_NAND_ECC_SYN_FIELD(i + 1), tmp); + syn[i+1] = cafe->rs->codec->index_of[idx]; } n = decode_rs16(cafe->rs, NULL, NULL, 1367, syn, 0, pos, 0, @@ -536,7 +654,7 @@ static int cafe_nand_write_page(struct nand_chip *chip, chip->legacy.write_buf(chip, chip->oob_poi, mtd->oobsize); /* Set up ECC autogeneration */ - cafe->ctl2 |= (1<<30); + cafe->ctl2 |= CAFE_NAND_CTRL2_AUTO_WRITE_ECC; return nand_prog_page_end_op(chip); } @@ -604,9 +722,9 @@ static int cafe_nand_attach_chip(struct nand_chip *chip) /* Restore the DMA flag */ cafe->usedma = usedma; - cafe->ctl2 = BIT(27); /* Reed-Solomon ECC */ - if (mtd->writesize == 2048) - cafe->ctl2 |= BIT(29); /* 2KiB page size */ + cafe->ctl2 = CAFE_NAND_CTRL2_ECC_ALG_RS | + CAFE_FIELD_PREP(NAND_CTRL2, PAGE_SIZE, + mtd->writesize / 512); /* Set up ECC according to the type of chip we found */ mtd_set_ooblayout(mtd, &cafe_ooblayout_ops); @@ -734,8 +852,8 @@ static int cafe_nand_probe(struct pci_dev *pdev, } /* Start off by resetting the NAND controller completely */ - cafe_writel(cafe, 1, NAND_RESET); - cafe_writel(cafe, 0, NAND_RESET); + cafe_writel(cafe, CAFE_GLOBAL_RESET_NAND, GLOBAL_RESET); + cafe_writel(cafe, 0, GLOBAL_RESET); cafe_writel(cafe, timing[0], NAND_TIMING1); cafe_writel(cafe, timing[1], NAND_TIMING2); @@ -751,17 +869,49 @@ static int cafe_nand_probe(struct pci_dev *pdev, /* Disable master reset, enable NAND clock */ ctrl = cafe_readl(cafe, GLOBAL_CTRL); - ctrl &= 0xffffeff0; - ctrl |= 0x00007000; - cafe_writel(cafe, ctrl | 0x05, GLOBAL_CTRL); - cafe_writel(cafe, ctrl | 0x0a, GLOBAL_CTRL); + ctrl &= ~(CAFE_GLOBAL_SW_RESET_SET | + CAFE_GLOBAL_SW_RESET_CLEAR | + CAFE_GLOBAL_MASTER_RESET_SET | + CAFE_GLOBAL_MASTER_RESET_CLEAR | + CAFE_GLOBAL_NAND_CLK_ENABLE); + ctrl |= CAFE_GLOBAL_NAND_CLK_ENABLE | + CAFE_GLOBAL_SDH_CLK_ENABLE | + CAFE_GLOBAL_CCIC_CLK_ENABLE; + cafe_writel(cafe, + ctrl | + CAFE_GLOBAL_MASTER_RESET_SET | + CAFE_GLOBAL_SW_RESET_SET, + GLOBAL_CTRL); + cafe_writel(cafe, + ctrl | + CAFE_GLOBAL_MASTER_RESET_CLEAR | + CAFE_GLOBAL_SW_RESET_CLEAR, + GLOBAL_CTRL); + cafe_writel(cafe, 0, NAND_DMA_CTRL); - cafe_writel(cafe, 0x7006, GLOBAL_CTRL); - cafe_writel(cafe, 0x700a, GLOBAL_CTRL); + cafe_writel(cafe, + CAFE_GLOBAL_NAND_CLK_ENABLE | + CAFE_GLOBAL_SDH_CLK_ENABLE | + CAFE_GLOBAL_CCIC_CLK_ENABLE | + CAFE_GLOBAL_MASTER_RESET_SET | + CAFE_GLOBAL_SW_RESET_CLEAR, + GLOBAL_CTRL); + cafe_writel(cafe, + CAFE_GLOBAL_NAND_CLK_ENABLE | + CAFE_GLOBAL_SDH_CLK_ENABLE | + CAFE_GLOBAL_CCIC_CLK_ENABLE | + CAFE_GLOBAL_MASTER_RESET_CLEAR | + CAFE_GLOBAL_SW_RESET_CLEAR, + GLOBAL_CTRL); /* Enable NAND IRQ in global IRQ mask register */ - cafe_writel(cafe, 0x80000007, GLOBAL_IRQ_MASK); + cafe_writel(cafe, + CAFE_GLOBAL_IRQ_PCI_ERROR | + CAFE_GLOBAL_IRQ_CCIC | + CAFE_GLOBAL_IRQ_SDH | + CAFE_GLOBAL_IRQ_NAND, + GLOBAL_IRQ_MASK); cafe_dev_dbg(&cafe->pdev->dev, "Control %x, IRQ mask %x\n", cafe_readl(cafe, GLOBAL_CTRL), cafe_readl(cafe, GLOBAL_IRQ_MASK)); @@ -788,7 +938,9 @@ static int cafe_nand_probe(struct pci_dev *pdev, nand_cleanup(&cafe->nand); out_irq: /* Disable NAND IRQ in global IRQ mask register */ - cafe_writel(cafe, ~1 & cafe_readl(cafe, GLOBAL_IRQ_MASK), GLOBAL_IRQ_MASK); + cafe_writel(cafe, + cafe_readl(cafe, GLOBAL_IRQ_MASK) & ~CAFE_GLOBAL_IRQ_NAND, + GLOBAL_IRQ_MASK); free_irq(pdev->irq, mtd); out_ior: pci_iounmap(pdev, cafe->mmio); @@ -805,7 +957,9 @@ static void cafe_nand_remove(struct pci_dev *pdev) struct cafe_priv *cafe = nand_get_controller_data(chip); /* Disable NAND IRQ in global IRQ mask register */ - cafe_writel(cafe, ~1 & cafe_readl(cafe, GLOBAL_IRQ_MASK), GLOBAL_IRQ_MASK); + cafe_writel(cafe, + cafe_readl(cafe, GLOBAL_IRQ_MASK) & ~CAFE_GLOBAL_IRQ_NAND, + GLOBAL_IRQ_MASK); free_irq(pdev->irq, mtd); nand_release(chip); free_rs(cafe->rs); @@ -830,8 +984,8 @@ static int cafe_nand_resume(struct pci_dev *pdev) struct cafe_priv *cafe = nand_get_controller_data(chip); /* Start off by resetting the NAND controller completely */ - cafe_writel(cafe, 1, NAND_RESET); - cafe_writel(cafe, 0, NAND_RESET); + cafe_writel(cafe, CAFE_GLOBAL_RESET_NAND, GLOBAL_RESET); + cafe_writel(cafe, 0, GLOBAL_RESET); cafe_writel(cafe, 0xffffffff, NAND_IRQ_MASK); /* Restore timing configuration */ @@ -841,13 +995,41 @@ static int cafe_nand_resume(struct pci_dev *pdev) /* Disable master reset, enable NAND clock */ ctrl = cafe_readl(cafe, GLOBAL_CTRL); - ctrl &= 0xffffeff0; - ctrl |= 0x00007000; - cafe_writel(cafe, ctrl | 0x05, GLOBAL_CTRL); - cafe_writel(cafe, ctrl | 0x0a, GLOBAL_CTRL); + ctrl &= ~(CAFE_GLOBAL_SW_RESET_SET | + CAFE_GLOBAL_SW_RESET_CLEAR | + CAFE_GLOBAL_MASTER_RESET_SET | + CAFE_GLOBAL_MASTER_RESET_CLEAR | + CAFE_GLOBAL_NAND_CLK_ENABLE); + ctrl |= CAFE_GLOBAL_NAND_CLK_ENABLE | + CAFE_GLOBAL_SDH_CLK_ENABLE | + CAFE_GLOBAL_CCIC_CLK_ENABLE; + cafe_writel(cafe, + ctrl | + CAFE_GLOBAL_MASTER_RESET_SET | + CAFE_GLOBAL_SW_RESET_SET, + GLOBAL_CTRL); + cafe_writel(cafe, + ctrl | + CAFE_GLOBAL_MASTER_RESET_CLEAR | + CAFE_GLOBAL_SW_RESET_CLEAR, + GLOBAL_CTRL); + cafe_writel(cafe, 0, NAND_DMA_CTRL); - cafe_writel(cafe, 0x7006, GLOBAL_CTRL); - cafe_writel(cafe, 0x700a, GLOBAL_CTRL); + + cafe_writel(cafe, + CAFE_GLOBAL_NAND_CLK_ENABLE | + CAFE_GLOBAL_SDH_CLK_ENABLE | + CAFE_GLOBAL_CCIC_CLK_ENABLE | + CAFE_GLOBAL_MASTER_RESET_SET | + CAFE_GLOBAL_SW_RESET_CLEAR, + GLOBAL_CTRL); + cafe_writel(cafe, + CAFE_GLOBAL_NAND_CLK_ENABLE | + CAFE_GLOBAL_SDH_CLK_ENABLE | + CAFE_GLOBAL_CCIC_CLK_ENABLE | + CAFE_GLOBAL_MASTER_RESET_CLEAR | + CAFE_GLOBAL_SW_RESET_CLEAR, + GLOBAL_CTRL); /* Set up DMA address */ cafe_writel(cafe, cafe->dmaaddr & 0xffffffff, NAND_DMA_ADDR0); @@ -858,7 +1040,12 @@ static int cafe_nand_resume(struct pci_dev *pdev) cafe_writel(cafe, 0, NAND_DMA_ADDR1); /* Enable NAND IRQ in global IRQ mask register */ - cafe_writel(cafe, 0x80000007, GLOBAL_IRQ_MASK); + cafe_writel(cafe, + CAFE_GLOBAL_IRQ_PCI_ERROR | + CAFE_GLOBAL_IRQ_CCIC | + CAFE_GLOBAL_IRQ_SDH | + CAFE_GLOBAL_IRQ_NAND, + GLOBAL_IRQ_MASK); return 0; } From patchwork Tue May 5 10:13:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Brezillon X-Patchwork-Id: 1283416 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=collabora.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20170209 header.b=QVD6W+e/; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49GbGh1vzlz9sRf for ; Tue, 5 May 2020 20:16:12 +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:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version: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=if7BpMVSy2JQZjeG7VgWXFAhbtsTE8jEVW52gxUG5fA=; b=QVD6W+e/8ZYEwQ h6AZVYqUa0dHMCSVUXXxkzKJmmvJUlaXlDLrQMTGKxFWxQZTJT4z0GT3jE2NWzmsIKwi6i15UGdr7 QJ/u7CtDLXW+0r9cwcPUAoXiaeikB3mwTADl/Aslj6oJ7D3cA1GcheZZd2YAePRNY8s4ahgePpO09 bnrjwbz5KAwiwCAHj8HTLxyHIrNXunwO5LCkas4/sPHvEiqN3NyI39lrkU5tO+ef8fXj7TlKETdx1 KXzppwBBn8lY0I/UV3L7Mk2OecFenrlaVq7rWl+v9gwKFJ3pPwW3ZbMbX7LO2fZbK8+Kb+E76wp2w sgdzctGLS6airPBpjRWA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVucS-0002ua-67; Tue, 05 May 2020 10:16:08 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuaQ-00076y-5e for linux-mtd@lists.infradead.org; Tue, 05 May 2020 10:14:05 +0000 Received: from localhost.localdomain (unknown [IPv6:2a01:e0a:2c:6930:d3ea:1c7:41fd:3038]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 0504F2A1AF9; Tue, 5 May 2020 11:13:59 +0100 (BST) From: Boris Brezillon To: Miquel Raynal , linux-mtd@lists.infradead.org, Lubomir Rintel Subject: [PATCH v2 07/19] mtd: rawnand: cafe: Factor out the controller initialization logic Date: Tue, 5 May 2020 12:13:41 +0200 Message-Id: <20200505101353.1776394-8-boris.brezillon@collabora.com> X-Mailer: git-send-email 2.25.3 In-Reply-To: <20200505101353.1776394-1-boris.brezillon@collabora.com> References: <20200505101353.1776394-1-boris.brezillon@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200505_031402_519666_85495F39 X-CRM114-Status: GOOD ( 15.59 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , Boris Brezillon , Vignesh Raghavendra , Tudor Ambarus Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org The same code is present in the probe and resume path. Let's create an init helper to factor that out. Signed-off-by: Boris Brezillon Tested-by: Lubomir Rintel Reviewed-by: Miquel Raynal --- Changes in v2: * Add R-b/T-b * Add a blank line before return statement --- drivers/mtd/nand/raw/cafe_nand.c | 188 +++++++++++-------------------- 1 file changed, 67 insertions(+), 121 deletions(-) diff --git a/drivers/mtd/nand/raw/cafe_nand.c b/drivers/mtd/nand/raw/cafe_nand.c index 7fb5b21aeb00..542165db9a67 100644 --- a/drivers/mtd/nand/raw/cafe_nand.c +++ b/drivers/mtd/nand/raw/cafe_nand.c @@ -772,12 +772,76 @@ static const struct nand_controller_ops cafe_nand_controller_ops = { .detach_chip = cafe_nand_detach_chip, }; +static void cafe_nand_init(struct cafe_priv *cafe) +{ + u32 ctrl; + + /* Start off by resetting the NAND controller completely */ + cafe_writel(cafe, CAFE_GLOBAL_RESET_NAND, GLOBAL_RESET); + cafe_writel(cafe, 0, GLOBAL_RESET); + cafe_writel(cafe, 0xffffffff, NAND_IRQ_MASK); + + /* Restore timing configuration */ + cafe_writel(cafe, timing[0], NAND_TIMING1); + cafe_writel(cafe, timing[1], NAND_TIMING2); + cafe_writel(cafe, timing[2], NAND_TIMING3); + + /* Disable master reset, enable NAND clock */ + ctrl = cafe_readl(cafe, GLOBAL_CTRL); + ctrl &= ~(CAFE_GLOBAL_SW_RESET_SET | + CAFE_GLOBAL_SW_RESET_CLEAR | + CAFE_GLOBAL_MASTER_RESET_SET | + CAFE_GLOBAL_MASTER_RESET_CLEAR | + CAFE_GLOBAL_NAND_CLK_ENABLE); + ctrl |= CAFE_GLOBAL_NAND_CLK_ENABLE | + CAFE_GLOBAL_SDH_CLK_ENABLE | + CAFE_GLOBAL_CCIC_CLK_ENABLE; + cafe_writel(cafe, + ctrl | + CAFE_GLOBAL_MASTER_RESET_SET | + CAFE_GLOBAL_SW_RESET_SET, + GLOBAL_CTRL); + cafe_writel(cafe, + ctrl | + CAFE_GLOBAL_MASTER_RESET_CLEAR | + CAFE_GLOBAL_SW_RESET_CLEAR, + GLOBAL_CTRL); + + cafe_writel(cafe, 0, NAND_DMA_CTRL); + + cafe_writel(cafe, + CAFE_GLOBAL_NAND_CLK_ENABLE | + CAFE_GLOBAL_SDH_CLK_ENABLE | + CAFE_GLOBAL_CCIC_CLK_ENABLE | + CAFE_GLOBAL_MASTER_RESET_SET | + CAFE_GLOBAL_SW_RESET_CLEAR, + GLOBAL_CTRL); + cafe_writel(cafe, + CAFE_GLOBAL_NAND_CLK_ENABLE | + CAFE_GLOBAL_SDH_CLK_ENABLE | + CAFE_GLOBAL_CCIC_CLK_ENABLE | + CAFE_GLOBAL_MASTER_RESET_CLEAR | + CAFE_GLOBAL_SW_RESET_CLEAR, + GLOBAL_CTRL); + + /* Set up DMA address */ + cafe_writel(cafe, lower_32_bits(cafe->dmaaddr), NAND_DMA_ADDR0); + cafe_writel(cafe, upper_32_bits(cafe->dmaaddr), NAND_DMA_ADDR1); + + /* Enable NAND IRQ in global IRQ mask register */ + cafe_writel(cafe, + CAFE_GLOBAL_IRQ_PCI_ERROR | + CAFE_GLOBAL_IRQ_CCIC | + CAFE_GLOBAL_IRQ_SDH | + CAFE_GLOBAL_IRQ_NAND, + GLOBAL_IRQ_MASK); +} + static int cafe_nand_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct mtd_info *mtd; struct cafe_priv *cafe; - uint32_t ctrl; int err = 0; /* Very old versions shared the same PCI ident for all three @@ -851,15 +915,8 @@ static int cafe_nand_probe(struct pci_dev *pdev, } } - /* Start off by resetting the NAND controller completely */ - cafe_writel(cafe, CAFE_GLOBAL_RESET_NAND, GLOBAL_RESET); - cafe_writel(cafe, 0, GLOBAL_RESET); + cafe_nand_init(cafe); - cafe_writel(cafe, timing[0], NAND_TIMING1); - cafe_writel(cafe, timing[1], NAND_TIMING2); - cafe_writel(cafe, timing[2], NAND_TIMING3); - - cafe_writel(cafe, 0xffffffff, NAND_IRQ_MASK); err = request_irq(pdev->irq, &cafe_nand_interrupt, IRQF_SHARED, "CAFE NAND", mtd); if (err) { @@ -867,55 +924,6 @@ static int cafe_nand_probe(struct pci_dev *pdev, goto out_ior; } - /* Disable master reset, enable NAND clock */ - ctrl = cafe_readl(cafe, GLOBAL_CTRL); - ctrl &= ~(CAFE_GLOBAL_SW_RESET_SET | - CAFE_GLOBAL_SW_RESET_CLEAR | - CAFE_GLOBAL_MASTER_RESET_SET | - CAFE_GLOBAL_MASTER_RESET_CLEAR | - CAFE_GLOBAL_NAND_CLK_ENABLE); - ctrl |= CAFE_GLOBAL_NAND_CLK_ENABLE | - CAFE_GLOBAL_SDH_CLK_ENABLE | - CAFE_GLOBAL_CCIC_CLK_ENABLE; - cafe_writel(cafe, - ctrl | - CAFE_GLOBAL_MASTER_RESET_SET | - CAFE_GLOBAL_SW_RESET_SET, - GLOBAL_CTRL); - cafe_writel(cafe, - ctrl | - CAFE_GLOBAL_MASTER_RESET_CLEAR | - CAFE_GLOBAL_SW_RESET_CLEAR, - GLOBAL_CTRL); - - cafe_writel(cafe, 0, NAND_DMA_CTRL); - - cafe_writel(cafe, - CAFE_GLOBAL_NAND_CLK_ENABLE | - CAFE_GLOBAL_SDH_CLK_ENABLE | - CAFE_GLOBAL_CCIC_CLK_ENABLE | - CAFE_GLOBAL_MASTER_RESET_SET | - CAFE_GLOBAL_SW_RESET_CLEAR, - GLOBAL_CTRL); - cafe_writel(cafe, - CAFE_GLOBAL_NAND_CLK_ENABLE | - CAFE_GLOBAL_SDH_CLK_ENABLE | - CAFE_GLOBAL_CCIC_CLK_ENABLE | - CAFE_GLOBAL_MASTER_RESET_CLEAR | - CAFE_GLOBAL_SW_RESET_CLEAR, - GLOBAL_CTRL); - - /* Enable NAND IRQ in global IRQ mask register */ - cafe_writel(cafe, - CAFE_GLOBAL_IRQ_PCI_ERROR | - CAFE_GLOBAL_IRQ_CCIC | - CAFE_GLOBAL_IRQ_SDH | - CAFE_GLOBAL_IRQ_NAND, - GLOBAL_IRQ_MASK); - cafe_dev_dbg(&cafe->pdev->dev, "Control %x, IRQ mask %x\n", - cafe_readl(cafe, GLOBAL_CTRL), - cafe_readl(cafe, GLOBAL_IRQ_MASK)); - /* Do not use the DMA during the NAND identification */ cafe->usedma = 0; @@ -978,74 +986,12 @@ MODULE_DEVICE_TABLE(pci, cafe_nand_tbl); static int cafe_nand_resume(struct pci_dev *pdev) { - uint32_t ctrl; struct mtd_info *mtd = pci_get_drvdata(pdev); struct nand_chip *chip = mtd_to_nand(mtd); struct cafe_priv *cafe = nand_get_controller_data(chip); - /* Start off by resetting the NAND controller completely */ - cafe_writel(cafe, CAFE_GLOBAL_RESET_NAND, GLOBAL_RESET); - cafe_writel(cafe, 0, GLOBAL_RESET); - cafe_writel(cafe, 0xffffffff, NAND_IRQ_MASK); + cafe_nand_init(cafe); - /* Restore timing configuration */ - cafe_writel(cafe, timing[0], NAND_TIMING1); - cafe_writel(cafe, timing[1], NAND_TIMING2); - cafe_writel(cafe, timing[2], NAND_TIMING3); - - /* Disable master reset, enable NAND clock */ - ctrl = cafe_readl(cafe, GLOBAL_CTRL); - ctrl &= ~(CAFE_GLOBAL_SW_RESET_SET | - CAFE_GLOBAL_SW_RESET_CLEAR | - CAFE_GLOBAL_MASTER_RESET_SET | - CAFE_GLOBAL_MASTER_RESET_CLEAR | - CAFE_GLOBAL_NAND_CLK_ENABLE); - ctrl |= CAFE_GLOBAL_NAND_CLK_ENABLE | - CAFE_GLOBAL_SDH_CLK_ENABLE | - CAFE_GLOBAL_CCIC_CLK_ENABLE; - cafe_writel(cafe, - ctrl | - CAFE_GLOBAL_MASTER_RESET_SET | - CAFE_GLOBAL_SW_RESET_SET, - GLOBAL_CTRL); - cafe_writel(cafe, - ctrl | - CAFE_GLOBAL_MASTER_RESET_CLEAR | - CAFE_GLOBAL_SW_RESET_CLEAR, - GLOBAL_CTRL); - - cafe_writel(cafe, 0, NAND_DMA_CTRL); - - cafe_writel(cafe, - CAFE_GLOBAL_NAND_CLK_ENABLE | - CAFE_GLOBAL_SDH_CLK_ENABLE | - CAFE_GLOBAL_CCIC_CLK_ENABLE | - CAFE_GLOBAL_MASTER_RESET_SET | - CAFE_GLOBAL_SW_RESET_CLEAR, - GLOBAL_CTRL); - cafe_writel(cafe, - CAFE_GLOBAL_NAND_CLK_ENABLE | - CAFE_GLOBAL_SDH_CLK_ENABLE | - CAFE_GLOBAL_CCIC_CLK_ENABLE | - CAFE_GLOBAL_MASTER_RESET_CLEAR | - CAFE_GLOBAL_SW_RESET_CLEAR, - GLOBAL_CTRL); - - /* Set up DMA address */ - cafe_writel(cafe, cafe->dmaaddr & 0xffffffff, NAND_DMA_ADDR0); - if (sizeof(cafe->dmaaddr) > 4) - /* Shift in two parts to shut the compiler up */ - cafe_writel(cafe, (cafe->dmaaddr >> 16) >> 16, NAND_DMA_ADDR1); - else - cafe_writel(cafe, 0, NAND_DMA_ADDR1); - - /* Enable NAND IRQ in global IRQ mask register */ - cafe_writel(cafe, - CAFE_GLOBAL_IRQ_PCI_ERROR | - CAFE_GLOBAL_IRQ_CCIC | - CAFE_GLOBAL_IRQ_SDH | - CAFE_GLOBAL_IRQ_NAND, - GLOBAL_IRQ_MASK); return 0; } From patchwork Tue May 5 10:13:42 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Brezillon X-Patchwork-Id: 1283415 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=collabora.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20170209 header.b=CBEh9zHC; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49GbGV63Sjz9sSs for ; Tue, 5 May 2020 20:16:02 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version: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=Kd6wPxQXk7oaUlzmpsAZmx6YfLX+ZUzkdwPi/306XYc=; b=CBEh9zHCewEKiq e2dZ2Evya7lCjQ07jTpOkUhby9mN2e0zarw9b0y+UUbbfcywJmrETuHwkdfJ7gqQ/WA3RUaKaf70k BjL6KlIoDogG4lTEj+3Vh5L2EVBQOTDdDVordYN0XV4tQoFzwjlmxZAZffUWeSB3bBIdt1JGPSNEg qODP3C/Yq1HXYLlbwnGduZ/vasGrmt96+0FdZENVHIoOP6w9FZw4qQuA9gq4CWQg2uvHovMPhnRYc ZVCkh3/t9yTAQunJSCC1IMLU1ZkzfFeA6QEhfH52cySQFOmZQUv2MsAk1Xn++njafY4Y9LKdac4j6 A9ggqZBj1LG+JEOnhPGA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVucA-0002cJ-L6; Tue, 05 May 2020 10:15:50 +0000 Received: from bhuna.collabora.co.uk ([46.235.227.227]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuaQ-00076z-CI for linux-mtd@lists.infradead.org; Tue, 05 May 2020 10:14:05 +0000 Received: from localhost.localdomain (unknown [IPv6:2a01:e0a:2c:6930:d3ea:1c7:41fd:3038]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 483DB2A1AFD; Tue, 5 May 2020 11:14:00 +0100 (BST) From: Boris Brezillon To: Miquel Raynal , linux-mtd@lists.infradead.org, Lubomir Rintel Subject: [PATCH v2 08/19] mtd: rawnand: cafe: Get rid of the debug module param Date: Tue, 5 May 2020 12:13:42 +0200 Message-Id: <20200505101353.1776394-9-boris.brezillon@collabora.com> X-Mailer: git-send-email 2.25.3 In-Reply-To: <20200505101353.1776394-1-boris.brezillon@collabora.com> References: <20200505101353.1776394-1-boris.brezillon@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200505_031402_706261_F7E35AC5 X-CRM114-Status: GOOD ( 14.80 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [46.235.227.227 listed in list.dnswl.org] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , Boris Brezillon , Vignesh Raghavendra , Tudor Ambarus Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Dynamic prink already offers conditional debug traces enablement, let's not define a new way to do the same thing. Signed-off-by: Boris Brezillon Reviewed-by: Miquel Raynal --- Changes in v2: * Add R-b --- drivers/mtd/nand/raw/cafe_nand.c | 59 ++++++++++++++------------------ 1 file changed, 25 insertions(+), 34 deletions(-) diff --git a/drivers/mtd/nand/raw/cafe_nand.c b/drivers/mtd/nand/raw/cafe_nand.c index 542165db9a67..fedf434a563f 100644 --- a/drivers/mtd/nand/raw/cafe_nand.c +++ b/drivers/mtd/nand/raw/cafe_nand.c @@ -10,10 +10,7 @@ */ #include -#define DEBUG - #include -#undef DEBUG #include #include #include @@ -170,9 +167,6 @@ module_param(usedma, int, 0644); static int skipbbt = 0; module_param(skipbbt, int, 0644); -static int debug = 0; -module_param(debug, int, 0644); - static int regdebug = 0; module_param(regdebug, int, 0644); @@ -185,9 +179,6 @@ module_param_array(timing, int, &numtimings, 0644); static const char *part_probes[] = { "cmdlinepart", "RedBoot", NULL }; -/* Hrm. Why isn't this already conditional on something in the struct device? */ -#define cafe_dev_dbg(dev, args...) do { if (debug) dev_dbg(dev, ##args); } while(0) - /* Make it easier to switch to PIO if we need to */ #define cafe_readl(cafe, addr) readl((cafe)->mmio + CAFE_##addr) #define cafe_writel(cafe, datum, addr) writel(datum, (cafe)->mmio + CAFE_##addr) @@ -201,7 +192,7 @@ static int cafe_device_ready(struct nand_chip *chip) cafe_writel(cafe, irqs, NAND_IRQ); - cafe_dev_dbg(&cafe->pdev->dev, "NAND device is%s ready, IRQ %x (%x) (%x,%x)\n", + dev_dbg(&cafe->pdev->dev, "NAND device is%s ready, IRQ %x (%x) (%x,%x)\n", result?"":" not", irqs, cafe_readl(cafe, NAND_IRQ), cafe_readl(cafe, GLOBAL_IRQ), cafe_readl(cafe, GLOBAL_IRQ_MASK)); @@ -220,7 +211,7 @@ static void cafe_write_buf(struct nand_chip *chip, const uint8_t *buf, int len) cafe->datalen += len; - cafe_dev_dbg(&cafe->pdev->dev, "Copy 0x%x bytes to write buffer. datalen 0x%x\n", + dev_dbg(&cafe->pdev->dev, "Copy 0x%x bytes to write buffer. datalen 0x%x\n", len, cafe->datalen); } @@ -233,8 +224,8 @@ static void cafe_read_buf(struct nand_chip *chip, uint8_t *buf, int len) else memcpy_fromio(buf, cafe->mmio + CAFE_NAND_READ_DATA + cafe->datalen, len); - cafe_dev_dbg(&cafe->pdev->dev, "Copy 0x%x bytes from position 0x%x in read buffer.\n", - len, cafe->datalen); + dev_dbg(&cafe->pdev->dev, "Copy 0x%x bytes from position 0x%x in read buffer.\n", + len, cafe->datalen); cafe->datalen += len; } @@ -244,7 +235,7 @@ static uint8_t cafe_read_byte(struct nand_chip *chip) uint8_t d; cafe_read_buf(chip, &d, 1); - cafe_dev_dbg(&cafe->pdev->dev, "Read %02x\n", d); + dev_dbg(&cafe->pdev->dev, "Read %02x\n", d); return d; } @@ -258,7 +249,7 @@ static void cafe_nand_cmdfunc(struct nand_chip *chip, unsigned command, uint32_t ctl1; uint32_t doneint = CAFE_NAND_IRQ_CMD_DONE; - cafe_dev_dbg(&cafe->pdev->dev, "cmdfunc %02x, 0x%x, 0x%x\n", + dev_dbg(&cafe->pdev->dev, "cmdfunc %02x, 0x%x, 0x%x\n", command, column, page_addr); if (command == NAND_CMD_ERASE2 || command == NAND_CMD_PAGEPROG) { @@ -270,8 +261,8 @@ static void cafe_nand_cmdfunc(struct nand_chip *chip, unsigned command, NAND_CTRL2); ctl1 = cafe->ctl1; cafe->ctl2 &= ~CAFE_NAND_CTRL2_AUTO_WRITE_ECC; - cafe_dev_dbg(&cafe->pdev->dev, "Continue command, ctl1 %08x, #data %d\n", - cafe->ctl1, cafe->nr_data); + dev_dbg(&cafe->pdev->dev, "Continue command, ctl1 %08x, #data %d\n", + cafe->ctl1, cafe->nr_data); goto do_command; } /* Reset ECC engine */ @@ -333,8 +324,8 @@ static void cafe_nand_cmdfunc(struct nand_chip *chip, unsigned command, /* Ignore the first command of a pair; the hardware deals with them both at once, later */ cafe->ctl1 = ctl1; - cafe_dev_dbg(&cafe->pdev->dev, "Setup for delayed command, ctl1 %08x, dlen %x\n", - cafe->ctl1, cafe->datalen); + dev_dbg(&cafe->pdev->dev, "Setup for delayed command, ctl1 %08x, dlen %x\n", + cafe->ctl1, cafe->datalen); return; } /* RNDOUT and READ0 commands need a following byte */ @@ -350,7 +341,7 @@ static void cafe_nand_cmdfunc(struct nand_chip *chip, unsigned command, NAND_CTRL2); do_command: - cafe_dev_dbg(&cafe->pdev->dev, "dlen %x, ctl1 %x, ctl2 %x\n", + dev_dbg(&cafe->pdev->dev, "dlen %x, ctl1 %x, ctl2 %x\n", cafe->datalen, ctl1, cafe_readl(cafe, NAND_CTRL2)); /* NB: The datasheet lies -- we really should be subtracting 1 here */ @@ -399,12 +390,12 @@ static void cafe_nand_cmdfunc(struct nand_chip *chip, unsigned command, break; udelay(1); if (!(c % 100000)) - cafe_dev_dbg(&cafe->pdev->dev, "Wait for ready, IRQ %x\n", irqs); + dev_dbg(&cafe->pdev->dev, "Wait for ready, IRQ %x\n", irqs); cpu_relax(); } cafe_writel(cafe, doneint, NAND_IRQ); - cafe_dev_dbg(&cafe->pdev->dev, "Command %x completed after %d usec, irqs %x (%x)\n", - command, 500000-c, irqs, cafe_readl(cafe, NAND_IRQ)); + dev_dbg(&cafe->pdev->dev, "Command %x completed after %d usec, irqs %x (%x)\n", + command, 500000-c, irqs, cafe_readl(cafe, NAND_IRQ)); } WARN_ON(cafe->ctl2 & CAFE_NAND_CTRL2_AUTO_WRITE_ECC); @@ -430,7 +421,7 @@ static void cafe_select_chip(struct nand_chip *chip, int chipnr) { struct cafe_priv *cafe = nand_get_controller_data(chip); - cafe_dev_dbg(&cafe->pdev->dev, "select_chip %d\n", chipnr); + dev_dbg(&cafe->pdev->dev, "select_chip %d\n", chipnr); /* Mask the appropriate bit into the stored value of ctl1 which will be used by cafe_nand_cmdfunc() */ @@ -450,7 +441,7 @@ static irqreturn_t cafe_nand_interrupt(int irq, void *id) if (!irqs) return IRQ_NONE; - cafe_dev_dbg(&cafe->pdev->dev, "irq, bits %x (%x)\n", irqs, cafe_readl(cafe, NAND_IRQ)); + dev_dbg(&cafe->pdev->dev, "irq, bits %x (%x)\n", irqs, cafe_readl(cafe, NAND_IRQ)); return IRQ_HANDLED; } @@ -482,9 +473,9 @@ static int cafe_nand_read_page(struct nand_chip *chip, uint8_t *buf, unsigned int max_bitflips = 0; u32 ecc_result, status; - cafe_dev_dbg(&cafe->pdev->dev, "ECC result %08x SYN1,2 %08x\n", - cafe_readl(cafe, NAND_ECC_RESULT), - cafe_readl(cafe, NAND_ECC_SYN_REG(0))); + dev_dbg(&cafe->pdev->dev, "ECC result %08x SYN1,2 %08x\n", + cafe_readl(cafe, NAND_ECC_RESULT), + cafe_readl(cafe, NAND_ECC_SYN_REG(0))); nand_read_page_op(chip, page, 0, buf, mtd->writesize); chip->legacy.read_buf(chip, chip->oob_poi, mtd->oobsize); @@ -716,8 +707,8 @@ static int cafe_nand_attach_chip(struct nand_chip *chip) cafe_writel(cafe, lower_32_bits(cafe->dmaaddr), NAND_DMA_ADDR0); cafe_writel(cafe, upper_32_bits(cafe->dmaaddr), NAND_DMA_ADDR1); - cafe_dev_dbg(&cafe->pdev->dev, "Set DMA address to %x (virt %p)\n", - cafe_readl(cafe, NAND_DMA_ADDR0), cafe->dmabuf); + dev_dbg(&cafe->pdev->dev, "Set DMA address to %x (virt %p)\n", + cafe_readl(cafe, NAND_DMA_ADDR0), cafe->dmabuf); /* Restore the DMA flag */ cafe->usedma = usedma; @@ -899,16 +890,16 @@ static int cafe_nand_probe(struct pci_dev *pdev, } if (numtimings == 3) { - cafe_dev_dbg(&cafe->pdev->dev, "Using provided timings (%08x %08x %08x)\n", - timing[0], timing[1], timing[2]); + dev_dbg(&cafe->pdev->dev, "Using provided timings (%08x %08x %08x)\n", + timing[0], timing[1], timing[2]); } else { timing[0] = cafe_readl(cafe, NAND_TIMING1); timing[1] = cafe_readl(cafe, NAND_TIMING2); timing[2] = cafe_readl(cafe, NAND_TIMING3); if (timing[0] | timing[1] | timing[2]) { - cafe_dev_dbg(&cafe->pdev->dev, "Timing registers already set (%08x %08x %08x)\n", - timing[0], timing[1], timing[2]); + dev_dbg(&cafe->pdev->dev, "Timing registers already set (%08x %08x %08x)\n", + timing[0], timing[1], timing[2]); } else { dev_warn(&cafe->pdev->dev, "Timing registers unset; using most conservative defaults\n"); timing[0] = timing[1] = timing[2] = 0xffffffff; From patchwork Tue May 5 10:13:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Brezillon X-Patchwork-Id: 1283417 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=collabora.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20170209 header.b=gVpjVOSt; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49GbH849Hvz9sRf for ; Tue, 5 May 2020 20:16:36 +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:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version: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=IjXEO567fErDztl+zkFAgGjnUAhfANf/JGuXhOG4gV8=; b=gVpjVOStCEF8W6 QDnqZXV908rztQs4b7Nfv9N4ZfRCnNCFoh39zIh347vRIxAm9yYRb1IBeNVqxFb6f8mRavOx14A/5 Y8pIcKHnvSuC+1FnBgtYswlSsHDILZj7+UUCx05Xx+vi35dEDOb4vkSa/DsH1M+XyF08H3/xLqRSp x/HirfoGoPayyHsIiy85lI3R/hcQQCwuWIWINJmKnLJNHeM5BlGfA8cnUsKgujft9Rk1fds7a7SKC 47aNtjMYo831FpuLcKjPVEcAYwK1hfQl24v+XlhUbrdXLvTCtUzJDyc3AEb5bG6LHA7mizNuaNnl1 4Njon4aAt/zJPJXYR06w==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuci-0003C6-9t; Tue, 05 May 2020 10:16:24 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuaR-00077g-2G for linux-mtd@lists.infradead.org; Tue, 05 May 2020 10:14:06 +0000 Received: from localhost.localdomain (unknown [IPv6:2a01:e0a:2c:6930:d3ea:1c7:41fd:3038]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 8ACF62A1AFF; Tue, 5 May 2020 11:14:00 +0100 (BST) From: Boris Brezillon To: Miquel Raynal , linux-mtd@lists.infradead.org, Lubomir Rintel Subject: [PATCH v2 09/19] mtd: rawnand: cafe: Use devm_kzalloc and devm_request_irq() Date: Tue, 5 May 2020 12:13:43 +0200 Message-Id: <20200505101353.1776394-10-boris.brezillon@collabora.com> X-Mailer: git-send-email 2.25.3 In-Reply-To: <20200505101353.1776394-1-boris.brezillon@collabora.com> References: <20200505101353.1776394-1-boris.brezillon@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200505_031403_264163_2B839A36 X-CRM114-Status: GOOD ( 12.01 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , Boris Brezillon , Vignesh Raghavendra , Tudor Ambarus Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org This simplifies the error/remove path. Signed-off-by: Boris Brezillon Reviewed-by: Miquel Raynal Tested-by: Lubomir Rintel --- Changes in v2: * Add R-b/T-b --- drivers/mtd/nand/raw/cafe_nand.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/drivers/mtd/nand/raw/cafe_nand.c b/drivers/mtd/nand/raw/cafe_nand.c index fedf434a563f..93e8e124df45 100644 --- a/drivers/mtd/nand/raw/cafe_nand.c +++ b/drivers/mtd/nand/raw/cafe_nand.c @@ -846,7 +846,7 @@ static int cafe_nand_probe(struct pci_dev *pdev, pci_set_master(pdev); - cafe = kzalloc(sizeof(*cafe), GFP_KERNEL); + cafe = devm_kzalloc(&pdev->dev, sizeof(*cafe), GFP_KERNEL); if (!cafe) return -ENOMEM; @@ -858,8 +858,7 @@ static int cafe_nand_probe(struct pci_dev *pdev, cafe->mmio = pci_iomap(pdev, 0, 0); if (!cafe->mmio) { dev_warn(&pdev->dev, "failed to iomap\n"); - err = -ENOMEM; - goto out_free_mtd; + return -ENOMEM; } cafe->rs = init_rs_non_canonical(12, &cafe_mul, 0, 1, 8); @@ -908,8 +907,8 @@ static int cafe_nand_probe(struct pci_dev *pdev, cafe_nand_init(cafe); - err = request_irq(pdev->irq, &cafe_nand_interrupt, IRQF_SHARED, - "CAFE NAND", mtd); + err = devm_request_irq(&pdev->dev, pdev->irq, cafe_nand_interrupt, + IRQF_SHARED, "CAFE NAND", mtd); if (err) { dev_warn(&pdev->dev, "Could not register IRQ %d\n", pdev->irq); goto out_ior; @@ -940,11 +939,8 @@ static int cafe_nand_probe(struct pci_dev *pdev, cafe_writel(cafe, cafe_readl(cafe, GLOBAL_IRQ_MASK) & ~CAFE_GLOBAL_IRQ_NAND, GLOBAL_IRQ_MASK); - free_irq(pdev->irq, mtd); out_ior: pci_iounmap(pdev, cafe->mmio); - out_free_mtd: - kfree(cafe); out: return err; } @@ -959,12 +955,10 @@ static void cafe_nand_remove(struct pci_dev *pdev) cafe_writel(cafe, cafe_readl(cafe, GLOBAL_IRQ_MASK) & ~CAFE_GLOBAL_IRQ_NAND, GLOBAL_IRQ_MASK); - free_irq(pdev->irq, mtd); nand_release(chip); free_rs(cafe->rs); pci_iounmap(pdev, cafe->mmio); dma_free_coherent(&cafe->pdev->dev, 2112, cafe->dmabuf, cafe->dmaaddr); - kfree(cafe); } static const struct pci_device_id cafe_nand_tbl[] = { From patchwork Tue May 5 10:13:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Brezillon X-Patchwork-Id: 1283418 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=collabora.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20170209 header.b=MOndR3j8; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49GbHJ6ZxHz9sSs for ; Tue, 5 May 2020 20:16:44 +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:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version: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=DDrasyNK+A0gelbsg99POt1C6Jhtj5PtheQWK4esjF0=; b=MOndR3j8qoDUw1 Qdf/iJ6ncKr8NkpUDTFIG41QHNzglzIuLCTLUSEZI00bnOl5TBsB97pmTo7Mb4FC3GVZJLG6Qaj1I j3SmwZWPL738sUPGeZYFD8yRf/aXoiKzoSpCzgGHmihKlxpxbH3Nt8TVhKlatg9sKwWg2furLnGbi 5Y6lRQxj9ZykANTBWR8jdBQpvJooL71jCxtsrXczDa8G08AHTcUHmdSIo4ys4IkjmQ2lO0E6yz7cY KpChxcmalCzzdjTR+C0AYrS8NQ4tjXMfyt5IjCHu/32wlCuDi9MhozNZGxqMRnH17YJMzU0M4wU94 EGcTPP3fqMJFyEpQttSA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVucy-0003SD-Ll; Tue, 05 May 2020 10:16:40 +0000 Received: from bhuna.collabora.co.uk ([46.235.227.227]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuaR-00077m-4T for linux-mtd@lists.infradead.org; Tue, 05 May 2020 10:14:06 +0000 Received: from localhost.localdomain (unknown [IPv6:2a01:e0a:2c:6930:d3ea:1c7:41fd:3038]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id CE9DE2A1B0D; Tue, 5 May 2020 11:14:00 +0100 (BST) From: Boris Brezillon To: Miquel Raynal , linux-mtd@lists.infradead.org, Lubomir Rintel Subject: [PATCH v2 10/19] mtd: rawnand: cafe: Get rid of a useless label Date: Tue, 5 May 2020 12:13:44 +0200 Message-Id: <20200505101353.1776394-11-boris.brezillon@collabora.com> X-Mailer: git-send-email 2.25.3 In-Reply-To: <20200505101353.1776394-1-boris.brezillon@collabora.com> References: <20200505101353.1776394-1-boris.brezillon@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200505_031403_357736_071602B7 X-CRM114-Status: GOOD ( 12.46 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [46.235.227.227 listed in list.dnswl.org] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , Boris Brezillon , Vignesh Raghavendra , Tudor Ambarus Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org We can return 0 directly instead of branching to the out label. Signed-off-by: Boris Brezillon Reviewed-by: Miquel Raynal Tested-by: Lubomir Rintel --- Changes in v2: * Add R-b/T-b --- drivers/mtd/nand/raw/cafe_nand.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/mtd/nand/raw/cafe_nand.c b/drivers/mtd/nand/raw/cafe_nand.c index 93e8e124df45..84b8d50c7f08 100644 --- a/drivers/mtd/nand/raw/cafe_nand.c +++ b/drivers/mtd/nand/raw/cafe_nand.c @@ -930,7 +930,7 @@ static int cafe_nand_probe(struct pci_dev *pdev, if (err) goto out_cleanup_nand; - goto out; + return 0; out_cleanup_nand: nand_cleanup(&cafe->nand); @@ -941,7 +941,6 @@ static int cafe_nand_probe(struct pci_dev *pdev, GLOBAL_IRQ_MASK); out_ior: pci_iounmap(pdev, cafe->mmio); - out: return err; } From patchwork Tue May 5 10:13:45 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Brezillon X-Patchwork-Id: 1283423 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=collabora.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20170209 header.b=RGEyXiGW; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49GbJP0w1lz9sT4 for ; Tue, 5 May 2020 20:17:41 +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:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version: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=wkmiCIQxKA7ZnRGAm0JgkOvojy12Q5TQynGzTWTQbCg=; b=RGEyXiGWWJtNLc E7zGtY/j9v1A4qrOZiqThEorP5UeolsmNbnIY2Ux21jdc/xBSJCSgppN0UBqaqUYsKjycsDC/EdLn qVBrh/pDgNd5tzoiOxHR8jRjJOWZ6TxgnGIjVp9mWhQMqHVx0nAOSZ/trsJ9toE30TonX+lpOgYRX 0SvnbD+83f9dLFa8gEAyKbodGQzS7O63tZZZ+lS/2jwuy50xKcY5f/OYPH1CWncX42l+yHpOxMoFE zYdQVPRZeuzfEvsq8szoER+1TyCTZzAbIpXZ/PhG3LsBpZ02eYehjhs7ssnu5Z1tlggEzXwz0vKPG 1IM/yNeSo/+6oiISJMQQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuds-0004Rq-5U; Tue, 05 May 2020 10:17:36 +0000 Received: from bhuna.collabora.co.uk ([46.235.227.227]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuaR-000788-D3 for linux-mtd@lists.infradead.org; Tue, 05 May 2020 10:14:07 +0000 Received: from localhost.localdomain (unknown [IPv6:2a01:e0a:2c:6930:d3ea:1c7:41fd:3038]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 1D8002A19B9; Tue, 5 May 2020 11:14:01 +0100 (BST) From: Boris Brezillon To: Miquel Raynal , linux-mtd@lists.infradead.org, Lubomir Rintel Subject: [PATCH v2 11/19] mtd: rawnand: cafe: Explicitly inherit from nand_controller Date: Tue, 5 May 2020 12:13:45 +0200 Message-Id: <20200505101353.1776394-12-boris.brezillon@collabora.com> X-Mailer: git-send-email 2.25.3 In-Reply-To: <20200505101353.1776394-1-boris.brezillon@collabora.com> References: <20200505101353.1776394-1-boris.brezillon@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200505_031403_604543_6F25DEDE X-CRM114-Status: GOOD ( 11.95 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [46.235.227.227 listed in list.dnswl.org] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , Boris Brezillon , Vignesh Raghavendra , Tudor Ambarus Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Explicitly inherit from nand_controller instead of using the dummy controller object. Signed-off-by: Boris Brezillon Reviewed-by: Miquel Raynal Tested-by: Lubomir Rintel --- Changes in v2: * Add R-b/T-b --- drivers/mtd/nand/raw/cafe_nand.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/nand/raw/cafe_nand.c b/drivers/mtd/nand/raw/cafe_nand.c index 84b8d50c7f08..e41ea95b3088 100644 --- a/drivers/mtd/nand/raw/cafe_nand.c +++ b/drivers/mtd/nand/raw/cafe_nand.c @@ -146,6 +146,7 @@ #define CAFE_FIELD_GET(reg, field, val) FIELD_GET(CAFE_##reg##_##field, val) struct cafe_priv { + struct nand_controller base; struct nand_chip nand; struct pci_dev *pdev; void __iomem *mmio; @@ -918,7 +919,9 @@ static int cafe_nand_probe(struct pci_dev *pdev, cafe->usedma = 0; /* Scan to find existence of the device */ - cafe->nand.legacy.dummy_controller.ops = &cafe_nand_controller_ops; + nand_controller_init(&cafe->base); + cafe->base.ops = &cafe_nand_controller_ops; + cafe->nand.controller = &cafe->base; err = nand_scan(&cafe->nand, 2); if (err) goto out_irq; From patchwork Tue May 5 10:13:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Brezillon X-Patchwork-Id: 1283422 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=collabora.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20170209 header.b=LLn0JB6q; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49GbHs17M7z9sSW for ; Tue, 5 May 2020 20:17:13 +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:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version: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=aT8cQLJOuYkjvRI1SRcJCYeiLYRUYiZBdbuLYXMDEh8=; b=LLn0JB6q4w9U/k mtdIuStIDvtxPpJNJq6jVQGrFMNFKEkQ9AJCIrOne6gaZZCypkHUgWT1uNOy82CZ0Vf9op0yycZxi 13woJU4iAu+/z1YVU9FO/e3vnut7DVOdk+6KM8dYw3DFoSGziQjwxt8w4jzvwuRiBvH/d40HqJtFf LnKVJckZNgNG1NN2w9FPT1Wsnh3tAONQkDlgnRCioiAfqaCzGRgaHoOsMpQoEL9REzIKkLMsa0Twd a/bDpg7Vy9v2YhX6w+cV+OO3Mee2nqJKrgl4LzkofB2goIwiS4BX54Scsk1deSmmnmoceDTHFELHC kNAmbQzbfNps6aU6cwfA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVudR-0003xt-IF; Tue, 05 May 2020 10:17:09 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuaR-000787-Cr for linux-mtd@lists.infradead.org; Tue, 05 May 2020 10:14:08 +0000 Received: from localhost.localdomain (unknown [IPv6:2a01:e0a:2c:6930:d3ea:1c7:41fd:3038]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 6065B2A1B17; Tue, 5 May 2020 11:14:01 +0100 (BST) From: Boris Brezillon To: Miquel Raynal , linux-mtd@lists.infradead.org, Lubomir Rintel Subject: [PATCH v2 12/19] mtd: rawnand: cafe: Don't leave ECC enabled in the write path Date: Tue, 5 May 2020 12:13:46 +0200 Message-Id: <20200505101353.1776394-13-boris.brezillon@collabora.com> X-Mailer: git-send-email 2.25.3 In-Reply-To: <20200505101353.1776394-1-boris.brezillon@collabora.com> References: <20200505101353.1776394-1-boris.brezillon@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200505_031403_627872_0270B483 X-CRM114-Status: GOOD ( 13.21 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , Boris Brezillon , Vignesh Raghavendra , Tudor Ambarus Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org cafe_nand_write_pagel() sets the ECC auto-generation flag but never clears it, thus forcing cafe_nand_cmdfunc() to clear it in certain circumstances. Let's just clear this flag in where it's been set instead. Signed-off-by: Boris Brezillon Reviewed-by: Miquel Raynal Tested-by: Lubomir Rintel --- Changes in v2: * Add R-b/T-b * Fix commit message * Add blank line before return statement --- drivers/mtd/nand/raw/cafe_nand.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/nand/raw/cafe_nand.c b/drivers/mtd/nand/raw/cafe_nand.c index e41ea95b3088..f7e537836d55 100644 --- a/drivers/mtd/nand/raw/cafe_nand.c +++ b/drivers/mtd/nand/raw/cafe_nand.c @@ -261,7 +261,6 @@ static void cafe_nand_cmdfunc(struct nand_chip *chip, unsigned command, CAFE_FIELD_PREP(NAND_CTRL2, CMD2, command), NAND_CTRL2); ctl1 = cafe->ctl1; - cafe->ctl2 &= ~CAFE_NAND_CTRL2_AUTO_WRITE_ECC; dev_dbg(&cafe->pdev->dev, "Continue command, ctl1 %08x, #data %d\n", cafe->ctl1, cafe->nr_data); goto do_command; @@ -641,6 +640,7 @@ static int cafe_nand_write_page(struct nand_chip *chip, { struct mtd_info *mtd = nand_to_mtd(chip); struct cafe_priv *cafe = nand_get_controller_data(chip); + int ret; nand_prog_page_begin_op(chip, page, 0, buf, mtd->writesize); chip->legacy.write_buf(chip, chip->oob_poi, mtd->oobsize); @@ -648,7 +648,15 @@ static int cafe_nand_write_page(struct nand_chip *chip, /* Set up ECC autogeneration */ cafe->ctl2 |= CAFE_NAND_CTRL2_AUTO_WRITE_ECC; - return nand_prog_page_end_op(chip); + ret = nand_prog_page_end_op(chip); + + /* + * And clear it before returning so that following write operations + * that do not involve ECC don't generate ECC bytes. + */ + cafe->ctl2 &= ~CAFE_NAND_CTRL2_AUTO_WRITE_ECC; + + return ret; } /* F_2[X]/(X**6+X+1) */ From patchwork Tue May 5 10:13:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Brezillon X-Patchwork-Id: 1283429 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=collabora.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20170209 header.b=i6aXO++G; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49GbKp0djGz9sRf for ; Tue, 5 May 2020 20:18:54 +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:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version: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=q8CekJt2YsKjtFazM3CnICzVrQD9O+BswL4i09DxDPw=; b=i6aXO++GkCyvpA OsfyI/YoXU0/uUe7XZ4PfhwiuKnJnyN8gKs8D+BTvpgGyWet8DzVO3OD1qRTNEZlJ65lWGmAx4Q1p VncTBY/c40aZL7tzUt2mvZXb8tYupmNQlkynsa8TxtJ0t4ie1UUs3fjRj7/DEtj2u28oMiTy2AMsd CMyTD3Wk7LNDvzhPRdyb1QZZtYQQSbYyPNkM+WVxIJRLiZVIso6DzWvZ6lYFL4g3ihvB+REhbEWnh l46WQcO7oWQcUm/deIbt9o4ZphF9ALL8Mw6Y68MkFXBCSIfyPrYWktzBZKQjLB4gI/wKBeR23ghlE OA0udr/D+Qxo3B+D/naA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuev-0005XI-B8; Tue, 05 May 2020 10:18:41 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuaR-00078B-F1 for linux-mtd@lists.infradead.org; Tue, 05 May 2020 10:14:07 +0000 Received: from localhost.localdomain (unknown [IPv6:2a01:e0a:2c:6930:d3ea:1c7:41fd:3038]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id A32862A1B1B; Tue, 5 May 2020 11:14:01 +0100 (BST) From: Boris Brezillon To: Miquel Raynal , linux-mtd@lists.infradead.org, Lubomir Rintel Subject: [PATCH v2 13/19] mtd: rawnand: cafe: Don't split things when reading/writing a page Date: Tue, 5 May 2020 12:13:47 +0200 Message-Id: <20200505101353.1776394-14-boris.brezillon@collabora.com> X-Mailer: git-send-email 2.25.3 In-Reply-To: <20200505101353.1776394-1-boris.brezillon@collabora.com> References: <20200505101353.1776394-1-boris.brezillon@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200505_031403_687062_44F04517 X-CRM114-Status: GOOD ( 12.24 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , Boris Brezillon , Vignesh Raghavendra , Tudor Ambarus Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Calling nand_read_page_op(pagesize)/nand_prog_page_begin_op(pagesize) and expecting to get a pagesize+oobsize read from/written to the read/write buffer is fragile and only works because of hacks done in cmdfunc(). Let's read/write the page in one go, using the page cache buffer as a bounce buffer instead of relying on guesses done in cafe_nand_cmdfunc(). Signed-off-by: Boris Brezillon Tested-by: Lubomir Rintel --- Changes in v2: * Add T-b * None --- drivers/mtd/nand/raw/cafe_nand.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/mtd/nand/raw/cafe_nand.c b/drivers/mtd/nand/raw/cafe_nand.c index f7e537836d55..36685bee9d83 100644 --- a/drivers/mtd/nand/raw/cafe_nand.c +++ b/drivers/mtd/nand/raw/cafe_nand.c @@ -470,6 +470,7 @@ static int cafe_nand_read_page(struct nand_chip *chip, uint8_t *buf, { struct mtd_info *mtd = nand_to_mtd(chip); struct cafe_priv *cafe = nand_get_controller_data(chip); + void *pagebuf = nand_get_data_buf(chip); unsigned int max_bitflips = 0; u32 ecc_result, status; @@ -477,8 +478,11 @@ static int cafe_nand_read_page(struct nand_chip *chip, uint8_t *buf, cafe_readl(cafe, NAND_ECC_RESULT), cafe_readl(cafe, NAND_ECC_SYN_REG(0))); - nand_read_page_op(chip, page, 0, buf, mtd->writesize); - chip->legacy.read_buf(chip, chip->oob_poi, mtd->oobsize); + nand_read_page_op(chip, page, 0, pagebuf, + mtd->writesize + mtd->oobsize); + + if (buf != pagebuf) + memcpy(buf, pagebuf, mtd->writesize); ecc_result = cafe_readl(cafe, NAND_ECC_RESULT); status = CAFE_FIELD_GET(NAND_ECC_RESULT, STATUS, ecc_result); @@ -640,15 +644,17 @@ static int cafe_nand_write_page(struct nand_chip *chip, { struct mtd_info *mtd = nand_to_mtd(chip); struct cafe_priv *cafe = nand_get_controller_data(chip); + void *pagebuf = nand_get_data_buf(chip); int ret; - nand_prog_page_begin_op(chip, page, 0, buf, mtd->writesize); - chip->legacy.write_buf(chip, chip->oob_poi, mtd->oobsize); + if (pagebuf != buf) + memcpy(pagebuf, buf, mtd->writesize); /* Set up ECC autogeneration */ cafe->ctl2 |= CAFE_NAND_CTRL2_AUTO_WRITE_ECC; - ret = nand_prog_page_end_op(chip); + ret = nand_prog_page_op(chip, page, 0, pagebuf, + mtd->writesize + mtd->oobsize); /* * And clear it before returning so that following write operations From patchwork Tue May 5 10:13:48 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Brezillon X-Patchwork-Id: 1283430 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=collabora.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20170209 header.b=Egz4gnqj; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49GbL25h1Hz9sRf for ; Tue, 5 May 2020 20:19:06 +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:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version: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=ZdcNZz25ru6QhX1dL108HluQUegrqeT49ffG2QGeVUg=; b=Egz4gnqjr6O63a Vg5PFHYBn00o50EgIkueVC2KvCaYNcXeiggVIPYMdbN2iqZOoRHU0D00SDGrkB1NaAcRE9Cl0GJqY zBleQU4bYR7k2OW8u4VY3lDgLVSkPfoM+d2NQa7jgqRp1yhVA3O1qrMNUrI/tL5EpzC42o+kCkbv4 bIEoSLDGp0KPpvNEFz9SKBjMeO6uppYjmI7xi5qxa5D+ITmdlnxT69K8WLJiaIyCyWsMrifr2xXB8 5zovaZ+9IEB4pW3lVQTx14yup364GiNAxE4seqWa14d9okqJOE+AdG2f9OsmgbmaJoHDMonzVCUQ9 9E+AvZ+80/tMVKdxlSeQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVufG-0005nB-O4; Tue, 05 May 2020 10:19:02 +0000 Received: from bhuna.collabora.co.uk ([46.235.227.227]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuaR-00078D-F0 for linux-mtd@lists.infradead.org; Tue, 05 May 2020 10:14:08 +0000 Received: from localhost.localdomain (unknown [IPv6:2a01:e0a:2c:6930:d3ea:1c7:41fd:3038]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id E628A2A1BDB; Tue, 5 May 2020 11:14:01 +0100 (BST) From: Boris Brezillon To: Miquel Raynal , linux-mtd@lists.infradead.org, Lubomir Rintel Subject: [PATCH v2 14/19] mtd: rawnand: cafe: Add exec_op() support Date: Tue, 5 May 2020 12:13:48 +0200 Message-Id: <20200505101353.1776394-15-boris.brezillon@collabora.com> X-Mailer: git-send-email 2.25.3 In-Reply-To: <20200505101353.1776394-1-boris.brezillon@collabora.com> References: <20200505101353.1776394-1-boris.brezillon@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200505_031403_853327_508BA074 X-CRM114-Status: GOOD ( 16.79 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [46.235.227.227 listed in list.dnswl.org] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , Boris Brezillon , Vignesh Raghavendra , Tudor Ambarus Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Implementing exec_op() will help us get rid of the legacy interface and should make drivers much cleaner too. Signed-off-by: Boris Brezillon Reviewed-by: Lubomir Rintel Tested-by: Lubomir Rintel --- Changes in v2: * Add R-b/T-b * Drop WARN_ON()s * Use nand_subop_get_xxx() where appropriate * Write ADDR2 unconditionally * Do not wait on CMD_DONE when the last instruction is a DATA instruction and DMA is used * s/CAFE_NAND_DMA_CTRL_DATA_IN/CAFE_NAND_CTRL1_HAS_DATA_IN/ --- drivers/mtd/nand/raw/cafe_nand.c | 140 ++++++++++++++++++++++++++++++- 1 file changed, 139 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/nand/raw/cafe_nand.c b/drivers/mtd/nand/raw/cafe_nand.c index 36685bee9d83..2f35faf13805 100644 --- a/drivers/mtd/nand/raw/cafe_nand.c +++ b/drivers/mtd/nand/raw/cafe_nand.c @@ -21,7 +21,7 @@ #include #include #include -#include +#include #define CAFE_NAND_CTRL1 0x00 #define CAFE_NAND_CTRL1_HAS_CMD BIT(31) @@ -773,9 +773,147 @@ static void cafe_nand_detach_chip(struct nand_chip *chip) dma_free_coherent(&cafe->pdev->dev, 2112, cafe->dmabuf, cafe->dmaaddr); } +static int cafe_nand_exec_subop(struct nand_chip *chip, + const struct nand_subop *subop) +{ + struct cafe_priv *cafe = nand_get_controller_data(chip); + u32 ctrl1 = 0, ctrl2 = cafe->ctl2, addr1 = 0, addr2 = 0; + u32 status, wait = CAFE_NAND_IRQ_CMD_DONE; + int ret, data_instr = -1; + bool waitrdy = false; + unsigned int i, j; + + cafe->datalen = 0; + ctrl1 |= CAFE_FIELD_PREP(NAND_CTRL1, CE, subop->cs); + + for (i = 0; i < subop->ninstrs; i++) { + const struct nand_op_instr *instr = &subop->instrs[i]; + + switch (instr->type) { + case NAND_OP_CMD_INSTR: + if (!(ctrl1 & CAFE_NAND_CTRL1_HAS_CMD)) + ctrl1 |= CAFE_NAND_CTRL1_HAS_CMD | + CAFE_FIELD_PREP(NAND_CTRL1, CMD, + instr->ctx.cmd.opcode); + else + ctrl2 |= CAFE_NAND_CTRL2_HAS_CMD2 | + CAFE_FIELD_PREP(NAND_CTRL2, CMD2, + instr->ctx.cmd.opcode); + break; + + case NAND_OP_ADDR_INSTR: + for (j = nand_subop_get_addr_start_off(subop, i); + j < nand_subop_get_num_addr_cyc(subop, i); j++) { + u32 addr = instr->ctx.addr.addrs[j]; + + if (j < 2) + addr1 |= addr << (8 * j); + else + addr2 |= addr << (8 * (j - 2)); + } + + ctrl1 |= CAFE_NAND_CTRL1_HAS_ADDR | + CAFE_FIELD_PREP(NAND_CTRL1, NUM_ADDR_CYC, + instr->ctx.addr.naddrs - 1); + cafe_writel(cafe, addr1, NAND_ADDR1); + cafe_writel(cafe, addr2, NAND_ADDR2); + break; + + case NAND_OP_DATA_IN_INSTR: + data_instr = i; + ctrl1 |= CAFE_NAND_CTRL1_HAS_DATA_IN; + break; + + case NAND_OP_DATA_OUT_INSTR: + data_instr = i; + ctrl1 |= CAFE_NAND_CTRL1_HAS_DATA_OUT; + cafe_write_buf(chip, + instr->ctx.data.buf.out + + nand_subop_get_data_start_off(subop, i), + nand_subop_get_data_len(subop, i)); + break; + + case NAND_OP_WAITRDY_INSTR: + wait |= CAFE_NAND_IRQ_FLASH_RDY; + waitrdy = true; + break; + } + } + + if (data_instr >= 0) + cafe_writel(cafe, nand_subop_get_data_len(subop, data_instr), + NAND_DATA_LEN); + + if (cafe->usedma && data_instr >= 0) { + u32 dmactrl = CAFE_NAND_DMA_CTRL_ENABLE | + CAFE_NAND_DMA_CTRL_RESERVED; + + dmactrl |= CAFE_FIELD_PREP(NAND_DMA_CTRL, DATA_LEN, + nand_subop_get_data_len(subop, + data_instr)); + if (ctrl1 & CAFE_NAND_CTRL1_HAS_DATA_IN) + dmactrl |= CAFE_NAND_DMA_CTRL_DATA_IN; + + cafe_writel(cafe, dmactrl, NAND_DMA_CTRL); + + /* + * If the last instruction is a data transfer and we're using + * DMA, we should wait on DMA_DONE only, otherwise, keep + * waiting on CMD_DONE. + */ + if (data_instr == subop->ninstrs - 1) { + wait &= ~CAFE_NAND_IRQ_CMD_DONE; + wait |= CAFE_NAND_IRQ_DMA_DONE; + } + } + + /* Clear the pending interrupts before starting the operation. */ + cafe_writel(cafe, wait, NAND_IRQ); + + cafe_writel(cafe, ctrl2, NAND_CTRL2); + cafe_writel(cafe, ctrl1, NAND_CTRL1); + + ret = readl_poll_timeout(cafe->mmio + CAFE_NAND_IRQ, status, + (status & wait) == wait, 1, USEC_PER_SEC); + if (ret) + return ret; + + if (ctrl1 & CAFE_NAND_CTRL1_HAS_DATA_IN) + cafe_read_buf(chip, + subop->instrs[data_instr].ctx.data.buf.in + + nand_subop_get_data_start_off(subop, data_instr), + nand_subop_get_data_len(subop, data_instr)); + + return 0; +} + +static const struct nand_op_parser cafe_nand_op_parser = NAND_OP_PARSER( + NAND_OP_PARSER_PATTERN(cafe_nand_exec_subop, + NAND_OP_PARSER_PAT_CMD_ELEM(true), + NAND_OP_PARSER_PAT_ADDR_ELEM(true, 5), + NAND_OP_PARSER_PAT_CMD_ELEM(true), + NAND_OP_PARSER_PAT_WAITRDY_ELEM(true), + NAND_OP_PARSER_PAT_DATA_IN_ELEM(true, 2112)), + NAND_OP_PARSER_PATTERN(cafe_nand_exec_subop, + NAND_OP_PARSER_PAT_CMD_ELEM(true), + NAND_OP_PARSER_PAT_ADDR_ELEM(true, 5), + NAND_OP_PARSER_PAT_CMD_ELEM(true), + NAND_OP_PARSER_PAT_DATA_IN_ELEM(true, 2112), + NAND_OP_PARSER_PAT_WAITRDY_ELEM(true)) +); + +static int cafe_nand_exec_op(struct nand_chip *chip, + const struct nand_operation *op, + bool check_only) +{ + return nand_op_parser_exec_op(chip, &cafe_nand_op_parser, op, + check_only); +} + static const struct nand_controller_ops cafe_nand_controller_ops = { .attach_chip = cafe_nand_attach_chip, .detach_chip = cafe_nand_detach_chip, + .exec_op = cafe_nand_exec_op, }; static void cafe_nand_init(struct cafe_priv *cafe) From patchwork Tue May 5 10:13:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Brezillon X-Patchwork-Id: 1283424 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=collabora.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20170209 header.b=YF9FbR2L; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49GbJN6KDmz9sSW for ; Tue, 5 May 2020 20:17:40 +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:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version: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=x3/BoqifDGOF4MjMM2Z6KmTbePK0RnRi0p91HC4o2AI=; b=YF9FbR2LGLqCjC nEXAm+w+vm1d/sVwWNxIJQx0412nUAvYJEqHNXexSD9XJI8tYItG5p8AZ6Yv/PGzcNWn9e2eJIcaD +3cILIzPITWYTecpA1CzC0sqZAxnTq45QnXPUfZi7SjV4kfnM+W4T5UWFqNCALxrEqQPcvg68aOXW h2GaaGZOFr+HORWacSzSshh/ZpMM1vVeNPr/6XELQyKfxGkDfpYW8m2nAXn2srk12u3VF+FZAzlK4 PzEQ6Ue0OLL0UPSnfwpJoG8dAsFlbqi0VMG5Q/BpYPnIMYPhUp1hHQ/3JEBbL+AFO2ZDQoMmdh7lL C+Z5ZpqGStinDZGLgM1A==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVudf-0004Dq-Bc; Tue, 05 May 2020 10:17:23 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuaS-0007Ak-Vu for linux-mtd@lists.infradead.org; Tue, 05 May 2020 10:14:10 +0000 Received: from localhost.localdomain (unknown [IPv6:2a01:e0a:2c:6930:d3ea:1c7:41fd:3038]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 35E012A1BE4; Tue, 5 May 2020 11:14:02 +0100 (BST) From: Boris Brezillon To: Miquel Raynal , linux-mtd@lists.infradead.org, Lubomir Rintel Subject: [PATCH v2 15/19] mtd: rawnand: cafe: Get rid of the legacy interface implementation Date: Tue, 5 May 2020 12:13:49 +0200 Message-Id: <20200505101353.1776394-16-boris.brezillon@collabora.com> X-Mailer: git-send-email 2.25.3 In-Reply-To: <20200505101353.1776394-1-boris.brezillon@collabora.com> References: <20200505101353.1776394-1-boris.brezillon@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200505_031405_383685_5497307A X-CRM114-Status: GOOD ( 22.02 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , Boris Brezillon , Vignesh Raghavendra , Tudor Ambarus Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Now that exec_op() is implemented, we can safely get rid of all legacy hooks implementations. Signed-off-by: Boris Brezillon Reviewed-by: Miquel Raynal Tested-by: Lubomir Rintel --- Changes in v2: * Add R-b/T-b --- drivers/mtd/nand/raw/cafe_nand.c | 250 +------------------------------ 1 file changed, 6 insertions(+), 244 deletions(-) diff --git a/drivers/mtd/nand/raw/cafe_nand.c b/drivers/mtd/nand/raw/cafe_nand.c index 2f35faf13805..bcdd58e93666 100644 --- a/drivers/mtd/nand/raw/cafe_nand.c +++ b/drivers/mtd/nand/raw/cafe_nand.c @@ -151,12 +151,7 @@ struct cafe_priv { struct pci_dev *pdev; void __iomem *mmio; struct rs_control *rs; - uint32_t ctl1; uint32_t ctl2; - int datalen; - int nr_data; - int data_pos; - int page_addr; bool usedma; dma_addr_t dmaaddr; unsigned char *dmabuf; @@ -184,36 +179,16 @@ static const char *part_probes[] = { "cmdlinepart", "RedBoot", NULL }; #define cafe_readl(cafe, addr) readl((cafe)->mmio + CAFE_##addr) #define cafe_writel(cafe, datum, addr) writel(datum, (cafe)->mmio + CAFE_##addr) -static int cafe_device_ready(struct nand_chip *chip) -{ - struct cafe_priv *cafe = nand_get_controller_data(chip); - int result = !!(cafe_readl(cafe, NAND_STATUS) & - CAFE_NAND_STATUS_FLASH_BUSY); - uint32_t irqs = cafe_readl(cafe, NAND_IRQ); - - cafe_writel(cafe, irqs, NAND_IRQ); - - dev_dbg(&cafe->pdev->dev, "NAND device is%s ready, IRQ %x (%x) (%x,%x)\n", - result?"":" not", irqs, cafe_readl(cafe, NAND_IRQ), - cafe_readl(cafe, GLOBAL_IRQ), cafe_readl(cafe, GLOBAL_IRQ_MASK)); - - return result; -} - - static void cafe_write_buf(struct nand_chip *chip, const uint8_t *buf, int len) { struct cafe_priv *cafe = nand_get_controller_data(chip); if (cafe->usedma) - memcpy(cafe->dmabuf + cafe->datalen, buf, len); + memcpy(cafe->dmabuf, buf, len); else - memcpy_toio(cafe->mmio + CAFE_NAND_WRITE_DATA + cafe->datalen, buf, len); + memcpy_toio(cafe->mmio + CAFE_NAND_WRITE_DATA, buf, len); - cafe->datalen += len; - - dev_dbg(&cafe->pdev->dev, "Copy 0x%x bytes to write buffer. datalen 0x%x\n", - len, cafe->datalen); + dev_dbg(&cafe->pdev->dev, "Copy 0x%x bytes to write buffer.\n", len); } static void cafe_read_buf(struct nand_chip *chip, uint8_t *buf, int len) @@ -221,212 +196,11 @@ static void cafe_read_buf(struct nand_chip *chip, uint8_t *buf, int len) struct cafe_priv *cafe = nand_get_controller_data(chip); if (cafe->usedma) - memcpy(buf, cafe->dmabuf + cafe->datalen, len); + memcpy(buf, cafe->dmabuf, len); else - memcpy_fromio(buf, cafe->mmio + CAFE_NAND_READ_DATA + cafe->datalen, len); + memcpy_fromio(buf, cafe->mmio + CAFE_NAND_READ_DATA, len); - dev_dbg(&cafe->pdev->dev, "Copy 0x%x bytes from position 0x%x in read buffer.\n", - len, cafe->datalen); - cafe->datalen += len; -} - -static uint8_t cafe_read_byte(struct nand_chip *chip) -{ - struct cafe_priv *cafe = nand_get_controller_data(chip); - uint8_t d; - - cafe_read_buf(chip, &d, 1); - dev_dbg(&cafe->pdev->dev, "Read %02x\n", d); - - return d; -} - -static void cafe_nand_cmdfunc(struct nand_chip *chip, unsigned command, - int column, int page_addr) -{ - struct mtd_info *mtd = nand_to_mtd(chip); - struct cafe_priv *cafe = nand_get_controller_data(chip); - int adrbytes = 0; - uint32_t ctl1; - uint32_t doneint = CAFE_NAND_IRQ_CMD_DONE; - - dev_dbg(&cafe->pdev->dev, "cmdfunc %02x, 0x%x, 0x%x\n", - command, column, page_addr); - - if (command == NAND_CMD_ERASE2 || command == NAND_CMD_PAGEPROG) { - /* Second half of a command we already calculated */ - cafe_writel(cafe, - cafe->ctl2 | - CAFE_NAND_CTRL2_HAS_CMD2 | - CAFE_FIELD_PREP(NAND_CTRL2, CMD2, command), - NAND_CTRL2); - ctl1 = cafe->ctl1; - dev_dbg(&cafe->pdev->dev, "Continue command, ctl1 %08x, #data %d\n", - cafe->ctl1, cafe->nr_data); - goto do_command; - } - /* Reset ECC engine */ - cafe_writel(cafe, 0, NAND_CTRL2); - - /* Emulate NAND_CMD_READOOB on large-page chips */ - if (mtd->writesize > 512 && - command == NAND_CMD_READOOB) { - column += mtd->writesize; - command = NAND_CMD_READ0; - } - - /* FIXME: Do we need to send read command before sending data - for small-page chips, to position the buffer correctly? */ - - if (column != -1) { - cafe_writel(cafe, column, NAND_ADDR1); - adrbytes = 2; - if (page_addr != -1) - goto write_adr2; - } else if (page_addr != -1) { - cafe_writel(cafe, page_addr & 0xffff, NAND_ADDR1); - page_addr >>= 16; - write_adr2: - cafe_writel(cafe, page_addr, NAND_ADDR2); - adrbytes += 2; - if (mtd->size > mtd->writesize << 16) - adrbytes++; - } - - cafe->data_pos = cafe->datalen = 0; - - /* Set command valid bit, mask in the chip select bit */ - ctl1 = CAFE_NAND_CTRL1_HAS_CMD | - CAFE_FIELD_PREP(NAND_CTRL1, CMD, command) | - (cafe->ctl1 & CAFE_NAND_CTRL1_CE); - - /* Set RD or WR bits as appropriate */ - if (command == NAND_CMD_READID || command == NAND_CMD_STATUS) { - ctl1 |= CAFE_NAND_CTRL1_HAS_DATA_IN; - /* Always 5 bytes, for now */ - cafe->datalen = 4; - /* And one address cycle -- even for STATUS, since the controller doesn't work without */ - adrbytes = 1; - } else if (command == NAND_CMD_READ0 || command == NAND_CMD_READ1 || - command == NAND_CMD_READOOB || command == NAND_CMD_RNDOUT) { - ctl1 |= CAFE_NAND_CTRL1_HAS_DATA_IN; - /* For now, assume just read to end of page */ - cafe->datalen = mtd->writesize + mtd->oobsize - column; - } else if (command == NAND_CMD_SEQIN) - ctl1 |= CAFE_NAND_CTRL1_HAS_DATA_OUT; - - /* Set number of address bytes */ - if (adrbytes) - ctl1 |= CAFE_NAND_CTRL1_HAS_ADDR | - CAFE_FIELD_PREP(NAND_CTRL1, NUM_ADDR_CYC, adrbytes - 1); - - if (command == NAND_CMD_SEQIN || command == NAND_CMD_ERASE1) { - /* Ignore the first command of a pair; the hardware - deals with them both at once, later */ - cafe->ctl1 = ctl1; - dev_dbg(&cafe->pdev->dev, "Setup for delayed command, ctl1 %08x, dlen %x\n", - cafe->ctl1, cafe->datalen); - return; - } - /* RNDOUT and READ0 commands need a following byte */ - if (command == NAND_CMD_RNDOUT) - cafe_writel(cafe, - cafe->ctl2 | CAFE_NAND_CTRL2_HAS_CMD2 | - CAFE_FIELD_PREP(NAND_CTRL2, CMD2, NAND_CMD_RNDOUTSTART), - NAND_CTRL2); - else if (command == NAND_CMD_READ0 && mtd->writesize > 512) - cafe_writel(cafe, - cafe->ctl2 | CAFE_NAND_CTRL2_HAS_CMD2 | - CAFE_FIELD_PREP(NAND_CTRL2, CMD2, NAND_CMD_READSTART), - NAND_CTRL2); - - do_command: - dev_dbg(&cafe->pdev->dev, "dlen %x, ctl1 %x, ctl2 %x\n", - cafe->datalen, ctl1, cafe_readl(cafe, NAND_CTRL2)); - - /* NB: The datasheet lies -- we really should be subtracting 1 here */ - cafe_writel(cafe, cafe->datalen, NAND_DATA_LEN); - cafe_writel(cafe, CAFE_NAND_IRQ_CMD_DONE | CAFE_NAND_IRQ_DMA_DONE, - NAND_IRQ); - if (cafe->usedma && - (ctl1 & (CAFE_NAND_CTRL1_HAS_DATA_IN | - CAFE_NAND_CTRL1_HAS_DATA_OUT))) { - uint32_t dmactl = CAFE_NAND_DMA_CTRL_ENABLE | - CAFE_NAND_DMA_CTRL_RESERVED; - - dmactl |= CAFE_FIELD_PREP(NAND_DMA_CTRL, DATA_LEN, - cafe->datalen); - /* If WR or RD bits set, set up DMA */ - if (ctl1 & CAFE_NAND_CTRL1_HAS_DATA_IN) { - /* It's a read */ - dmactl |= CAFE_NAND_DMA_CTRL_DATA_IN; - /* ... so it's done when the DMA is done, not just - the command. */ - doneint = CAFE_NAND_IRQ_DMA_DONE; - } - cafe_writel(cafe, dmactl, NAND_DMA_CTRL); - } - cafe->datalen = 0; - - if (unlikely(regdebug)) { - int i; - printk("About to write command %08x to register 0\n", ctl1); - for (i=4; i< 0x5c; i+=4) - printk("Register %x: %08x\n", i, readl(cafe->mmio + i)); - } - - cafe_writel(cafe, ctl1, NAND_CTRL1); - /* Apply this short delay always to ensure that we do wait tWB in - * any case on any machine. */ - ndelay(100); - - if (1) { - int c; - uint32_t irqs; - - for (c = 500000; c != 0; c--) { - irqs = cafe_readl(cafe, NAND_IRQ); - if (irqs & doneint) - break; - udelay(1); - if (!(c % 100000)) - dev_dbg(&cafe->pdev->dev, "Wait for ready, IRQ %x\n", irqs); - cpu_relax(); - } - cafe_writel(cafe, doneint, NAND_IRQ); - dev_dbg(&cafe->pdev->dev, "Command %x completed after %d usec, irqs %x (%x)\n", - command, 500000-c, irqs, cafe_readl(cafe, NAND_IRQ)); - } - - WARN_ON(cafe->ctl2 & CAFE_NAND_CTRL2_AUTO_WRITE_ECC); - - switch (command) { - - case NAND_CMD_CACHEDPROG: - case NAND_CMD_PAGEPROG: - case NAND_CMD_ERASE1: - case NAND_CMD_ERASE2: - case NAND_CMD_SEQIN: - case NAND_CMD_RNDIN: - case NAND_CMD_STATUS: - case NAND_CMD_RNDOUT: - cafe_writel(cafe, cafe->ctl2, NAND_CTRL2); - return; - } - nand_wait_ready(chip); - cafe_writel(cafe, cafe->ctl2, NAND_CTRL2); -} - -static void cafe_select_chip(struct nand_chip *chip, int chipnr) -{ - struct cafe_priv *cafe = nand_get_controller_data(chip); - - dev_dbg(&cafe->pdev->dev, "select_chip %d\n", chipnr); - - /* Mask the appropriate bit into the stored value of ctl1 - which will be used by cafe_nand_cmdfunc() */ - cafe->ctl1 &= ~CAFE_NAND_CTRL1_CE; - cafe->ctl1 |= CAFE_FIELD_PREP(NAND_CTRL1, CE, chipnr); + dev_dbg(&cafe->pdev->dev, "Copy 0x%x bytes from read buffer.\n", len); } static irqreturn_t cafe_nand_interrupt(int irq, void *id) @@ -783,7 +557,6 @@ static int cafe_nand_exec_subop(struct nand_chip *chip, bool waitrdy = false; unsigned int i, j; - cafe->datalen = 0; ctrl1 |= CAFE_FIELD_PREP(NAND_CTRL1, CE, subop->cs); for (i = 0; i < subop->ninstrs; i++) { @@ -1020,17 +793,6 @@ static int cafe_nand_probe(struct pci_dev *pdev, goto out_ior; } - cafe->nand.legacy.cmdfunc = cafe_nand_cmdfunc; - cafe->nand.legacy.dev_ready = cafe_device_ready; - cafe->nand.legacy.read_byte = cafe_read_byte; - cafe->nand.legacy.read_buf = cafe_read_buf; - cafe->nand.legacy.write_buf = cafe_write_buf; - cafe->nand.legacy.select_chip = cafe_select_chip; - cafe->nand.legacy.set_features = nand_get_set_features_notsupp; - cafe->nand.legacy.get_features = nand_get_set_features_notsupp; - - cafe->nand.legacy.chip_delay = 0; - /* Enable the following for a flash based bad block table */ cafe->nand.bbt_options = NAND_BBT_USE_FLASH; From patchwork Tue May 5 10:13:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Brezillon X-Patchwork-Id: 1283427 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=collabora.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20170209 header.b=E2p0T8W8; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49GbKH1HJ1z9sRf for ; Tue, 5 May 2020 20:18:27 +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:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version: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=HGawF19pG8es37K9vc8qF3j92T2rWnOxIdURPcBeU3c=; b=E2p0T8W88vWtNq ovpf/vXypSIUDdmWVGgtcpALY1JLzN+is1xwBXK4gyATghCAJ1yVwo1+ModrCfMOr56BPkjrAxWwa hRsSXNiV9dLdDUC4BVak1PKxb5OseK58V4DgA5asqjgrCbI5dYG7rc8ExYcdBiWoB6TiJt8F/2LqF HD5y1ZAmMHXBvjOgsbegWKweCldeLcDz6OSUIAiqlgnyIgKXl0iyUAgkzK836bvfJKtnpUOuw93iP aOGNJv0LAZW1Wt0j1S6Nyy2b1tNGjjZH2NlJ8KNhWDj41cNMrlETMJM9V8B63XW5y672gXK2CKrrk 09JB2HZtDcK2wHPBhsYg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVueV-000541-N4; Tue, 05 May 2020 10:18:15 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuaT-0007Ao-2t for linux-mtd@lists.infradead.org; Tue, 05 May 2020 10:14:09 +0000 Received: from localhost.localdomain (unknown [IPv6:2a01:e0a:2c:6930:d3ea:1c7:41fd:3038]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 7F0602A1C94; Tue, 5 May 2020 11:14:02 +0100 (BST) From: Boris Brezillon To: Miquel Raynal , linux-mtd@lists.infradead.org, Lubomir Rintel Subject: [PATCH v2 16/19] mtd: rawnand: cafe: Adjust the cafe_{read, write}_buf() prototypes Date: Tue, 5 May 2020 12:13:50 +0200 Message-Id: <20200505101353.1776394-17-boris.brezillon@collabora.com> X-Mailer: git-send-email 2.25.3 In-Reply-To: <20200505101353.1776394-1-boris.brezillon@collabora.com> References: <20200505101353.1776394-1-boris.brezillon@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200505_031405_283614_7C8CA8C7 X-CRM114-Status: GOOD ( 11.53 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , Boris Brezillon , Vignesh Raghavendra , Tudor Ambarus Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Replace the uint8_t pointer by a void pointer and make the length unsigned so it matches what's passed through the NAND instructions. Signed-off-by: Boris Brezillon Reviewed-by: Miquel Raynal Tested-by: Lubomir Rintel --- Changes in v2: * s/nand/NAND/ * Add R-b/T-b --- drivers/mtd/nand/raw/cafe_nand.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/nand/raw/cafe_nand.c b/drivers/mtd/nand/raw/cafe_nand.c index bcdd58e93666..74c64af700d5 100644 --- a/drivers/mtd/nand/raw/cafe_nand.c +++ b/drivers/mtd/nand/raw/cafe_nand.c @@ -179,7 +179,8 @@ static const char *part_probes[] = { "cmdlinepart", "RedBoot", NULL }; #define cafe_readl(cafe, addr) readl((cafe)->mmio + CAFE_##addr) #define cafe_writel(cafe, datum, addr) writel(datum, (cafe)->mmio + CAFE_##addr) -static void cafe_write_buf(struct nand_chip *chip, const uint8_t *buf, int len) +static void cafe_write_buf(struct nand_chip *chip, const void *buf, + unsigned int len) { struct cafe_priv *cafe = nand_get_controller_data(chip); @@ -191,7 +192,7 @@ static void cafe_write_buf(struct nand_chip *chip, const uint8_t *buf, int len) dev_dbg(&cafe->pdev->dev, "Copy 0x%x bytes to write buffer.\n", len); } -static void cafe_read_buf(struct nand_chip *chip, uint8_t *buf, int len) +static void cafe_read_buf(struct nand_chip *chip, void *buf, unsigned int len) { struct cafe_priv *cafe = nand_get_controller_data(chip); From patchwork Tue May 5 10:13:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Brezillon X-Patchwork-Id: 1283425 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=collabora.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20170209 header.b=fAIur0Ok; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49GbJs1Xq7z9sT1 for ; Tue, 5 May 2020 20:18:05 +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:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version: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=vbAHttUdnjIpjinx4t3slvWJyi3MNOEU/WHoj2rUPKU=; b=fAIur0OkDbCfaA 4itDQtVtOrcdyz18Uh53QtLFf1qG0CleFn+pHzxFVJlJx/jXzGWaE3QEQOdDtEMhmGVtVP4gDU+ui WBHVsc5HR4OBHcOwPA0oazmBo9+myxLoeTzQ4FsOSQmVII1E7Hgeu7ZbfiwVEv+kLhqLOzNlomcm0 Au4FsxsLm5BnsrPDTtEEoBlvbk/+gUQwdWm7FzGhikmfJM8vLN46ODDSE1sbOZqpTVBNOzWchMiha Am3r/FI+GFiekeliGP9VGXBadqrDWeZmtqy6dBUhSP9omiivaw5W1D2+Q6tNG7OHf73ctt1HFVjiv 3B6UuhLvnf0Ce4XKjxoQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVueA-0004kN-IU; Tue, 05 May 2020 10:17:54 +0000 Received: from bhuna.collabora.co.uk ([46.235.227.227]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuaV-0007CT-A4 for linux-mtd@lists.infradead.org; Tue, 05 May 2020 10:14:10 +0000 Received: from localhost.localdomain (unknown [IPv6:2a01:e0a:2c:6930:d3ea:1c7:41fd:3038]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id C1D802A1A87; Tue, 5 May 2020 11:14:02 +0100 (BST) From: Boris Brezillon To: Miquel Raynal , linux-mtd@lists.infradead.org, Lubomir Rintel Subject: [PATCH v2 17/19] mtd: rawnand: cafe: s/uint{8,16,32}_t/u{8,16,32}/ Date: Tue, 5 May 2020 12:13:51 +0200 Message-Id: <20200505101353.1776394-18-boris.brezillon@collabora.com> X-Mailer: git-send-email 2.25.3 In-Reply-To: <20200505101353.1776394-1-boris.brezillon@collabora.com> References: <20200505101353.1776394-1-boris.brezillon@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200505_031407_495776_C86D1733 X-CRM114-Status: GOOD ( 13.35 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [46.235.227.227 listed in list.dnswl.org] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , Boris Brezillon , Vignesh Raghavendra , Tudor Ambarus Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Replace uint{8,16,32}_t by u{8,16,32} to make checkpatch happy. Signed-off-by: Boris Brezillon Reviewed-by: Miquel Raynal Tested-by: Lubomir Rintel --- Changes in v2: * Add R-b/T-b --- drivers/mtd/nand/raw/cafe_nand.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/drivers/mtd/nand/raw/cafe_nand.c b/drivers/mtd/nand/raw/cafe_nand.c index 74c64af700d5..022c7a3e4073 100644 --- a/drivers/mtd/nand/raw/cafe_nand.c +++ b/drivers/mtd/nand/raw/cafe_nand.c @@ -151,7 +151,7 @@ struct cafe_priv { struct pci_dev *pdev; void __iomem *mmio; struct rs_control *rs; - uint32_t ctl2; + u32 ctl2; bool usedma; dma_addr_t dmaaddr; unsigned char *dmabuf; @@ -209,7 +209,7 @@ static irqreturn_t cafe_nand_interrupt(int irq, void *id) struct mtd_info *mtd = id; struct nand_chip *chip = mtd_to_nand(mtd); struct cafe_priv *cafe = nand_get_controller_data(chip); - uint32_t irqs = cafe_readl(cafe, NAND_IRQ); + u32 irqs = cafe_readl(cafe, NAND_IRQ); cafe_writel(cafe, irqs & ~(CAFE_NAND_IRQ_CMD_DONE | CAFE_NAND_IRQ_DMA_DONE), NAND_IRQ); @@ -240,7 +240,7 @@ static int cafe_nand_read_oob(struct nand_chip *chip, int page) * The hw generator calculates the error syndrome automatically. Therefore * we need a special oob layout and handling. */ -static int cafe_nand_read_page(struct nand_chip *chip, uint8_t *buf, +static int cafe_nand_read_page(struct nand_chip *chip, u8 *buf, int oob_required, int page) { struct mtd_info *mtd = nand_to_mtd(chip); @@ -268,8 +268,8 @@ static int cafe_nand_read_page(struct nand_chip *chip, uint8_t *buf, int i, n; for (i=0; i<8; i+=2) { - uint32_t tmp = cafe_readl(cafe, NAND_ECC_SYN_REG(i)); - uint16_t idx; + u32 tmp = cafe_readl(cafe, NAND_ECC_SYN_REG(i)); + u16 idx; idx = FIELD_GET(CAFE_NAND_ECC_SYN_FIELD(i), tmp); syn[i] = cafe->rs->codec->index_of[idx]; @@ -365,11 +365,11 @@ static const struct mtd_ooblayout_ops cafe_ooblayout_ops = { /* Ick. The BBT code really ought to be able to work this bit out for itself from the above, at least for the 2KiB case */ -static uint8_t cafe_bbt_pattern_2048[] = { 'B', 'b', 't', '0' }; -static uint8_t cafe_mirror_pattern_2048[] = { '1', 't', 'b', 'B' }; +static u8 cafe_bbt_pattern_2048[] = { 'B', 'b', 't', '0' }; +static u8 cafe_mirror_pattern_2048[] = { '1', 't', 'b', 'B' }; -static uint8_t cafe_bbt_pattern_512[] = { 0xBB }; -static uint8_t cafe_mirror_pattern_512[] = { 0xBC }; +static u8 cafe_bbt_pattern_512[] = { 0xBB }; +static u8 cafe_mirror_pattern_512[] = { 0xBC }; static struct nand_bbt_descr cafe_bbt_main_descr_2048 = { @@ -414,7 +414,7 @@ static struct nand_bbt_descr cafe_bbt_mirror_descr_512 = { static int cafe_nand_write_page(struct nand_chip *chip, - const uint8_t *buf, int oob_required, + const u8 *buf, int oob_required, int page) { struct mtd_info *mtd = nand_to_mtd(chip); From patchwork Tue May 5 10:13:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Brezillon X-Patchwork-Id: 1283431 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=collabora.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20170209 header.b=ZuXl5nFn; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49GbLb2V5Rz9sRf for ; Tue, 5 May 2020 20:19: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:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version: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=Akj5aEOdZzxWydbsQ9fFiNunw4WtolM3mGvgvaHtEBY=; b=ZuXl5nFnPPPL2U awfnYF53+TTkATgqiWwUizpFZT6kkic4AkaHEpzCOcmPH2GICb5qKxviopM1QZzioFU5Z/vTIKJ0S VesgJ57IuorGoz3EcBDKzzvBVXiw018+Jib9Mm67/ZRf13w8fGfmHZfkHv4iAAbXycRUSkuPztd1n 256qzr7ANOs15Bh/S8FJPVzaDWo/jydKAvHmXCgEo04Fl21qsw5XwwOEDZ6Aitcj7FANC3CXnwtMl nSgbBIQAYE+En1bET4ydjpSwvKjxFd+4NlD7AN0u5PuTTQgoMZFSiMx9YiLKZkBcqSqfOC1REt0JZ s570fW8TYZaDGicSAxQQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVufa-00061O-OT; Tue, 05 May 2020 10:19:22 +0000 Received: from bhuna.collabora.co.uk ([46.235.227.227]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuaV-0007CS-A5 for linux-mtd@lists.infradead.org; Tue, 05 May 2020 10:14:11 +0000 Received: from localhost.localdomain (unknown [IPv6:2a01:e0a:2c:6930:d3ea:1c7:41fd:3038]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 1758D2A1CC3; Tue, 5 May 2020 11:14:03 +0100 (BST) From: Boris Brezillon To: Miquel Raynal , linux-mtd@lists.infradead.org, Lubomir Rintel Subject: [PATCH v2 18/19] mtd: rawnand: cafe: Drop the cafe_{readl, writel}() wrappers Date: Tue, 5 May 2020 12:13:52 +0200 Message-Id: <20200505101353.1776394-19-boris.brezillon@collabora.com> X-Mailer: git-send-email 2.25.3 In-Reply-To: <20200505101353.1776394-1-boris.brezillon@collabora.com> References: <20200505101353.1776394-1-boris.brezillon@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200505_031407_675391_D67AE9AE X-CRM114-Status: GOOD ( 16.24 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [46.235.227.227 listed in list.dnswl.org] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , Boris Brezillon , Vignesh Raghavendra , Tudor Ambarus Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Given how long this driver has been there we can safely assume that nobody cares about PIO support. Getting rid of these macros allows for easy register name greping. Signed-off-by: Boris Brezillon Suggested-by: Lubomir Rintel Reviewed-by: Miquel Raynal --- Changes in v2: * New patch --- drivers/mtd/nand/raw/cafe_nand.c | 134 +++++++++++++------------------ 1 file changed, 58 insertions(+), 76 deletions(-) diff --git a/drivers/mtd/nand/raw/cafe_nand.c b/drivers/mtd/nand/raw/cafe_nand.c index 022c7a3e4073..2f20032b4df7 100644 --- a/drivers/mtd/nand/raw/cafe_nand.c +++ b/drivers/mtd/nand/raw/cafe_nand.c @@ -175,10 +175,6 @@ module_param_array(timing, int, &numtimings, 0644); static const char *part_probes[] = { "cmdlinepart", "RedBoot", NULL }; -/* Make it easier to switch to PIO if we need to */ -#define cafe_readl(cafe, addr) readl((cafe)->mmio + CAFE_##addr) -#define cafe_writel(cafe, datum, addr) writel(datum, (cafe)->mmio + CAFE_##addr) - static void cafe_write_buf(struct nand_chip *chip, const void *buf, unsigned int len) { @@ -209,14 +205,14 @@ static irqreturn_t cafe_nand_interrupt(int irq, void *id) struct mtd_info *mtd = id; struct nand_chip *chip = mtd_to_nand(mtd); struct cafe_priv *cafe = nand_get_controller_data(chip); - u32 irqs = cafe_readl(cafe, NAND_IRQ); - cafe_writel(cafe, - irqs & ~(CAFE_NAND_IRQ_CMD_DONE | CAFE_NAND_IRQ_DMA_DONE), - NAND_IRQ); + u32 irqs = readl(cafe->mmio + CAFE_NAND_IRQ); + writel(irqs & ~(CAFE_NAND_IRQ_CMD_DONE | CAFE_NAND_IRQ_DMA_DONE), + cafe->mmio + CAFE_NAND_IRQ); if (!irqs) return IRQ_NONE; - dev_dbg(&cafe->pdev->dev, "irq, bits %x (%x)\n", irqs, cafe_readl(cafe, NAND_IRQ)); + dev_dbg(&cafe->pdev->dev, "irq, bits %x (%x)\n", irqs, + readl(cafe->mmio + CAFE_NAND_IRQ)); return IRQ_HANDLED; } @@ -250,8 +246,8 @@ static int cafe_nand_read_page(struct nand_chip *chip, u8 *buf, u32 ecc_result, status; dev_dbg(&cafe->pdev->dev, "ECC result %08x SYN1,2 %08x\n", - cafe_readl(cafe, NAND_ECC_RESULT), - cafe_readl(cafe, NAND_ECC_SYN_REG(0))); + readl(cafe->mmio + CAFE_NAND_ECC_RESULT), + readl(cafe->mmio + CAFE_NAND_ECC_SYN_REG(0))); nand_read_page_op(chip, page, 0, pagebuf, mtd->writesize + mtd->oobsize); @@ -259,7 +255,7 @@ static int cafe_nand_read_page(struct nand_chip *chip, u8 *buf, if (buf != pagebuf) memcpy(buf, pagebuf, mtd->writesize); - ecc_result = cafe_readl(cafe, NAND_ECC_RESULT); + ecc_result = readl(cafe->mmio + CAFE_NAND_ECC_RESULT); status = CAFE_FIELD_GET(NAND_ECC_RESULT, STATUS, ecc_result); if (checkecc && status == CAFE_NAND_ECC_RESULT_CORRECTABLE_ERRS) { unsigned short syn[8], pat[4]; @@ -268,7 +264,7 @@ static int cafe_nand_read_page(struct nand_chip *chip, u8 *buf, int i, n; for (i=0; i<8; i+=2) { - u32 tmp = cafe_readl(cafe, NAND_ECC_SYN_REG(i)); + u32 tmp = readl(cafe->mmio + CAFE_NAND_ECC_SYN_REG(i)); u16 idx; idx = FIELD_GET(CAFE_NAND_ECC_SYN_FIELD(i), tmp); @@ -315,10 +311,12 @@ static int cafe_nand_read_page(struct nand_chip *chip, u8 *buf, } if (n < 0) { - dev_dbg(&cafe->pdev->dev, "Failed to correct ECC at %08x\n", - cafe_readl(cafe, NAND_ADDR2) * 2048); + dev_dbg(&cafe->pdev->dev, + "Failed to correct ECC at %08x\n", + readl(cafe->mmio + CAFE_NAND_ADDR2) * 2048); for (i = 0; i < 0x5c; i += 4) - printk("Register %x: %08x\n", i, readl(cafe->mmio + i)); + printk("Register %x: %08x\n", i, + readl(cafe->mmio + i)); mtd->ecc_stats.failed++; } else { dev_dbg(&cafe->pdev->dev, "Corrected %d symbol errors\n", n); @@ -494,11 +492,11 @@ static int cafe_nand_attach_chip(struct nand_chip *chip) return -ENOMEM; /* Set up DMA address */ - cafe_writel(cafe, lower_32_bits(cafe->dmaaddr), NAND_DMA_ADDR0); - cafe_writel(cafe, upper_32_bits(cafe->dmaaddr), NAND_DMA_ADDR1); + writel(lower_32_bits(cafe->dmaaddr), cafe->mmio + CAFE_NAND_DMA_ADDR0); + writel(upper_32_bits(cafe->dmaaddr), cafe->mmio + CAFE_NAND_DMA_ADDR1); dev_dbg(&cafe->pdev->dev, "Set DMA address to %x (virt %p)\n", - cafe_readl(cafe, NAND_DMA_ADDR0), cafe->dmabuf); + readl(cafe->mmio + CAFE_NAND_DMA_ADDR0), cafe->dmabuf); /* Restore the DMA flag */ cafe->usedma = usedma; @@ -589,8 +587,8 @@ static int cafe_nand_exec_subop(struct nand_chip *chip, ctrl1 |= CAFE_NAND_CTRL1_HAS_ADDR | CAFE_FIELD_PREP(NAND_CTRL1, NUM_ADDR_CYC, instr->ctx.addr.naddrs - 1); - cafe_writel(cafe, addr1, NAND_ADDR1); - cafe_writel(cafe, addr2, NAND_ADDR2); + writel(addr1, cafe->mmio + CAFE_NAND_ADDR1); + writel(addr2, cafe->mmio + CAFE_NAND_ADDR2); break; case NAND_OP_DATA_IN_INSTR: @@ -615,8 +613,8 @@ static int cafe_nand_exec_subop(struct nand_chip *chip, } if (data_instr >= 0) - cafe_writel(cafe, nand_subop_get_data_len(subop, data_instr), - NAND_DATA_LEN); + writel(nand_subop_get_data_len(subop, data_instr), + cafe->mmio + CAFE_NAND_DATA_LEN); if (cafe->usedma && data_instr >= 0) { u32 dmactrl = CAFE_NAND_DMA_CTRL_ENABLE | @@ -628,7 +626,7 @@ static int cafe_nand_exec_subop(struct nand_chip *chip, if (ctrl1 & CAFE_NAND_CTRL1_HAS_DATA_IN) dmactrl |= CAFE_NAND_DMA_CTRL_DATA_IN; - cafe_writel(cafe, dmactrl, NAND_DMA_CTRL); + writel(dmactrl, cafe->mmio + CAFE_NAND_DMA_CTRL); /* * If the last instruction is a data transfer and we're using @@ -642,10 +640,10 @@ static int cafe_nand_exec_subop(struct nand_chip *chip, } /* Clear the pending interrupts before starting the operation. */ - cafe_writel(cafe, wait, NAND_IRQ); + writel(wait, cafe->mmio + CAFE_NAND_IRQ); - cafe_writel(cafe, ctrl2, NAND_CTRL2); - cafe_writel(cafe, ctrl1, NAND_CTRL1); + writel(ctrl2, cafe->mmio + CAFE_NAND_CTRL2); + writel(ctrl1, cafe->mmio + CAFE_NAND_CTRL1); ret = readl_poll_timeout(cafe->mmio + CAFE_NAND_IRQ, status, (status & wait) == wait, 1, USEC_PER_SEC); @@ -695,17 +693,17 @@ static void cafe_nand_init(struct cafe_priv *cafe) u32 ctrl; /* Start off by resetting the NAND controller completely */ - cafe_writel(cafe, CAFE_GLOBAL_RESET_NAND, GLOBAL_RESET); - cafe_writel(cafe, 0, GLOBAL_RESET); - cafe_writel(cafe, 0xffffffff, NAND_IRQ_MASK); + writel(CAFE_GLOBAL_RESET_NAND, cafe->mmio + CAFE_GLOBAL_RESET); + writel(0, cafe->mmio + CAFE_GLOBAL_RESET); + writel(0xffffffff, cafe->mmio + CAFE_NAND_IRQ_MASK); /* Restore timing configuration */ - cafe_writel(cafe, timing[0], NAND_TIMING1); - cafe_writel(cafe, timing[1], NAND_TIMING2); - cafe_writel(cafe, timing[2], NAND_TIMING3); + writel(timing[0], cafe->mmio + CAFE_NAND_TIMING1); + writel(timing[1], cafe->mmio + CAFE_NAND_TIMING2); + writel(timing[2], cafe->mmio + CAFE_NAND_TIMING3); /* Disable master reset, enable NAND clock */ - ctrl = cafe_readl(cafe, GLOBAL_CTRL); + ctrl = readl(cafe->mmio + CAFE_GLOBAL_CTRL); ctrl &= ~(CAFE_GLOBAL_SW_RESET_SET | CAFE_GLOBAL_SW_RESET_CLEAR | CAFE_GLOBAL_MASTER_RESET_SET | @@ -714,45 +712,31 @@ static void cafe_nand_init(struct cafe_priv *cafe) ctrl |= CAFE_GLOBAL_NAND_CLK_ENABLE | CAFE_GLOBAL_SDH_CLK_ENABLE | CAFE_GLOBAL_CCIC_CLK_ENABLE; - cafe_writel(cafe, - ctrl | - CAFE_GLOBAL_MASTER_RESET_SET | - CAFE_GLOBAL_SW_RESET_SET, - GLOBAL_CTRL); - cafe_writel(cafe, - ctrl | - CAFE_GLOBAL_MASTER_RESET_CLEAR | - CAFE_GLOBAL_SW_RESET_CLEAR, - GLOBAL_CTRL); + writel(ctrl | CAFE_GLOBAL_MASTER_RESET_SET | CAFE_GLOBAL_SW_RESET_SET, + cafe->mmio + CAFE_GLOBAL_CTRL); + writel(ctrl | CAFE_GLOBAL_MASTER_RESET_CLEAR | + CAFE_GLOBAL_SW_RESET_CLEAR, + cafe->mmio + CAFE_GLOBAL_CTRL); - cafe_writel(cafe, 0, NAND_DMA_CTRL); + writel(0, cafe->mmio + CAFE_NAND_DMA_CTRL); - cafe_writel(cafe, - CAFE_GLOBAL_NAND_CLK_ENABLE | - CAFE_GLOBAL_SDH_CLK_ENABLE | - CAFE_GLOBAL_CCIC_CLK_ENABLE | - CAFE_GLOBAL_MASTER_RESET_SET | - CAFE_GLOBAL_SW_RESET_CLEAR, - GLOBAL_CTRL); - cafe_writel(cafe, - CAFE_GLOBAL_NAND_CLK_ENABLE | - CAFE_GLOBAL_SDH_CLK_ENABLE | - CAFE_GLOBAL_CCIC_CLK_ENABLE | - CAFE_GLOBAL_MASTER_RESET_CLEAR | - CAFE_GLOBAL_SW_RESET_CLEAR, - GLOBAL_CTRL); + writel(CAFE_GLOBAL_NAND_CLK_ENABLE | CAFE_GLOBAL_SDH_CLK_ENABLE | + CAFE_GLOBAL_CCIC_CLK_ENABLE | CAFE_GLOBAL_MASTER_RESET_SET | + CAFE_GLOBAL_SW_RESET_CLEAR, + cafe->mmio + CAFE_GLOBAL_CTRL); + writel(CAFE_GLOBAL_NAND_CLK_ENABLE | CAFE_GLOBAL_SDH_CLK_ENABLE | + CAFE_GLOBAL_CCIC_CLK_ENABLE | CAFE_GLOBAL_MASTER_RESET_CLEAR | + CAFE_GLOBAL_SW_RESET_CLEAR, + cafe->mmio + CAFE_GLOBAL_CTRL); /* Set up DMA address */ - cafe_writel(cafe, lower_32_bits(cafe->dmaaddr), NAND_DMA_ADDR0); - cafe_writel(cafe, upper_32_bits(cafe->dmaaddr), NAND_DMA_ADDR1); + writel(lower_32_bits(cafe->dmaaddr), cafe->mmio + CAFE_NAND_DMA_ADDR0); + writel(upper_32_bits(cafe->dmaaddr), cafe->mmio + CAFE_NAND_DMA_ADDR1); /* Enable NAND IRQ in global IRQ mask register */ - cafe_writel(cafe, - CAFE_GLOBAL_IRQ_PCI_ERROR | - CAFE_GLOBAL_IRQ_CCIC | - CAFE_GLOBAL_IRQ_SDH | - CAFE_GLOBAL_IRQ_NAND, - GLOBAL_IRQ_MASK); + writel(CAFE_GLOBAL_IRQ_PCI_ERROR | CAFE_GLOBAL_IRQ_CCIC | + CAFE_GLOBAL_IRQ_SDH | CAFE_GLOBAL_IRQ_NAND, + cafe->mmio + CAFE_GLOBAL_IRQ_MASK); } static int cafe_nand_probe(struct pci_dev *pdev, @@ -808,9 +792,9 @@ static int cafe_nand_probe(struct pci_dev *pdev, dev_dbg(&cafe->pdev->dev, "Using provided timings (%08x %08x %08x)\n", timing[0], timing[1], timing[2]); } else { - timing[0] = cafe_readl(cafe, NAND_TIMING1); - timing[1] = cafe_readl(cafe, NAND_TIMING2); - timing[2] = cafe_readl(cafe, NAND_TIMING3); + timing[0] = readl(cafe->mmio + CAFE_NAND_TIMING1); + timing[1] = readl(cafe->mmio + CAFE_NAND_TIMING2); + timing[2] = readl(cafe->mmio + CAFE_NAND_TIMING3); if (timing[0] | timing[1] | timing[2]) { dev_dbg(&cafe->pdev->dev, "Timing registers already set (%08x %08x %08x)\n", @@ -854,9 +838,8 @@ static int cafe_nand_probe(struct pci_dev *pdev, nand_cleanup(&cafe->nand); out_irq: /* Disable NAND IRQ in global IRQ mask register */ - cafe_writel(cafe, - cafe_readl(cafe, GLOBAL_IRQ_MASK) & ~CAFE_GLOBAL_IRQ_NAND, - GLOBAL_IRQ_MASK); + writel(readl(cafe->mmio + CAFE_GLOBAL_IRQ_MASK) & ~CAFE_GLOBAL_IRQ_NAND, + cafe->mmio + CAFE_GLOBAL_IRQ_MASK); out_ior: pci_iounmap(pdev, cafe->mmio); return err; @@ -869,9 +852,8 @@ static void cafe_nand_remove(struct pci_dev *pdev) struct cafe_priv *cafe = nand_get_controller_data(chip); /* Disable NAND IRQ in global IRQ mask register */ - cafe_writel(cafe, - cafe_readl(cafe, GLOBAL_IRQ_MASK) & ~CAFE_GLOBAL_IRQ_NAND, - GLOBAL_IRQ_MASK); + writel(readl(cafe->mmio + CAFE_GLOBAL_IRQ_MASK) & ~CAFE_GLOBAL_IRQ_NAND, + cafe->mmio + CAFE_GLOBAL_IRQ_MASK); nand_release(chip); free_rs(cafe->rs); pci_iounmap(pdev, cafe->mmio); From patchwork Tue May 5 10:13:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Brezillon X-Patchwork-Id: 1283421 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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=collabora.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20170209 header.b=DhHOs9dM; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49GbHh3PM5z9sSW for ; Tue, 5 May 2020 20:17:04 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version: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=SfSMBFrezOMTFQWOgTX6pw4HpRCxjrJy5qhknu0/8wU=; b=DhHOs9dMA6Q3Je 0LsPFyhrZAj40Jon3k5jz5A2JsFYj9+A4GWcmTWxEvZ7nQQ9j9mhq5LmnlibhODl8ybEuXy58YhSW 3Rg0l7dYNGWrALBdkwbataZMLG1xVzmwDg4xQwAr5/3N7sDnYBk+75mTrNKQHxJYZ8MARpxxV1Xaf hrxrECGSMoDU1QFcrJgNyNzlCuzRV9yjGRxKanE2v7bBadBf/ddgLsXSvoG+9f8gsO0DOmfSpgfVc 2oymj0vEX9yHkZ7jLQCY0aAUE6b76Ytg1ppRK15Zj/cB4B3J9n97aOO6UMd6HJFnJ5HFwlBagA7+l SBIbuo1S29iKcYkU9z+g==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVudB-0003it-GH; Tue, 05 May 2020 10:16:53 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jVuaV-0007Ct-EA for linux-mtd@lists.infradead.org; Tue, 05 May 2020 10:14:09 +0000 Received: from localhost.localdomain (unknown [IPv6:2a01:e0a:2c:6930:d3ea:1c7:41fd:3038]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 661622A1CFA; Tue, 5 May 2020 11:14:03 +0100 (BST) From: Boris Brezillon To: Miquel Raynal , linux-mtd@lists.infradead.org, Lubomir Rintel Subject: [PATCH v2 19/19] mtd: rawnand: cafe: Get rid of the last printk() Date: Tue, 5 May 2020 12:13:53 +0200 Message-Id: <20200505101353.1776394-20-boris.brezillon@collabora.com> X-Mailer: git-send-email 2.25.3 In-Reply-To: <20200505101353.1776394-1-boris.brezillon@collabora.com> References: <20200505101353.1776394-1-boris.brezillon@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200505_031407_637601_3063B981 X-CRM114-Status: GOOD ( 10.71 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , Boris Brezillon , Vignesh Raghavendra , Tudor Ambarus Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Replace the last printk() by a dev_dbg(). Signed-off-by: Boris Brezillon Reviewed-by: Miquel Raynal --- drivers/mtd/nand/raw/cafe_nand.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/nand/raw/cafe_nand.c b/drivers/mtd/nand/raw/cafe_nand.c index 2f20032b4df7..9df02ad951d8 100644 --- a/drivers/mtd/nand/raw/cafe_nand.c +++ b/drivers/mtd/nand/raw/cafe_nand.c @@ -315,8 +315,9 @@ static int cafe_nand_read_page(struct nand_chip *chip, u8 *buf, "Failed to correct ECC at %08x\n", readl(cafe->mmio + CAFE_NAND_ADDR2) * 2048); for (i = 0; i < 0x5c; i += 4) - printk("Register %x: %08x\n", i, - readl(cafe->mmio + i)); + dev_dbg(&cafe->pdev->dev, + "Register %x: %08x\n", i, + readl(cafe->mmio + i)); mtd->ecc_stats.failed++; } else { dev_dbg(&cafe->pdev->dev, "Corrected %d symbol errors\n", n);