Received: by 2002:a25:ef43:0:0:0:0:0 with SMTP id w3csp231026ybm; Thu, 28 May 2020 01:04:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy03nag61eDSGMyHA/8az3PdkFXNzraruzsuk6iiMOHPHjWcZYtDAyJTqBv9ODbZpW7bmLV X-Received: by 2002:a17:906:dbef:: with SMTP id yd15mr1837079ejb.5.1590653063195; Thu, 28 May 2020 01:04:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1590653063; cv=none; d=google.com; s=arc-20160816; b=gIsBxPaDLAAoiJ41wa33Fe4Aybwe8jAjDcFk35a2OMyhd2Dk3Ds5PzOoacTsNWxObl 5KZXX6V9bxc8F1Y1iJ4MLbfruG87FZHjyggkQlIcakTqpUA2aL5wqavwDnF/HDpmwZBn iY4uBhatSfohsUW3wa/yJnAJXoBVTK+WTG+54TOaQ8RsKKxbDxq7F96LyLMvOEq6yyUz E8UQVi7gbofPKV+8qMZAGo7DBsWODK66FWKQXox0fBU9Sd5pf80BIRw+O4SdPpQNxw0n rMpROZ166F+YeEcM6OZ+dA4HLHRA7mWNha0R65OTxOvQDQxL4UhLzYeat+UKH9XYUj7J xUfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=Y44t4WIDEU9VVYxKOVlSVGtmnNK5tZNLLFak3Nesgao=; b=L7MKhktKjojMssT09k9i5yCoGtmgu0xJimo9Ldtiv2K3Mqb6Y1VsmKdpjbCIMv3Psb 58TGcxpKbdfQ+m560Rgyhzfm38xpPy0MYD2hg/xqZhzK65lUtmJFAsDFnaUyRD8Ctb9J k84r8PrawDjI1ng9fmPPz9KPtwES2GLHs3XPdx8DK8+RlBgVXnB88bHk8FXMpl6OTPus Jx/EYeXVmLocIXUxho86IHj716gYcNM4hSb2NmlU3xURAV9i3yfiDRLZZMNsvzQhS512 aHTOwqI0Uw3+XGJbEu7JirAj/F4YpLt/Gx2P+4r00FXXb7/mk7BnVMRPyEOeALRTH4Ai 9O5g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id m14si542440eja.139.2020.05.28.01.04.00; Thu, 28 May 2020 01:04:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727004AbgE1H72 (ORCPT + 99 others); Thu, 28 May 2020 03:59:28 -0400 Received: from twhmllg4.macronix.com ([122.147.135.202]:31303 "EHLO TWHMLLG4.macronix.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726942AbgE1H7Y (ORCPT ); Thu, 28 May 2020 03:59:24 -0400 Received: from localhost.localdomain ([172.17.195.96]) by TWHMLLG4.macronix.com with ESMTP id 04S7wMHk030973; Thu, 28 May 2020 15:58:31 +0800 (GMT-8) (envelope-from masonccyang@mxic.com.tw) From: Mason Yang To: broonie@kernel.org, tudor.ambarus@microchip.com, miquel.raynal@bootlin.com, richard@nod.at, vigneshr@ti.com, boris.brezillon@collabora.com, matthias.bgg@gmail.com Cc: p.yadav@ti.com, juliensu@mxic.com.tw, linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, linux-spi@vger.kernel.org Subject: [PATCH v3 11/14] mtd: spi-nor: core: enable octal DTR mode when possible Date: Thu, 28 May 2020 15:58:13 +0800 Message-Id: <1590652696-8844-12-git-send-email-masonccyang@mxic.com.tw> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1590652696-8844-1-git-send-email-masonccyang@mxic.com.tw> References: <1590652696-8844-1-git-send-email-masonccyang@mxic.com.tw> X-MAIL: TWHMLLG4.macronix.com 04S7wMHk030973 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Pratyush Yadav Allow flashes to specify a hook to enable octal DTR mode. Use this hook whenever possible to get optimal transfer speeds. Signed-off-by: Pratyush Yadav --- drivers/mtd/spi-nor/core.c | 35 +++++++++++++++++++++++++++++++++++ drivers/mtd/spi-nor/core.h | 2 ++ 2 files changed, 37 insertions(+) diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c index cbfdf544..a353830 100644 --- a/drivers/mtd/spi-nor/core.c +++ b/drivers/mtd/spi-nor/core.c @@ -3162,6 +3162,35 @@ static int spi_nor_init_params(struct spi_nor *nor) return 0; } +/** spi_nor_octal_dtr_enable() - enable Octal DTR I/O if needed + * @nor: pointer to a 'struct spi_nor' + * @enable: whether to enable or disable Octal DTR + * + * Return: 0 on success, -errno otherwise. + */ +static int spi_nor_octal_dtr_enable(struct spi_nor *nor, bool enable) +{ + int ret; + + if (!nor->params->octal_dtr_enable) + return 0; + + if (!(nor->read_proto == SNOR_PROTO_8_8_8_DTR && + nor->write_proto == SNOR_PROTO_8_8_8_DTR)) + return 0; + + ret = nor->params->octal_dtr_enable(nor, enable); + if (ret) + return ret; + + if (enable) + nor->reg_proto = SNOR_PROTO_8_8_8_DTR; + else + nor->reg_proto = SNOR_PROTO_1_1_1; + + return 0; +} + /** * spi_nor_quad_enable() - enable Quad I/O if needed. * @nor: pointer to a 'struct spi_nor' @@ -3201,6 +3230,12 @@ static int spi_nor_init(struct spi_nor *nor) { int err; + err = spi_nor_octal_dtr_enable(nor, true); + if (err) { + dev_dbg(nor->dev, "octal mode not supported\n"); + return err; + } + err = spi_nor_quad_enable(nor); if (err) { dev_dbg(nor->dev, "quad mode not supported\n"); diff --git a/drivers/mtd/spi-nor/core.h b/drivers/mtd/spi-nor/core.h index 91bc69a..9b0e0ba 100644 --- a/drivers/mtd/spi-nor/core.h +++ b/drivers/mtd/spi-nor/core.h @@ -223,6 +223,7 @@ struct cmd_seq_octal_dtr { * @erase_map: the erase map parsed from the SFDP Sector Map Parameter * Table. * @cmd_seq: command sequence to change to octal DTR mode. + * @octal_dtr_enable: enables SPI NOR octal DTR mode. * @quad_enable: enables SPI NOR quad mode. * @set_4byte_addr_mode: puts the SPI NOR in 4 byte addressing mode. * @convert_addr: converts an absolute address into something the flash @@ -252,6 +253,7 @@ struct spi_nor_flash_parameter { struct cmd_seq_octal_dtr cmd_seq[4]; + int (*octal_dtr_enable)(struct spi_nor *nor, bool enable); int (*quad_enable)(struct spi_nor *nor); int (*set_4byte_addr_mode)(struct spi_nor *nor, bool enable); u32 (*convert_addr)(struct spi_nor *nor, u32 addr); -- 1.9.1