From nobody Tue Sep 29 00:36:44 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 427A940B0E0 for ; Fri, 14 Aug 2026 08:12:29 +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=1786695150; cv=none; b=a7MYbKIqYzaIIAiKRObtFLgmCqfES7T0dfOStTcH/+I8bCcpqSDw4/TYm4owXDwOEZkEYT+1J/cNsi3c4AeA3mUxDR60ZEcs/KqXvto6rT/sXwNhgoiSXoQclkFGS1XHMUf6xLYeASkDGp3FyHyDQDQpJ/w4rk+regrDdFhoh2w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786695150; c=relaxed/simple; bh=A1sqORdZ9erEvAaMVf2iDTbB+8sg0glYgcA1SRT4wfc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=QV8dex9KIwvH+6HbogPcDOfAWn1KuJr2mVDwXmG+o+3oZVyYsmOCtaF3U3Qo8AijYHj99sYv0TjVjj2mYVF5KoRlmwFFlQw6Y78+JcUsqK9xeddO/YWOcZC7m61uLSdnoRtbgL7OBv9h6NMhqr/UZH2J2mxdv3gG6641i7lJvjE= 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=VIjI96hO; dkim=pass (2048-bit key) header.d=atmark-techno.com header.i=@atmark-techno.com header.b=UqmDaVAe; 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="VIjI96hO"; dkim=pass (2048-bit key) header.d=atmark-techno.com header.i=@atmark-techno.com header.b="UqmDaVAe" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=atmark-techno.com; s=gw2_bookworm; t=1786695148; bh=A1sqORdZ9erEvAaMVf2iDTbB+8sg0glYgcA1SRT4wfc=; h=From:Date:Subject:To:Cc:From; b=VIjI96hOW/vsGkjMylSpJwcKHqAxwpk+PU5VkypW70Wgn8TsraazDYO05Z6iNI2Ez KoGHzLX+0omS4/eaRalhGaFJOC5hiH2gynaciMf91EqGva8RI8TOTWTXZ/Q+z3HMDg lRLnbfilWirIrgkMjKFEMWi7IoYvB38A6Td/ttnAVUxW2UvY71QyHdPaebWzWWl+88 wYdHfxPmEZGV98AeDg9OPv6+5G73v8pyAK4DnkXUv/Cw0axqpRePkqzoUW/zkdWvT2 zi/nVxq29X2C/i48GCVuJJLo5FHzLUq6XHOUTHT36HLviLyY6IeeyBkCHc77yLHvpG L4eQ7rYZJPsIA== Received: from gw2.atmark-techno.com (localhost [127.0.0.1]) by gw2.atmark-techno.com (Postfix) with ESMTP id 28E3B64E for ; Fri, 14 Aug 2026 17:12:28 +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=UqmDaVAe; dkim-atps=neutral Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by gw2.atmark-techno.com (Postfix) with ESMTPS id 4F6D864E for ; Fri, 14 Aug 2026 17:12:27 +0900 (JST) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2d122bbc621so25409475ad.0 for ; Fri, 14 Aug 2026 01:12:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=atmark-techno.com; s=google; t=1786695146; x=1787299946; 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=T/aDf3HXh3DvsiSXqp1uIkHdGH2Zwyk40hOwXdkZteY=; b=UqmDaVAema2AE+4LK6ayaUpVCxo3UN3Lr7WB9bxtDI/pMnYmW1D1rLl47hjia3ugRB XHrTLkz2z/JFBQm7dFJyM84BcYfU+ASAPk0Kizh5rUevq3lJg6KhhQadrP6nqE8HYOEB mSy6xj7qctxBja8q+APGWJgllm0MqVgqh0jJOcPTbZUSWSwwVpghv0qLj4R4M+TYy4xk zltSQSGp8hNA9WlWyKc0hNG5F+54B/Q40uHT2k66C1nffByUQQibYWqp8UPpTW95+Qwh FU8md3EEGaFE87GmUy81JvkhByq/jCEzBVXX2maWJ1q564CNR7O6eSDJJ58v8cuAhpne JXCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786695146; x=1787299946; 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=T/aDf3HXh3DvsiSXqp1uIkHdGH2Zwyk40hOwXdkZteY=; b=al4HoiQbtcbExUiuj60ay96xadBdd0fShT8vVHp+HtSKVGwCfxM7tLLoqTVGcnyn+F klSfIZVgcivbbKnyR/E1NtmDaJc83MYIIdm1hjdq0IgdR4f5NZpq5y1M1hiWoXhYzqkG 9DfTj+RRTyro4UR4JHt19QCJc5p1gx8SmTrFbkwJ+afH/Mo4XfWq1qSYafAIaEl4iGDG jokpNQdAWV6Cx0rOz1ATyDsF4h8g7A2s0h4O6DpfUDhcat3TJY4rX3gXmqHU9vhVKl+M rY6c6SnRP4+2NBlCPhyDx3JqUuCZbfmBBjhZcGCQrK5E/S5IAbUZ5t67d+Dta55BM4qI Tzdg== X-Forwarded-Encrypted: i=1; AHgh+RrUvncOlQxZJUv1axip1g5VUDGpNMdi1UM/hJBwTSpXzWQHvfmHvFnnUkGpMyHXZjo5RL46bPPgoWj1L7k=@vger.kernel.org X-Gm-Message-State: AOJu0YwtLrZXRr/u7bRsNmElnj4V0w9x4LUr4aZNJAXWw/gm3k1TH/fb 7EbvViemYi5z3tSWv14E9hAwh9CPMhJxMpqi38MH5bTCq72J57Vq8hqGU/5TjhB5jmqhSgWgvir ud+o1wV6vzmUwT6pC2bWmjuv2bzEMscZnjmCMLCnS5rxQflsGn8uIo8RoHXoqkVQd9Ls= X-Gm-Gg: AR+sD13GijG6BfZBqj5ObBuBLpoqLpI/+QxGwKE9MhHokPjP5tAEcPC3MWcP/MNFBCl 3EXw2WAE1olaHyumU8EuBkG+ZTG1E8cTYei8aFL08kSl1N5dfqsi/bsPgCSte8t/mmsjfcCCHJk IJm/ts0PQQe5NtCRVGmmPsQpkHShtB0RO1u4+Og/OGeba3pfAZMYqVfFo/usPr+sGnfS96jBq9l pUeB0JkVUu9igTb3eWyMCR0e+HIIQEeppKj9cYUsIy9pNCTuGplf6jNe78n1PVLCBUrzV7FCWSW EVxrh5qSXfiLYdWcwFyOA/NPHpdMrrtS0wNpT1BkZfPrSckJG3VMWJ3X0mcZ5A18tqEOhzUyJXV ZnO2+moC/WDRlEl5KVgTZt0xj91ubSF3fBsg2wwW9WsSIWPdg X-Received: by 2002:a17:902:c410:b0:2cf:ca89:4990 with SMTP id d9443c01a7336-2d3b0c9f12cmr46366005ad.17.1786695146266; Fri, 14 Aug 2026 01:12:26 -0700 (PDT) X-Received: by 2002:a17:902:c410:b0:2cf:ca89:4990 with SMTP id d9443c01a7336-2d3b0c9f12cmr46365515ad.17.1786695145753; Fri, 14 Aug 2026 01:12:25 -0700 (PDT) Received: from localhost (sodcd-04p2-40.ppp11.odn.ad.jp. [203.139.65.40]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-2d3aeb887aasm6205455ad.61.2026.08.14.01.12.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Aug 2026 01:12:25 -0700 (PDT) From: Dominique Martinet Date: Fri, 14 Aug 2026 08:12:11 +0000 Subject: [PATCH v3] 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: <20260814-w25n04lw-v3-1-c6a7423ac7d0@atmark-techno.com> X-B4-Tracking: v=1; b=H4sIANrNfmoC/2WOOw+CMBSF/wrpqiWlIIITg5MmJg4OxjiUcpEqb bXlISH8d3mMLjf5ku+cc3tkwQiwaOf0yEAjrNBqBH/tIF4w9QAsspERJTQkkUdxSzeKBGWLfYi 9IMwiPyA5GvW3gVx856rbfWFbp0/g1ZSfjELYSptu3mq8yUNM2etFn46Hbn9ehTlNihrLjJVM4 rQ07qdmJddSuuNBU2lD59j/Nw3FHs4AIN6GhOY8SFglmXnhCnih9FIwDMMPgOjAQPEAAAA= 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=4880; i=dominique.martinet@atmark-techno.com; h=from:subject:message-id; bh=A1sqORdZ9erEvAaMVf2iDTbB+8sg0glYgcA1SRT4wfc=; b=owEBbQKS/ZANAwAKAfKKYH/WjHEHAcsmYgBqfs3o4/qP8LK071nWoP0yW60eAAIQH9VXFMKj2 1FzpRg/H62JAjMEAAEKAB0WIQQoFSiLMD+txr0veJbyimB/1oxxBwUCan7N6AAKCRDyimB/1oxx ByC7D/4zBOCf+4qC4KFHAHL1naBxcoeSq6fTk3KbFQikwBob23ZWcwi2D+zmOJowgiZf5iNkXmU Ed1rtoTOvTQ3VIPCnPM1UsycCXJ5GZEPs21errwzuS5bwh+YwBVUp5xBnSYx2g0azwKrlepH9gf LpWC9pimUQZqJNuuC3fx+EWNlE0fbaRRyriqRSgA6Nj8lYgDU0BLR6eRppZuZrmOi5oypvtLrNF kHn1kCAAOUKm9bAPS5cQILgSy7pwCzWVMdq8l4TyZB55y+3b8jzaEMRpMNGUoOy+mq8sZo93u9E yN0Mj5taOa6aBZkjBl5F9akPSFCruvqS5rY0k3SCEvtSZJki/wT5kckyQAhBFCf/8xLTNxbPjUC sD26Ylmho/bEIZDBl4qoCskvd43BHvD0TqJLPe0QSODjInuYAndKSgYW8RvmtJ8OdK4lpjGa+r+ RwNcmrhB4RWb79eezcOcU3AY9ZiQj83i1xgxvdGtkjtByDesAGT3LcrGiqcZICp0Tq5LvwpM48i tQY2q4PTpFOhI2qrTn7OyRJrzRaGo0UjqaKRuodBQ1nljP0RPWmWh6egkM/U2NlltVg+aUTS7/b Tcn5ltpBaq0wBu/TwvsxYkM3bTwds//ZwMzr2i/QQgppsR7ZsWTT02aXKmvMs/ya9rg0X9IzztP w1jY4ojK9/1ecgg== 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 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 Testwise: - debugfs ooblayout_ecc/ooblayout_free is fine with new version - I still need to check about the high number of ecc errors next week, but I don't think it's likely to be related to this patch so sending ahead... Feel free to wait a bit (there's no hurry on my end for this to get into 7.3; it's fine to skip a cycle as you see fit) - I checked the SPINAND_INFO_OP_VARIANTS and there is no problem with current values for this model. Thanks! -Dominique --- drivers/mtd/nand/spi/winbond.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/drivers/mtd/nand/spi/winbond.c b/drivers/mtd/nand/spi/winbond.c index 9b78c1e6cbc9..171f4c264220 100644 --- a/drivers/mtd/nand/spi/winbond.c +++ b/drivers/mtd/nand/spi/winbond.c @@ -314,10 +314,11 @@ 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) + /* 4 sections for 128 bytes, 8 for 256 */ + if (section >=3D mtd->oobsize / 32) return -ERANGE; =20 - region->offset =3D 64 + (16 * section); + region->offset =3D (mtd->oobsize / 2) + (16 * section); region->length =3D 13; =20 return 0; @@ -326,9 +327,16 @@ 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) + if (section >=3D mtd->oobsize / 32) 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 +776,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