Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp3822099ybt; Tue, 23 Jun 2020 11:32:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyEHpw3aymrAXogLhfxiEdKW56q/jBVMH+Fojwbv1ieTA1xYD9oTv+Qy6Wm6HKWR/N9FyIL X-Received: by 2002:a17:906:f257:: with SMTP id gy23mr22569281ejb.370.1592937157811; Tue, 23 Jun 2020 11:32:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592937157; cv=none; d=google.com; s=arc-20160816; b=KZ8b1wCVzlt2TIcbZqafrm7XEbZ+aSlk36GEILG6TNomBaRVOZP+WAgyj4Y4otUwDh 7t//+gKGY5LwcfgOTS0B4NO2i8vFrHm43brRYiwDJMZthRFE8sezETkrXkbAHZnURdy+ IwGXKtArJkDJtjfYHC7JhoiOIDXxrmiXDEn1V1IykPIvfOKyKorxbejASus0eyoIlqKf Fo9/oBDV61l8ZDmSjc2BN65df6IOYZps85X9lIaRbixgmuxRKCTeBXwhCcRPWO/4xlWD 9uuwE9wGyBzB5i1GyINFg3fiwtQKOgEWi1zt1O6nWIp66ZF4uwJyNP7RVbA9k4MPhQm0 z5Kg== 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=azNFOV0JxpeGM/gN7UoSTDa0qAoTild5V1lojle8Tnc=; b=n5LOw8P7Emwh3+9lg5e81ALLlpSzu3/PstawTQl5qPAqRTrmfbNCVImcxvU9x11Mza Wi95PfY784FEzuRw/zU5RSZUiZ42NZE4ibhtOGXYOKetJQMFtIpN5dPIsJMRrNONHORf avZMf5RkghUscWPnMFapYP6YaNelIOFy2JNIYyIVxQt08K7GpL2ep69HHWG+maWhMW8z rHPHuKt+D5sOoqj1lXXdC5t1H/yDp4s1b0oLE0h4A84DXrdSt9jcV1eWw1S63oyD/DI1 PqDeB7+jWpsH0fI6SdDWMpLJ8zTR0YgO5uYcRveyhDVSLKG5m0kdc4Pv/35ux11V+TWK AcDA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=onMg7rsQ; 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 i3si470210edf.139.2020.06.23.11.32.13; Tue, 23 Jun 2020 11:32:37 -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=onMg7rsQ; 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 S2387619AbgFWSbe (ORCPT + 99 others); Tue, 23 Jun 2020 14:31:34 -0400 Received: from lelv0142.ext.ti.com ([198.47.23.249]:37216 "EHLO lelv0142.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387578AbgFWSb0 (ORCPT ); Tue, 23 Jun 2020 14:31:26 -0400 Received: from fllv0035.itg.ti.com ([10.64.41.0]) by lelv0142.ext.ti.com (8.15.2/8.15.2) with ESMTP id 05NIVHTU060521; Tue, 23 Jun 2020 13:31:17 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1592937077; bh=azNFOV0JxpeGM/gN7UoSTDa0qAoTild5V1lojle8Tnc=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=onMg7rsQgRc/PnRe4Ewq0EbCarot+Ke1ZgGaYyVHgPPdlrB8m/CECvsCRLfxSS+0S iJCu4P2gpmPy2lPHxLJmRZ01PTMarK70S7xlCWpPiLi37rHpkdps+gLqCDQglsoHos s/zOP9jEMmOSsxOyyAj3fOxrgm8HeoSscvCLgegQ= Received: from DLEE103.ent.ti.com (dlee103.ent.ti.com [157.170.170.33]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTP id 05NIVHbn042474; Tue, 23 Jun 2020 13:31:17 -0500 Received: from DLEE106.ent.ti.com (157.170.170.36) by DLEE103.ent.ti.com (157.170.170.33) 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:17 -0500 Received: from fllv0039.itg.ti.com (10.64.41.19) by DLEE106.ent.ti.com (157.170.170.36) 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:16 -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 05NIUVJM000942; Tue, 23 Jun 2020 13:31:12 -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 08/17] mtd: spi-nor: core: use dummy cycle and address width info from SFDP Date: Wed, 24 Jun 2020 00:00:21 +0530 Message-ID: <20200623183030.26591-9-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 The xSPI Profile 1.0 table specifies how many dummy cycles and address bytes are needed for the Read Status Register command in octal DTR mode. Use that information to send the correct Read SR command. Signed-off-by: Pratyush Yadav --- drivers/mtd/spi-nor/core.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c index 7d24e63fcca8..f2748f1d9957 100644 --- a/drivers/mtd/spi-nor/core.c +++ b/drivers/mtd/spi-nor/core.c @@ -357,6 +357,8 @@ int spi_nor_write_disable(struct spi_nor *nor) static int spi_nor_read_sr(struct spi_nor *nor, u8 *sr) { int ret; + u8 addr_bytes = nor->params->rdsr_addr_nbytes; + u8 dummy = nor->params->rdsr_dummy; if (nor->spimem) { struct spi_mem_op op = @@ -365,10 +367,21 @@ static int spi_nor_read_sr(struct spi_nor *nor, u8 *sr) SPI_MEM_OP_NO_DUMMY, SPI_MEM_OP_DATA_IN(1, sr, 1)); + if (spi_nor_protocol_is_dtr(nor->reg_proto)) { + op.addr.nbytes = addr_bytes; + op.addr.val = 0; + op.dummy.nbytes = dummy; + } + + spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); + ret = spi_mem_exec_op(nor->spimem, &op); } else { - ret = nor->controller_ops->read_reg(nor, SPINOR_OP_RDSR, - sr, 1); + if (spi_nor_protocol_is_dtr(nor->reg_proto)) + ret = -ENOTSUPP; + else + ret = nor->controller_ops->read_reg(nor, SPINOR_OP_RDSR, + sr, 1); } if (ret) @@ -388,6 +401,8 @@ static int spi_nor_read_sr(struct spi_nor *nor, u8 *sr) static int spi_nor_read_fsr(struct spi_nor *nor, u8 *fsr) { int ret; + u8 addr_bytes = nor->params->rdsr_addr_nbytes; + u8 dummy = nor->params->rdsr_dummy; if (nor->spimem) { struct spi_mem_op op = @@ -396,6 +411,12 @@ static int spi_nor_read_fsr(struct spi_nor *nor, u8 *fsr) SPI_MEM_OP_NO_DUMMY, SPI_MEM_OP_DATA_IN(1, fsr, 1)); + if (spi_nor_protocol_is_dtr(nor->reg_proto)) { + op.addr.nbytes = addr_bytes; + op.addr.val = 0; + op.dummy.nbytes = dummy; + } + spi_nor_spimem_setup_op(nor, &op, nor->reg_proto); ret = spi_mem_exec_op(nor->spimem, &op); -- 2.27.0