From nobody Mon Jun 8 06:36:23 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 041983793DF for ; Mon, 1 Jun 2026 12:54:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780318489; cv=none; b=rIurjUv+oNRiNkWCDBVXolUq2e9+yDK2BksTQlK/dFPOYB6hPIkbfBrsj5cgr2RjWmSTsuaUZLGiMh4CziWRurxBenJUH/rNySSM7KlerqyMy8PcIxNcW+TcBqbXsa8CO5kRgk2ev9n2Mj1L6J2YcUV9HBGRAB5SVI2zgGQbzEU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780318489; c=relaxed/simple; bh=auElJvGtfFiLao4aR6+5cNAefiSfLmuSTO7n9y/9FYI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qpMXreEZog7oXJt/uykk7d65AH6lpDNjWIXPWywgytMrQ4/u883MJbVIzvTPpPZjclhYN5s/D3JuorNFEnABDDPiWK0uVuJQk2PpvAMX7eapM4EtCb44Hqg6cjzHqKJOXncj2+veSD5JCQJt0ox/wuRtAPiMf+FmaycOBGXMNHU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kinCCRdw; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="kinCCRdw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 123E51F00898; Mon, 1 Jun 2026 12:54:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780318486; bh=SRwPhi2462A+RURXo48O3KUzEVVenRBwhloL8me1CYw=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=kinCCRdwkuknrJyH1gQ3HPoWWlihyL/GQgIWMuJWAW6dF5H6ZKEKF4omB6l8rp2Vm 9dsIWZzwiifaK+mfEw7WOZWxjhXJNRLTYOZvDdvEn/UP1XFPj4vkCwyRHT+VdV2z8D weoN9T/7UI+F8sR/knXBc3QRTDYYKky2TKZeaJ0HEYSVJXH1FKfLmlgQO6VKzc8sZa wt/SVr1QAmQm2fnKCA94sqpRiFfDlxk/t74DS/2uGu6PPwolkc8M0+DJAYStLeptva VsdumYZPxrCro2lBHC3OjqWhFCS/4jwKITm6zvSXFA/RgiQduXJyAOe/uj9zEtkYGQ Ag27bHFzfYbYg== From: Michael Walle To: Pratyush Yadav , Michael Walle , Takahiro Kuwano , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Tudor Ambarus Cc: linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 1/3] mtd: spi-nor: spansion: s25fl256s0: remove SKIP_SFDP flag Date: Mon, 1 Jun 2026 14:52:43 +0200 Message-ID: <20260601125438.3481722-2-mwalle@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260601125438.3481722-1-mwalle@kernel.org> References: <20260601125438.3481722-1-mwalle@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" That flag was added in [1] to not "issue any non supported commands". But since we now have the generic SFDP driver, we'll issue the RDSFDP command on most flashes anyway and there was no single complaint. Remove the only user of this flag so we can rework the parameter initialization in the core. [1] https://lore.kernel.org/linux-mtd/20211207140254.87681-13-tudor.ambarus= @microchip.com/ Signed-off-by: Michael Walle Reviewed-by: Takahiro Kuwano Reviewed-by: Tudor Ambarus --- drivers/mtd/spi-nor/spansion.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/mtd/spi-nor/spansion.c b/drivers/mtd/spi-nor/spansion.c index 65227d989de1..092450375d4e 100644 --- a/drivers/mtd/spi-nor/spansion.c +++ b/drivers/mtd/spi-nor/spansion.c @@ -868,7 +868,7 @@ static const struct flash_info spansion_nor_parts[] =3D= { .name =3D "s25fl256s0", .size =3D SZ_32M, .sector_size =3D SZ_256K, - .no_sfdp_flags =3D SPI_NOR_SKIP_SFDP | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_= READ, + .no_sfdp_flags =3D SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ, .mfr_flags =3D USE_CLSR, }, { .id =3D SNOR_ID(0x01, 0x02, 0x19, 0x4d, 0x00, 0x81), --=20 2.47.3 From nobody Mon Jun 8 06:36:23 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 946F037D124 for ; Mon, 1 Jun 2026 12:54:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780318492; cv=none; b=qfZd7+8Ljt6OoNKuNwmMQOdOUn8E+FxJ3IF6RbygJ96dveI05NMV/6LPN/dxQTs5P66f1f3fEw9g8PbIdnus7G2u4NgjULakyyI3Otnm0yujoUdJ+99PLoiKHG19y8ngk//waXKsA/0vnj1ppExRGPljkPZdGCHDrtZHagJS2aE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780318492; c=relaxed/simple; bh=IB28kKFx659p3NJpOTcOUNOFj0dbgZvCgBOOn51N2EQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IdrvApHgE0D4jXF/vDUFmyzRbLbDu4PfxYlAgsgzmn/A1/JTRctuW9Pch5cA624Z7CBwt0yVywmL6PDX5Zf2b0DpSebbDItID5GPDF5DMDBdrMTSneC6LHC5kask6TmvwH04tTHSRL8sIVU2cL1LuuOvlexihRPtn34ZLT7YeJQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Li7n5zTZ; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Li7n5zTZ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 478521F00893; Mon, 1 Jun 2026 12:54:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780318489; bh=9p6z7/d9i9lSMpov6UMYK7LeSDt2zL1nMGwV4PCKtI0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Li7n5zTZ2WzGjvmhb9rD5hJLYY2Qt0lzif3YjezZwDVW/IRXFbuB/LqnhG8RoaFoe J0i2o6njeSXCaJoBUydIbH0rnNWfBYKMrCzUDBfvq82IgkWUjzcbivrwlutWr0Y4rP thAyGeDei1gV/Ow1qg+pylzytYC1cXYOJkcw1HwEve1joEFwMKtb1MEEBahpOjtBic oO6aBHH1M9ZHjPiFFHYQvCbh+JXvrzTmRHGDUZqn2//kGX8yUfITjC56k2bbQ4AKr8 IHaU2x5OmbvUFp2gkCpFRkSBe+zgxko9poaEWQIVm1QVQO0ZugLOzli1NLDuCE1C85 WtA/ZD7gPxohQ== From: Michael Walle To: Pratyush Yadav , Michael Walle , Takahiro Kuwano , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Tudor Ambarus Cc: linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 2/3] mtd: spi-nor: don't clear the SNOR_F_4B_OPCODES flag on failure Date: Mon, 1 Jun 2026 14:52:44 +0200 Message-ID: <20260601125438.3481722-3-mwalle@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260601125438.3481722-1-mwalle@kernel.org> References: <20260601125438.3481722-1-mwalle@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This was introduced in commit 548ed6847f530 ("mtd: spi-nor: Add the SNOR_F_4B_OPCODES flag"). It looks like it was the rollback mechanism if parsing the SFDP failed, but was setting that flag first. Nowadays, that flag can only be set if spi_nor_parse_4bait() was successful. IOW, the flags won't be left in an undefined state if parsing SFDP fails. Remove the unneeded code to be able to rework spi_nor_init_params(). Signed-off-by: Michael Walle Reviewed-by: Miquel Raynal Reviewed-by: Takahiro Kuwano Reviewed-by: Tudor Ambarus --- drivers/mtd/spi-nor/core.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c index 4046e137531f..fbf8c2d9c6b5 100644 --- a/drivers/mtd/spi-nor/core.c +++ b/drivers/mtd/spi-nor/core.c @@ -3066,10 +3066,8 @@ static void spi_nor_sfdp_init_params_deprecated(stru= ct spi_nor *nor) =20 memcpy(&sfdp_params, nor->params, sizeof(sfdp_params)); =20 - if (spi_nor_parse_sfdp(nor)) { + if (spi_nor_parse_sfdp(nor)) memcpy(nor->params, &sfdp_params, sizeof(*nor->params)); - nor->flags &=3D ~SNOR_F_4B_OPCODES; - } } =20 /** --=20 2.47.3 From nobody Mon Jun 8 06:36:23 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9ABE737C902 for ; Mon, 1 Jun 2026 12:54:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780318494; cv=none; b=LJcjzMfH31IfTrMzPwVFd5mCFRVrlsDmq5SnmVwU2eTjLXliIBoDbbrZsvA/HL9p2+SgqemzzjBeaTDT1zgGNmQqqc8ow3QpPm5//1rkoWoM79UK4mUZrI8IvwhsJrK3ZSo9uMepvl5GhOYB5c7o0EPXAUkzGw9b0rA9dO/fFRU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780318494; c=relaxed/simple; bh=I0cOtOhTt01MCM1F6HHVcVbJS9hiLVJdlLspnP6bPnU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bBL/EJVWZWWqqRbwUa6cMCuR8iFc8GidgIEHvsxjwN+gc1J4/AYZbXg/M0zjLEEKpme//KSbdQYGEKLfiWw2z/OBtOmeilv6qsyOkWRrQycb06bXOhvS24g2UD/3n8530agkpFmZdL+M7ZO6VMr+v0PqLdnVasm2BlfZHiPCpKQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=V1i8/bYB; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="V1i8/bYB" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7D14D1F00898; Mon, 1 Jun 2026 12:54:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780318491; bh=++KZjmDI8jwFu2xNTmZLajhpDKSYGvFyfbw9tpfvy6s=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=V1i8/bYBs+BApXRZwg0GLhzZ9uESHGg83xJ4ah7tarpeCzSckKe9TCiPgaxjuARo2 grqttMQWtEWA51N4qhryBZHAc536WCHte1qunfW9atNC+v/fuFV1j/L0hw8K/I0ka9 zqMIzvqFfDZCq1kWtPdZZsUIcUAKoac0xD0//pfF3Tc5aiZMz87RnPdJzyBCRQUgK9 WERACfD9B3cegQYflaESxxG6OS32eFVh4dt2YyInVnCK56ZlXjWRTdQA9DRlHbw4dl UnXUAoMik5aheix3C2/0bAvrpK85e+JboneYB/S3TlhWspoJVcW8Qsv/Mdjr9cog7T 8H+bgsM9NXExA== From: Michael Walle To: Pratyush Yadav , Michael Walle , Takahiro Kuwano , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Tudor Ambarus Cc: linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 3/3] mtd: spi-nor: rework flash parameter initialization Date: Mon, 1 Jun 2026 14:52:45 +0200 Message-ID: <20260601125438.3481722-4-mwalle@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260601125438.3481722-1-mwalle@kernel.org> References: <20260601125438.3481722-1-mwalle@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rework how the flash parameters are initialized. It used to make a difference whether a flash is in the in-kernel database, whether it supports multi I/O and so on. Recently, that makes more and more problems because flash IDs are reused among legacy flashes (w/o SFDP support) and newer flashes [1,2,3,4]. Simplify the whole parameter initialization, by starting with the parameters we have in the in-kernel database and the try to parse SFDP (and let it override any settings). [1] https://lore.kernel.org/linux-mtd/CAAyq3SYX9UPwhC_Ume_S2yxhQwimRvB=3DY6= O_+FFqokhNmw7jQg@mail.gmail.com/ [2] https://lore.kernel.org/linux-mtd/DGB4745HRCFI.1DRYTHXURWZJO@kernel.org/ [3] https://lore.kernel.org/linux-mtd/DD10GE4EOCD7.CPTN7198QFUV@kernel.org/ [4] https://lore.kernel.org/linux-mtd/DD6SI06QNEE4.2YCRTWJHEAAQM@kernel.org/ Signed-off-by: Michael Walle Reviewed-by: Tudor Ambarus --- drivers/mtd/spi-nor/core.c | 65 +++++++++++++------------------------- drivers/mtd/spi-nor/core.h | 1 - 2 files changed, 22 insertions(+), 44 deletions(-) diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c index fbf8c2d9c6b5..67e0377b606f 100644 --- a/drivers/mtd/spi-nor/core.c +++ b/drivers/mtd/spi-nor/core.c @@ -2868,11 +2868,10 @@ static void spi_nor_manufacturer_init_params(struct= spi_nor *nor) =20 /** * spi_nor_no_sfdp_init_params() - Initialize the flash's parameters and - * settings based on nor->info->sfdp_flags. This method should be called o= nly by - * flashes that do not define SFDP tables. If the flash supports SFDP but = the - * information is wrong and the settings from this function can not be ret= rieved - * by parsing SFDP, one should instead use the fixup hooks and update the = wrong - * bits. + * settings based on nor->info->sfdp_flags. + * If the flash supports SFDP but the information is wrong and the setting= s from + * this function can not be retrieved by parsing SFDP, one should instead = use + * the fixup hooks and update the wrong bits. * @nor: pointer to a 'struct spi_nor'. */ static void spi_nor_no_sfdp_init_params(struct spi_nor *nor) @@ -3053,43 +3052,25 @@ static int spi_nor_late_init_params(struct spi_nor = *nor) } =20 /** - * spi_nor_sfdp_init_params_deprecated() - Deprecated way of initializing = flash - * parameters and settings based on JESD216 SFDP standard. + * spi_nor_try_parse_sfdp() - Tries to parse flash parameters based + * on JESD216 SFDP standard. * @nor: pointer to a 'struct spi_nor'. * * The method has a roll-back mechanism: in case the SFDP parsing fails, t= he - * legacy flash parameters and settings will be restored. + * flash parameters and settings will be restored. */ -static void spi_nor_sfdp_init_params_deprecated(struct spi_nor *nor) +static int spi_nor_try_parse_sfdp(struct spi_nor *nor) { struct spi_nor_flash_parameter sfdp_params; + int ret; =20 memcpy(&sfdp_params, nor->params, sizeof(sfdp_params)); =20 - if (spi_nor_parse_sfdp(nor)) + ret =3D spi_nor_parse_sfdp(nor); + if (ret) memcpy(nor->params, &sfdp_params, sizeof(*nor->params)); -} - -/** - * spi_nor_init_params_deprecated() - Deprecated way of initializing flash - * parameters and settings. - * @nor: pointer to a 'struct spi_nor'. - * - * The method assumes that flash doesn't support SFDP so it initializes fl= ash - * parameters in spi_nor_no_sfdp_init_params() which later on can be overw= ritten - * when parsing SFDP, if supported. - */ -static void spi_nor_init_params_deprecated(struct spi_nor *nor) -{ - spi_nor_no_sfdp_init_params(nor); =20 - spi_nor_manufacturer_init_params(nor); - - if (nor->info->no_sfdp_flags & (SPI_NOR_DUAL_READ | - SPI_NOR_QUAD_READ | - SPI_NOR_OCTAL_READ | - SPI_NOR_OCTAL_DTR_READ)) - spi_nor_sfdp_init_params_deprecated(nor); + return ret; } =20 /** @@ -3152,7 +3133,8 @@ static void spi_nor_init_default_params(struct spi_no= r *nor) * * 1/ Default flash parameters initialization. The initializations are done * based on nor->info data: - * spi_nor_info_init_params() + * spi_nor_init_default_params() + * spi_nor_no_sfdp_init_params() * * which can be overwritten by: * 2/ Manufacturer flash parameters initialization. The initializations are @@ -3163,7 +3145,7 @@ static void spi_nor_init_default_params(struct spi_no= r *nor) * which can be overwritten by: * 3/ SFDP flash parameters initialization. JESD216 SFDP is a standard and * should be more accurate that the above. - * spi_nor_parse_sfdp() or spi_nor_no_sfdp_init_params() + * spi_nor_try_parse_sfdp() * * Please note that there is a ->post_bfpt() fixup hook that can overwr= ite * the flash parameters and settings immediately after parsing the Basic @@ -3189,17 +3171,14 @@ static int spi_nor_init_params(struct spi_nor *nor) return -ENOMEM; =20 spi_nor_init_default_params(nor); + spi_nor_no_sfdp_init_params(nor); + spi_nor_manufacturer_init_params(nor); =20 - if (spi_nor_needs_sfdp(nor)) { - ret =3D spi_nor_parse_sfdp(nor); - if (ret) { - dev_err(nor->dev, "BFPT parsing failed. Please consider using SPI_NOR_S= KIP_SFDP when declaring the flash\n"); - return ret; - } - } else if (nor->info->no_sfdp_flags & SPI_NOR_SKIP_SFDP) { - spi_nor_no_sfdp_init_params(nor); - } else { - spi_nor_init_params_deprecated(nor); + ret =3D spi_nor_try_parse_sfdp(nor); + if (ret && spi_nor_needs_sfdp(nor)) { + dev_err(nor->dev, + "SFDP parsing failed. You need to manually declare the flash parameters= .\n"); + return ret; } =20 ret =3D spi_nor_late_init_params(nor); diff --git a/drivers/mtd/spi-nor/core.h b/drivers/mtd/spi-nor/core.h index 2ebc5c3caca1..3d7c31bff5cb 100644 --- a/drivers/mtd/spi-nor/core.h +++ b/drivers/mtd/spi-nor/core.h @@ -548,7 +548,6 @@ struct flash_info { #define SPI_NOR_HAS_CMP BIT(10) =20 u8 no_sfdp_flags; -#define SPI_NOR_SKIP_SFDP BIT(0) #define SECT_4K BIT(1) #define SPI_NOR_DUAL_READ BIT(3) #define SPI_NOR_QUAD_READ BIT(4) --=20 2.47.3