Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp3823689ybt; Tue, 23 Jun 2020 11:35:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyevLJyvh/7zqKpTxUzIvcoFss8plJPiJl4xMgAYB/pn2rmRu7kFk7TU8fvOpj+/73r1zNk X-Received: by 2002:a17:906:9382:: with SMTP id l2mr22236266ejx.8.1592937305877; Tue, 23 Jun 2020 11:35:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592937305; cv=none; d=google.com; s=arc-20160816; b=CfNtcpQ8VrpVS6QYKCc/bTSyzO5xIS60ecpMLJZCK5ZmcXaUdWUPHgXNUGp65f1s0K 8ZR0b990Zr+HhW5+sDYb7yIPRu7tA1DCU/zWeYL0U8jfDVidRbCFhf80a2YWblinfDDB J5DDAg7GEV4YIcgsgTGfLtRwVyFybY58Ii2bJuc2+yrq05FjIs9b76l/RlRyx5LlAaX3 IJ6UPRvpCrO4W+38Gr8tJ3GzNNkx5epWIVZnofFTmr6omcFRbUV4tpydMbzvi5zNoCKz kEMy3HDfHVf139MmZo/5I1SLQA5utlApru1686MuJBVwsKp2Ksyr1na8RUaaOSBHIk0g PQDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=7zoKU0rfV7iweXMJVrs2iz1kaUSHfZ5nuTw0smUw7rA=; b=IvrP5DiQjybqwz35yXXMAyMBXSOMxalS45P2hcB+h3WITnVgoa3ynK8Fa7uhz5lPy5 jFVAwZwvMlLh6plWLnGonGURcUCdUS+a3DarVK/VajDhsOialne72IYf+69rE8GcwF53 i4cI3/t03EqVwwi0Rsfa7NR7yBvSohJz5d4qznYAfOJjV5O28SEgPFFC7jv4HsfCS4IG f6IElLR9++97Ak6A0u6PsgINvHA2fq8Q3CrscCsktQQgPfQJyXi7C6ltF9IvnmFpxZDI X8JkWCk9ibCY6CVptmY9HBI7prpc1wdNZ2M524C2dU5bOYtEIn/R6TkdSaEUlD015htx /d4g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=vuaOQFvr; 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; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id o25si10930494eja.361.2020.06.23.11.34.42; Tue, 23 Jun 2020 11:35:05 -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; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=vuaOQFvr; 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; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387634AbgFWSbn (ORCPT + 99 others); Tue, 23 Jun 2020 14:31:43 -0400 Received: from fllv0016.ext.ti.com ([198.47.19.142]:48008 "EHLO fllv0016.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387444AbgFWSbc (ORCPT ); Tue, 23 Jun 2020 14:31:32 -0400 Received: from lelv0265.itg.ti.com ([10.180.67.224]) by fllv0016.ext.ti.com (8.15.2/8.15.2) with ESMTP id 05NIVMYi046890; Tue, 23 Jun 2020 13:31:22 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1592937082; bh=7zoKU0rfV7iweXMJVrs2iz1kaUSHfZ5nuTw0smUw7rA=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=vuaOQFvrokjxAQ2vM7bUXZLseVuhEgaubqdSXFlyg9eEzEiHFlKTMdPqux+p5i6qf 3Cee8GjmI37Bdrl36PyngzL0WAJYkvz2dDiTz/E/+26Pyr+Ylk9TYrQNjY055t+WYa LPSRZSgOxONptzz4h2iiaT1vaHqs+XgGZlqWKy5I= Received: from DLEE105.ent.ti.com (dlee105.ent.ti.com [157.170.170.35]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 05NIVMm0050056 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 23 Jun 2020 13:31:22 -0500 Received: from DLEE110.ent.ti.com (157.170.170.21) by DLEE105.ent.ti.com (157.170.170.35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1979.3; Tue, 23 Jun 2020 13:31:22 -0500 Received: from fllv0039.itg.ti.com (10.64.41.19) by DLEE110.ent.ti.com (157.170.170.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1979.3 via Frontend Transport; Tue, 23 Jun 2020 13:31:22 -0500 Received: from pratyush-OptiPlex-790.dhcp.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by fllv0039.itg.ti.com (8.15.2/8.15.2) with ESMTP id 05NIUVJN000942; Tue, 23 Jun 2020 13:31:17 -0500 From: Pratyush Yadav To: Tudor Ambarus , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Mark Brown , Nicolas Ferre , Alexandre Belloni , Ludovic Desroches , Matthias Brugger , Michal Simek , , , , , CC: Pratyush Yadav , Sekhar Nori , Boris Brezillon Subject: [PATCH v10 09/17] mtd: spi-nor: core: do 2 byte reads for SR and FSR in DTR mode Date: Wed, 24 Jun 2020 00:00:22 +0530 Message-ID: <20200623183030.26591-10-p.yadav@ti.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200623183030.26591-1-p.yadav@ti.com> References: <20200623183030.26591-1-p.yadav@ti.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Some controllers, like the cadence qspi controller, have trouble reading only 1 byte in DTR mode. So, do 2 byte reads for SR and FSR commands in DTR mode, and then discard the second byte. Signed-off-by: Pratyush Yadav --- drivers/mtd/spi-nor/core.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c index f2748f1d9957..5f7e4a5c33bc 100644 --- a/drivers/mtd/spi-nor/core.c +++ b/drivers/mtd/spi-nor/core.c @@ -350,7 +350,7 @@ int spi_nor_write_disable(struct spi_nor *nor) * spi_nor_read_sr() - Read the Status Register. * @nor: pointer to 'struct spi_nor'. * @sr: pointer to a DMA-able buffer where the value of the - * Status Register will be written. + * Status Register will be written. Should be at least 2 bytes. * * Return: 0 on success, -errno otherwise. */ @@ -371,6 +371,11 @@ static int spi_nor_read_sr(struct spi_nor *nor, u8 *sr) op.addr.nbytes = addr_bytes; op.addr.val = 0; op.dummy.nbytes = dummy; + /* + * We don't want to read only one byte in DTR mode. So, + * read 2 and then discard the second byte. + */ + op.data.nbytes = 2; } spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); @@ -394,7 +399,8 @@ static int spi_nor_read_sr(struct spi_nor *nor, u8 *sr) * spi_nor_read_fsr() - Read the Flag Status Register. * @nor: pointer to 'struct spi_nor' * @fsr: pointer to a DMA-able buffer where the value of the - * Flag Status Register will be written. + * Flag Status Register will be written. Should be at least 2 + * bytes. * * Return: 0 on success, -errno otherwise. */ @@ -415,6 +421,11 @@ static int spi_nor_read_fsr(struct spi_nor *nor, u8 *fsr) op.addr.nbytes = addr_bytes; op.addr.val = 0; op.dummy.nbytes = dummy; + /* + * We don't want to read only one byte in DTR mode. So, + * read 2 and then discard the second byte. + */ + op.data.nbytes = 2; } spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); -- 2.27.0