Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp4703521ybv; Wed, 26 Feb 2020 01:38:52 -0800 (PST) X-Google-Smtp-Source: APXvYqzphSq+okjc98rvlaq2P2jPUaPlk1gri59IGqRk76AIqPRcHy63XyeMF68bgAFToqivM53j X-Received: by 2002:a05:6830:1219:: with SMTP id r25mr2333248otp.180.1582709932720; Wed, 26 Feb 2020 01:38:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582709932; cv=none; d=google.com; s=arc-20160816; b=wHHneuVeugPfc8Lu8njCfV8vUDWCVhzx/KGtvEL/NAV3h4ir7UBtFVnLFIXwPKfdbQ wEEhVjDTDuyysiphJ0t2PJZUwVzGZ2LzZXAeNc/FcbJ44vSR2ckYJiTIvYU6BmZrAxB8 PWtRktQ80oUwUWGg1OXvsPgy9kvcRNW5nrMtYZWz5eNwAK04cQOeMv+HaMaB4yd2iRkU dPUiaOaYxa7znTgh8ujG4D/earsj5y49vMRRZiRt7rWYBtKx0EPRKplpucHzvv4eLDE1 dkPU5z8gb80hPA9h+u6cIEIzJjYBwIox/huJCflI6QsTVQnh3sitXwxwHuC5xWo+rmQZ f/kw== 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=y87/V7I5zHb8iyPROpfrmWQgIDTgx7YSXRab81S5ydQ=; b=v+Q6q1K/HxX5g62yD8OD8OdZVng+iBm4Uwz0si6DCAQGlyfgNlcucFO8k28MRn9ISK y4YYZo4qPwSo2J+H6ZEX8QaaHJmR++ST3DtieDazvfiy0knTqNrmkIWjiNCKzg0ARkl5 A6rcg4XuAUjeuAlC/KlJRxrzVnfFVXA4YqcM4ImiqZIWuLPkkecwSScnGriTieyheUSa UvEKnRJN1Q1t8y4tvVxzLvoWeaRckmD5UBdeg70oGQT0SAc2xga6Hg2eSnrGJ6XZs9nn qY/G0REqtps32A9HSOuqmb2GLyjukwsEXDNXmR3jonCqzy9aezNq3o88NecEiksy+oty 4rdg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=dGKYuUek; 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; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c11si839967oic.20.2020.02.26.01.38.41; Wed, 26 Feb 2020 01:38:52 -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=@ti.com header.s=ti-com-17Q1 header.b=dGKYuUek; 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; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728016AbgBZJhw (ORCPT + 99 others); Wed, 26 Feb 2020 04:37:52 -0500 Received: from lelv0142.ext.ti.com ([198.47.23.249]:40660 "EHLO lelv0142.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727996AbgBZJhu (ORCPT ); Wed, 26 Feb 2020 04:37:50 -0500 Received: from fllv0035.itg.ti.com ([10.64.41.0]) by lelv0142.ext.ti.com (8.15.2/8.15.2) with ESMTP id 01Q9bdv2019797; Wed, 26 Feb 2020 03:37:39 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1582709859; bh=y87/V7I5zHb8iyPROpfrmWQgIDTgx7YSXRab81S5ydQ=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=dGKYuUekGnlAQmBS0P73h9oiGmCI1KzMzEY4yzwUFrV//cwZNz9fMNEI5+giZaotJ gp6m/ODrSrxp4k5tqxEiKaFJ2zNt10UNGqvZPt87bf7E0psyI8LneSxjacf/LXq7ES YVfdgzZ9NUgOWgFJTy05qV4kZ7BQxWK65kjouB2o= Received: from DFLE113.ent.ti.com (dfle113.ent.ti.com [10.64.6.34]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTP id 01Q9bdo1086843; Wed, 26 Feb 2020 03:37:39 -0600 Received: from DFLE102.ent.ti.com (10.64.6.23) by DFLE113.ent.ti.com (10.64.6.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3; Wed, 26 Feb 2020 03:37:38 -0600 Received: from lelv0327.itg.ti.com (10.180.67.183) by DFLE102.ent.ti.com (10.64.6.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3 via Frontend Transport; Wed, 26 Feb 2020 03:37:38 -0600 Received: from pratyush-OptiPlex-790.dhcp.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0327.itg.ti.com (8.15.2/8.15.2) with ESMTP id 01Q9b4AC110613; Wed, 26 Feb 2020 03:37:35 -0600 From: Pratyush Yadav To: Tudor Ambarus , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Mark Brown , Rob Herring , Mark Rutland CC: Pratyush Yadav , , , , , Sekhar Nori Subject: [PATCH v2 07/11] mtd: spi-nor: get command opcode extension type from BFPT Date: Wed, 26 Feb 2020 15:06:59 +0530 Message-ID: <20200226093703.19765-8-p.yadav@ti.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200226093703.19765-1-p.yadav@ti.com> References: <20200226093703.19765-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 devices in DTR mode expect an extra command byte called the extension. The extension can either be same as the opcode, bitwise inverse of the opcode, or another additional byte forming a 16-byte opcode. Get the extension type from the BFPT. For now, only flashes with "repeat" and "inverse" extensions are supported. As of JESD216D.01, BFPT is 20 DWORDs, so update the table size to reflect that. Signed-off-by: Pratyush Yadav --- drivers/mtd/spi-nor/spi-nor.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c index 6102520550a1..c86c1537f76e 100644 --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c @@ -79,11 +79,11 @@ struct sfdp_header { /* Basic Flash Parameter Table */ /* - * JESD216 rev B defines a Basic Flash Parameter Table of 16 DWORDs. - * They are indexed from 1 but C arrays are indexed from 0. + * JESD216 rev D defines a Basic Flash Parameter Table of 20 DWORDs. They are + * indexed from 1 but C arrays are indexed from 0. */ #define BFPT_DWORD(i) ((i) - 1) -#define BFPT_DWORD_MAX 16 +#define BFPT_DWORD_MAX 20 /* The first version of JESD216 defined only 9 DWORDs. */ #define BFPT_DWORD_MAX_JESD216 9 @@ -148,6 +148,12 @@ struct sfdp_header { #define BFPT_DWORD15_QER_SR2_BIT1_NO_RD (0x4UL << 20) #define BFPT_DWORD15_QER_SR2_BIT1 (0x5UL << 20) /* Spansion */ +#define BFPT_DWORD18_CMD_EXT_MASK GENMASK(30, 29) +#define BFPT_DWORD18_CMD_EXT_REP (0x0UL << 29) /* Repeat */ +#define BFPT_DWORD18_CMD_EXT_INV (0x1UL << 29) /* Invert */ +#define BFPT_DWORD18_CMD_EXT_RES (0x2UL << 29) /* Reserved */ +#define BFPT_DWORD18_CMD_EXT_16B (0x3UL << 29) /* 16-bit opcode */ + struct sfdp_bfpt { u32 dwords[BFPT_DWORD_MAX]; }; @@ -3867,6 +3873,24 @@ static int spi_nor_parse_bfpt(struct spi_nor *nor, return -EINVAL; } + /* 8D-8D-8D command extension. */ + switch (bfpt.dwords[BFPT_DWORD(18)] & BFPT_DWORD18_CMD_EXT_MASK) { + case BFPT_DWORD18_CMD_EXT_REP: + nor->cmd_ext = SPI_MEM_EXT_REPEAT; + break; + + case BFPT_DWORD18_CMD_EXT_INV: + nor->cmd_ext = SPI_MEM_EXT_INVERT; + break; + + case BFPT_DWORD18_CMD_EXT_RES: + return -EINVAL; + + case BFPT_DWORD18_CMD_EXT_16B: + dev_err(nor->dev, "16-bit opcodes not supported\n"); + return -ENOTSUPP; + } + return spi_nor_post_bfpt_fixups(nor, bfpt_header, &bfpt, params); } -- 2.25.0