From nobody Mon Sep 28 21:55:00 2026 Received: from gw2.atmark-techno.com (gw2.atmark-techno.com [35.74.137.57]) (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 6449637269B for ; Mon, 17 Aug 2026 05:29:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=35.74.137.57 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786944578; cv=none; b=rVbEqyWH04t5O1UFRkJi8rcFGe77TXkMMzuV4FwIIZB/ZG3KI0xzK7Np8W6FSk5dIWYugpRBO0ewLB+MFAPfWL5eUnpB2Gw0zWUfazJyJuZ9GWzHSQz9bNaJqBofw+wWcm3oerb/NgEaNUU2IsqBxhmJFZ9fGJ//NfbPN+C9aVc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786944578; c=relaxed/simple; bh=3iZDM4mLcwv/ne+GXl+BDDVwwmNFM0uoOVEJ2+ndLXc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=noILtT945dae0TRPlPAIjKTTiJctoq7PiHLKAU1a/WT+bsIzzZk79Pg0eOFlJfUdyLVxqKD3IGlQFfLrcPW8A9mBAoDddB+f+xAlHSg8Z62fRQMcVviM0brBJ7WOsb8uW1DVVQukR2jDkBryVHMTjqMr3NqJqmUI5dvxj4HCuv8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=atmark-techno.com; spf=pass smtp.mailfrom=atmark-techno.com; dkim=pass (2048-bit key) header.d=atmark-techno.com header.i=@atmark-techno.com header.b=NVD91MRq; dkim=pass (2048-bit key) header.d=atmark-techno.com header.i=@atmark-techno.com header.b=Inc72pIt; arc=none smtp.client-ip=35.74.137.57 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=atmark-techno.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=atmark-techno.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=atmark-techno.com header.i=@atmark-techno.com header.b="NVD91MRq"; dkim=pass (2048-bit key) header.d=atmark-techno.com header.i=@atmark-techno.com header.b="Inc72pIt" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=atmark-techno.com; s=gw2_bookworm; t=1786944576; bh=3iZDM4mLcwv/ne+GXl+BDDVwwmNFM0uoOVEJ2+ndLXc=; h=From:Date:Subject:To:Cc:From; b=NVD91MRq8XdhUmbcEnSAhkIbv43LV6OV3bh8qGtb5FMV9QR/68Su8h5O4xXicF6gP Xl7MkIweuNbFGaHbsD739JA1DpIFvco6RIAwYezZlhHjxaqM10B9pkq4Ae8cgYfxA6 R7K3ptGVkOo3SirS4h3oP6IGUY+d6o9u/Cjca4OgcOuLH3aXTdMuliwPp26kzTbEQB Rf8JgAWKMg6uQSsqYiSeIiKarBUjkzYqhlcnD9qjEJ2VJijrrlrXEYZPTucSqAoj3A 6kY71wXBR5JJKvGkYkhyauvBTls/hq45KXHf3Il+qY7CVjjwCvaF2EpCZkaIjo+z9x DI6mtNiOMhImQ== Received: from gw2.atmark-techno.com (localhost [127.0.0.1]) by gw2.atmark-techno.com (Postfix) with ESMTP id 5E19C3B4 for ; Mon, 17 Aug 2026 14:29:36 +0900 (JST) Authentication-Results: gw2.atmark-techno.com; dkim=pass (2048-bit key; unprotected) header.d=atmark-techno.com header.i=@atmark-techno.com header.a=rsa-sha256 header.s=google header.b=Inc72pIt; dkim-atps=neutral Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by gw2.atmark-techno.com (Postfix) with ESMTPS id 9626D36C for ; Mon, 17 Aug 2026 14:29:35 +0900 (JST) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2ce7dff6253so39872445ad.1 for ; Sun, 16 Aug 2026 22:29:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=atmark-techno.com; s=google; t=1786944574; x=1787549374; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:content-type :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to:content-type; bh=O7TkbdcGLdkHt6eRSvx1fZah2d03gqU1YBM0bKNnL54=; b=Inc72pItDUYsRV+5sTxC+zowdqEi7QFYdDWYjkem4hn1W6bAnaC+M0JGgZlaIS6JdF /0Cynn2fzE/4dnbXflpuz3DvoQCcrVsJY4ntrvbvF+PAuR3iJe4d1ybZFwIdwdLMe2Z/ 98MfHDO9yZYaRK5q61ICBXLgQ5V765qI2AC1PoHAcdd2X3GUJVMFzaNaEUf9lCbpPCMv x9VqVmgjPyik+z9l92D9QLTfqLvA8uK/PlGP2mo9w8D7pPYbqGxltqydjAWKUZS5I2Ik ADaDyILat87meRu+KQ7z23tTmZlJ5KMO+6le3qTkCFPBsrz6hfFeHfsUNIaLnmDQKuF2 xaJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786944574; x=1787549374; h=cc:to:message-id:content-transfer-encoding:content-type :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to:content-type; bh=O7TkbdcGLdkHt6eRSvx1fZah2d03gqU1YBM0bKNnL54=; b=O2ZUtojROsWV0FE02EKTt+suRR0YsoGBqHtf6dLr1YtwbiyTBHyfVBEWVjrKYOkdgY GL7Mklv9te/NTCoDs4eHZ92geDB4Q8v9OCUBtWBEitFiMwuv0vG0Gr1V6feSQW7u//ZB v7Yfbwjybk+avuTdHUPv2UhHPkDRKuwaZvTc5HT8DuInBTsix9TsQGFQZ4s2LEIhDpc9 rDPqjEt1ZYDcdCpM2LlsNfZBTDvwWajTBRRF8jPPZ227e7pSdTKzYCsGEYGIKgs38cIC /UaU8GsqEPtJxZqbDB8bOM1vmKk9aU81czP8PprWmH1rpzrfe09z1rROO5bVkj0y9KGZ AUkA== X-Forwarded-Encrypted: i=1; AHgh+RpU+qMsurTUCgTSHd5nDrWO+hUfMfK6RTjhESVj09Eu+QEXREhUGP3rM9Jn3gd4UTO6U0wVPxbt7LZCJ6Q=@vger.kernel.org X-Gm-Message-State: AOJu0Yw4q3JmW09aovhyMmpdlQ8AFNJKavukIutNxQ/OI4zejDMvZS0w kPgAfSeWfRZ0pZ0Olhshq0y5ICofdwnyEcgT3MlrVBtp5zs0b+gzBq/Cv9DzS8fi+oFA/J32kll tEe/0lql6NjAVsBPExfII2u5OQGmRVv+rcXmuVvrTZ/fHbCiwA2l4Gp8Ns+9DI3HZydoG097ICy w= X-Gm-Gg: AR+sD103tDSzf52SB004NKiDE1EevS/lhvK1ma9oAfmd3vZnmP4tGJ6SjZlhZvtNFzf 4voeLKxqQ4qvJt6faeC77GCH2fFGshljuAF1i/DZdt3oHxdmNQMm4Z/kSZwlFizmZQvf18N0i/b 2CiFwxVcC0APd8shc21TbPE7J9QvEzfo2MSdH8GRm7gP992l+vzmh7tal/fWszEwZD/w2epWvJm qKPbvA3S61cXkcDuAwRs7cyqSOdh9lvFLVA1H6rDQBnyXySCdhMUPFMOqY91tASbkDYvRVeOCLb dY7hdmx0yOCDv7xOWbv8EUl8YQwRar+28WMc16FKatF72Xx3SiRG2/lHz+raakk9R14nzsEPsOd m90TUsZG4EzHStivgOHFg1dgmivMfQnvujWeTWsii6u0K017e X-Received: by 2002:a17:903:28f:b0:2cc:db7a:251 with SMTP id d9443c01a7336-2d37f5cdcebmr300787335ad.2.1786944574449; Sun, 16 Aug 2026 22:29:34 -0700 (PDT) X-Received: by 2002:a17:903:28f:b0:2cc:db7a:251 with SMTP id d9443c01a7336-2d37f5cdcebmr300786845ad.2.1786944573952; Sun, 16 Aug 2026 22:29:33 -0700 (PDT) Received: from localhost (sodcd-04p2-40.ppp11.odn.ad.jp. [203.139.65.40]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-2d3aeb88bddsm29121725ad.63.2026.08.16.22.29.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 16 Aug 2026 22:29:33 -0700 (PDT) From: Dominique Martinet Date: Mon, 17 Aug 2026 05:29:17 +0000 Subject: [PATCH v4] mtd: spinand: winbond: add support for W25N04LW Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260817-w25n04lw-v4-1-1b19c2a629e5@atmark-techno.com> X-B4-Tracking: v=1; b=H4sIACycgmoC/23OsU7DMBAG4FepvIIr52yclqkDE0hIDAwIMVztC zHENthJSlXl3XHCQCVYTvql/767E8uUHGV2vTqxRKPLLoYS1OWKmRbDK3FnS2YgQItNBfwAV0G o7sAlbSul7UYq0bBS/0jUuK+Fen75yXnYv5Hp5/250brcx3Rcbo3V3GMY8tNjvL+7Pd48XOgGd u3AvcUOPd93af05YGei9+sy2IyOsKz9/WYEXnFLRNtaC2iM2mHvMb3znkwb4i8gzwF1BsgCGI2 1AommtuI/YJqmb3iBfqQyAQAA X-Change-ID: 20260812-w25n04lw-3e9146d8340f To: Miquel Raynal , Richard Weinberger , Md Sadre Alam , Vignesh Raghavendra Cc: linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, Daisuke Mizobuchi , Dominique Martinet X-Mailer: b4 0.16-dev-a9e92 X-Developer-Signature: v=1; a=openpgp-sha256; l=4750; i=dominique.martinet@atmark-techno.com; h=from:subject:message-id; bh=3iZDM4mLcwv/ne+GXl+BDDVwwmNFM0uoOVEJ2+ndLXc=; b=owEBbQKS/ZANAwAKAfKKYH/WjHEHAcsmYgBqgpw1lNIPCRPj3G1fATGm1+gklsHgvmGw8OLfv hxfeA4e+eGJAjMEAAEKAB0WIQQoFSiLMD+txr0veJbyimB/1oxxBwUCaoKcNQAKCRDyimB/1oxx BxQAEACdMB8mHB2Fhg7RluYwVQyzD6ze15C4PykgWX0Mf3QqszOgNuidiUIrBl2qfgvwaqx4Xkl BNdTQsi2m/xHjDuUtx11HD/Vno17fYlK0IqVuNN1xze66KA/5MyQbcWGhmBuLYhWlBPap2znxl5 90aPunWL56Z7pCfr1IiyElvO2KMy87i9F58HDT16DPaqW2l2wBz878b3tAjn+oRApgOQLXptvCX /6BZq9TtB2RWEN7dWnPXUHundBZ90NPYq4OSSNXJ3MMp+ObUcA+zgmC904rBPbiy3Bqyz/HkG3x gxDhgoA8tNiaLA0PtBt5BWa72TKfOa1xE57jA0A4vp5R7ngYftsEgTfbE+XruCeJRwqlXGqZzuy T5d9aqyJERqfIa9phFEdnM8andmTiNCwbOxo7/d3UFZYH42Jc32rrwM7krM8Io36QFVdlGbRq25 0RaQ4OFG91khFPX9dKX0DF6sG34EVNeakHdjU+jHRQX8/Ls2l7Uvk9+JnIaebcn9hCHPGimGo1w KHgaG3jZTw8UvEsLi73knW8dqPfG93FFqpQpnK2tLPjMgdPYXqmG72JVPCcAXLhynFxI+4O/frw MtmXELQ49/gpAmTeZnYWONjNJtltPyPfCUkYmJjxmlrkgNdzPfreXV/Wz/emoFuOjMtPx9umgQJ Yb8T1PqBFnyFtKw== X-Developer-Key: i=dominique.martinet@atmark-techno.com; a=openpgp; fpr=2815288B303FADC6BD2F7896F28A607FD68C7107 Add support for Winbond W25N04LW 4Gbit SPI-NAND: > 1.8V 4G-bit > Raw serial SLC NAND flash memory > Dual/Quad SPI with 104MHz > buffer read, continuous read & sequential read Highlights copied from datasheet: =E2=80=93 Page size: 4,352 Bytes (4096 + 256 Bytes) =E2=80=93 Block size: 64 pages (256K + 16K Bytes) - Built-in 8-Bit ECC for memory array =E2=80=93 ECC status bits indicate ECC results =E2=80=93 Bad Block Management and LUT access =E2=80=93 Software and Hardware Write-Protect =E2=80=93 Power Supply Lock-Down and OTP protection =E2=80=93 Unique ID and Parameter page =E2=80=93 Ten 4KB OTP pages per die =E2=80=93 Read Level Setting for Read Retry The 4096+256 byte page layout is as follow: - 4096 bytes ECC protected "main memory array", subdivided in 8 512 bytes sectors - 128 bytes spare array, subdivided in 8 16 bytes sectors as follow: - 2 bytes bad block marker (no ECC protection) - 2 bytes "user data II" (no ECC protection) - 12 bytes "user data I" (ECC protected) - 128 bytes parity array, subdivided in 8 16 bytes sectors: - 13 bytes ECC for main data and user data - 3 unused bytes This commit does not support most advanced features such as continuous read, LUT management and OTP pages, and only provides basic usage. OOB layout was kept compatible with previous models (exposing both user data I and II), dependent on mtd->oobsize. Co-developed-by: Daisuke Mizobuchi Signed-off-by: Daisuke Mizobuchi Signed-off-by: Dominique Martinet --- Changes in v4: - Updated ooblayout function to if oobsize =3D 256 instead of use oobsize directly - Link to v3: https://patch.msgid.link/20260814-w25n04lw-v3-1-c6a7423ac7d0@= atmark-techno.com Changes in v3: - Fixed Co-authored-by / comment style - Merged ooblayout helper with w25n02kv_ooblayout, using mtd->oobsize (with an extra comment describing User Data I/II, but keeping current behaviour) - Link to v2: https://patch.msgid.link/20260812-w25n04lw-v2-1-deee97602fc4@= atmark-techno.com Changes in v2: - Link to v1: https://patch.msgid.link/ansYUoNKJyDQ+6f2@hu-mdalam-blr.qualc= omm.com - fixed oob layout - fixed NAND_MEMORG oob size --- drivers/mtd/nand/spi/winbond.c | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/drivers/mtd/nand/spi/winbond.c b/drivers/mtd/nand/spi/winbond.c index 9b78c1e6cbc9..a1807fa9ae03 100644 --- a/drivers/mtd/nand/spi/winbond.c +++ b/drivers/mtd/nand/spi/winbond.c @@ -314,10 +314,18 @@ static int w25n01kv_ooblayout_ecc(struct mtd_info *mt= d, int section, static int w25n02kv_ooblayout_ecc(struct mtd_info *mtd, int section, struct mtd_oob_region *region) { - if (section > 3) + int num_sections =3D 4; + int offset =3D 64; + + if (mtd->oobsize =3D=3D 256) { + num_sections =3D 8; + offset =3D 128; + } + + if (section >=3D num_sections) return -ERANGE; =20 - region->offset =3D 64 + (16 * section); + region->offset =3D offset + (16 * section); region->length =3D 13; =20 return 0; @@ -326,9 +334,21 @@ static int w25n02kv_ooblayout_ecc(struct mtd_info *mtd= , int section, static int w25n02kv_ooblayout_free(struct mtd_info *mtd, int section, struct mtd_oob_region *region) { - if (section > 3) + int num_sections =3D 4; + + if (mtd->oobsize =3D=3D 256) + num_sections =3D 8; + + if (section >=3D num_sections) return -ERANGE; =20 + /* + * For at least W25N04KW and W25N04LW, this region is actually + * split in two: + * ECC-protected "User Data I" at + 4 offset, length 12 + * unprotected "User Data II" at + 2 offset, length 2 + * This returns the full region for backwards compatibility. + */ region->offset =3D (16 * section) + 2; region->length =3D 14; =20 @@ -768,6 +788,15 @@ static const struct spinand_info winbond_spinand_table= [] =3D { &update_cache_variants), 0, SPINAND_ECCINFO(&w25n02kv_ooblayout, w25n02kv_ecc_get_status)), + SPINAND_INFO("W25N04LW", /* 1.8V */ + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xb2, 0x23), + NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 1, 1, 1), + NAND_ECCREQ(8, 512), + SPINAND_INFO_OP_VARIANTS(&read_cache_variants, + &write_cache_variants, + &update_cache_variants), + 0, + SPINAND_ECCINFO(&w25n02kv_ooblayout, w25n02kv_ecc_get_status)), SPINAND_INFO("W35N04JW", /* 1.8V */ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xdf, 0x23), NAND_MEMORG(1, 4096, 128, 64, 512, 10, 1, 4, 1), --- base-commit: db2ddb87143519e20a95aa36c60b36107b736a58 change-id: 20260812-w25n04lw-3e9146d8340f Best regards, -- =20 Dominique Martinet