Received: by 2002:a17:90a:88:0:0:0:0 with SMTP id a8csp41260pja; Fri, 22 Nov 2019 03:11:49 -0800 (PST) X-Google-Smtp-Source: APXvYqwv+RvSLqUHasyYl5BKtEjPj+yWJ/ExtaDZ/E0AssvGAgtZ3ozDAIzwZc+7KrPQJnT7Nn9m X-Received: by 2002:a17:906:3490:: with SMTP id g16mr21979747ejb.189.1574421109550; Fri, 22 Nov 2019 03:11:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574421109; cv=none; d=google.com; s=arc-20160816; b=Hik13VWokUgCAftwNclMxQLsIWq22mIYYOz/QxvNR/04RduDuFN1cyuXHFhNYCsV8j y3RkWVOjBdqIUBBCyLsxTN0U7Etx2PPcHf8gbZUiUxhgscf7UNsnt0c+wn2qfcBZjOQ5 USVakSvwwJVYUCZ1vxy8MgMqfw9vB1gRPPE+8+RP5wHXMFSIX/NO93jMJiFwsgn4KzIx /RMG4mOJACN6Ky+xZHRljif5Ol5hf8BvWu48QYB6mm+Oj9dEOAqbt2zmSZOyTUmDdsQm L8WHuhvbKVcTK0W504ucFdN71iZyGTgF91VagKDXs4AXG/h6s8qMBDIadQ5CwUBNKinB KMkA== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=8rND8SlC9CzLh86hsOic4NqYMV/s6aWtr/T5sK7FheQ=; b=UOBPN1tNplOb27qsce5/tauxvIMIBl4+AP5uxwkQXQAVuz6viT6W/Rq1PPJ65anWIu FQEPT9Xs3kj8xjj8ngGIFsSgQg5qFGsLeSumwa2iHrqX4fBtmAanhU477YB4H08CJSTv 8a5RLhKgKvvUN8aN23wviExrMUnUcFkBQeU48VVp7ZDuSfml2pAE6Ey4/RiSSxxdZaQi JTuq0OUT6HwxSXX9aiS2ggQS10M+FIhtrHGCDcFmLO1xabOMkd66BhwhzSmTVDBfiT1z H7FuUqqlBlGz+54WN297U0RJpPzeOFHwQilXS8vMbTfDC47PeZiqVB6a0xq81wB42Eqj kRHg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=NUhJtTl9; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id si11si4006960ejb.71.2019.11.22.03.11.23; Fri, 22 Nov 2019 03:11:49 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=NUhJtTl9; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731461AbfKVLJK (ORCPT + 99 others); Fri, 22 Nov 2019 06:09:10 -0500 Received: from mail.kernel.org ([198.145.29.99]:57664 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729219AbfKVLD2 (ORCPT ); Fri, 22 Nov 2019 06:03:28 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id D0C29207DD; Fri, 22 Nov 2019 11:03:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1574420608; bh=RCjXUI6866u57JwmTNcRqya4SFDlPhHwx59HYYacEfk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NUhJtTl9a52yMDZgjTT/qXT2I+HxlbQJYJHJcMi13MeHY1GZ76emTjXRa+WssYTM9 UC8OHV+KhUBNoaAFeuq3vtr07Xfqw47DovT5zQRyppyDIx9cPG+uBgn64VbyYRreJq qVZj2BKZAksvVbFbVQkpnDQiX0m1dvkyc/Z0vDWc= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Yogesh Gaur , Boris Brezillon , Sasha Levin Subject: [PATCH 4.19 163/220] mtd: devices: m25p80: Make sure WRITE_EN is issued before each write Date: Fri, 22 Nov 2019 11:28:48 +0100 Message-Id: <20191122100924.480680302@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191122100912.732983531@linuxfoundation.org> References: <20191122100912.732983531@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Yogesh Gaur [ Upstream commit 3baa8ec88c2feb902328e59a4dcf0f0aaab7d2ff ] Some SPI controllers can't write nor->page_size bytes in a single step because their TX FIFO is too small, but when that happens we should make sure a WRITE_EN command before each write access and READ_SR command after each write access is issued. The core is already taking care of that, so all we have to do here is return the actual number of bytes that were written during the spi_mem_exec_op() operation. Signed-off-by: Yogesh Gaur Signed-off-by: Boris Brezillon Signed-off-by: Sasha Levin --- drivers/mtd/devices/m25p80.c | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c index 270d3c9580c51..c4a1d04b8c800 100644 --- a/drivers/mtd/devices/m25p80.c +++ b/drivers/mtd/devices/m25p80.c @@ -90,7 +90,6 @@ static ssize_t m25p80_write(struct spi_nor *nor, loff_t to, size_t len, SPI_MEM_OP_ADDR(nor->addr_width, to, 1), SPI_MEM_OP_NO_DUMMY, SPI_MEM_OP_DATA_OUT(len, buf, 1)); - size_t remaining = len; int ret; /* get transfer protocols. */ @@ -101,22 +100,16 @@ static ssize_t m25p80_write(struct spi_nor *nor, loff_t to, size_t len, if (nor->program_opcode == SPINOR_OP_AAI_WP && nor->sst_write_second) op.addr.nbytes = 0; - while (remaining) { - op.data.nbytes = remaining < UINT_MAX ? remaining : UINT_MAX; - ret = spi_mem_adjust_op_size(flash->spimem, &op); - if (ret) - return ret; - - ret = spi_mem_exec_op(flash->spimem, &op); - if (ret) - return ret; + ret = spi_mem_adjust_op_size(flash->spimem, &op); + if (ret) + return ret; + op.data.nbytes = len < op.data.nbytes ? len : op.data.nbytes; - op.addr.val += op.data.nbytes; - remaining -= op.data.nbytes; - op.data.buf.out += op.data.nbytes; - } + ret = spi_mem_exec_op(flash->spimem, &op); + if (ret) + return ret; - return len; + return op.data.nbytes; } /* -- 2.20.1