Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2194416/?format=api
{ "id": 2194416, "url": "http://patchwork.ozlabs.org/api/patches/2194416/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/patch/20260208212624.3413494-7-festevam@gmail.com/", "project": { "id": 18, "url": "http://patchwork.ozlabs.org/api/projects/18/?format=api", "name": "U-Boot", "link_name": "uboot", "list_id": "u-boot.lists.denx.de", "list_email": "u-boot@lists.denx.de", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260208212624.3413494-7-festevam@gmail.com>", "list_archive_url": null, "date": "2026-02-08T21:26:23", "name": "[v2,6/7] spl: add SPI NAND support via MTD in SPL", "commit_ref": null, "pull_url": null, "state": "changes-requested", "archived": false, "hash": "472090a3be56f42e217d585fdfd98ee2d101f0a8", "submitter": { "id": 6978, "url": "http://patchwork.ozlabs.org/api/people/6978/?format=api", "name": "Fabio Estevam", "email": "festevam@gmail.com" }, "delegate": { "id": 93623, "url": "http://patchwork.ozlabs.org/api/users/93623/?format=api", "username": "kevery", "first_name": "Kever", "last_name": "Yang", "email": "ykai007@gmail.com" }, "mbox": "http://patchwork.ozlabs.org/project/uboot/patch/20260208212624.3413494-7-festevam@gmail.com/mbox/", "series": [ { "id": 491441, "url": "http://patchwork.ozlabs.org/api/series/491441/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/list/?series=491441", "date": "2026-02-08T21:26:17", "name": "ARM: Add RV1103B Omega4 board support", "version": 2, "mbox": "http://patchwork.ozlabs.org/series/491441/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2194416/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2194416/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<u-boot-bounces@lists.denx.de>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20230601 header.b=hPFYMEVN;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de\n (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de;\n envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org)", "phobos.denx.de;\n dmarc=pass (p=none dis=none) header.from=gmail.com", "phobos.denx.de;\n spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de", "phobos.denx.de;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.b=\"hPFYMEVN\";\n\tdkim-atps=neutral", "phobos.denx.de;\n dmarc=pass (p=none dis=none) header.from=gmail.com", "phobos.denx.de;\n spf=pass smtp.mailfrom=festevam@gmail.com" ], "Received": [ "from phobos.denx.de (phobos.denx.de\n [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4f8LWq3BjQz1xvc\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 09 Feb 2026 08:27:35 +1100 (AEDT)", "from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id F099283CB1;\n\tSun, 8 Feb 2026 22:26:54 +0100 (CET)", "by phobos.denx.de (Postfix, from userid 109)\n id 763DA83C91; Sun, 8 Feb 2026 22:26:53 +0100 (CET)", "from mail-yw1-x1130.google.com (mail-yw1-x1130.google.com\n [IPv6:2607:f8b0:4864:20::1130])\n (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits))\n (No client certificate requested)\n by phobos.denx.de (Postfix) with ESMTPS id 45B1E83642\n for <u-boot@lists.denx.de>; Sun, 8 Feb 2026 22:26:51 +0100 (CET)", "by mail-yw1-x1130.google.com with SMTP id\n 00721157ae682-790884840baso34666497b3.0\n for <u-boot@lists.denx.de>; Sun, 08 Feb 2026 13:26:51 -0800 (PST)", "from fabio-Precision-3551..\n ([2804:14c:485:4b61:5d9f:efd7:6c6a:abf8])\n by smtp.gmail.com with ESMTPSA id\n 00721157ae682-7952a085999sm75229377b3.25.2026.02.08.13.26.47\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Sun, 08 Feb 2026 13:26:49 -0800 (PST)" ], "X-Spam-Checker-Version": "SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de", "X-Spam-Level": "", "X-Spam-Status": "No, score=-1.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,\n DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_GMAIL_RCVD,FREEMAIL_FROM,\n RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=no\n autolearn_force=no version=3.4.2", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20230601; t=1770586010; x=1771190810; darn=lists.denx.de;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=qIcqjMZQVcp74e+YyccAAjSBAEwKwg+ufhESWqdwYSs=;\n b=hPFYMEVNHuJho4syyesF9UVfmx97Xz7h7Ftw7HFR+sBHIfYtdBKB2YkUPZzoSi52XF\n pCp3LDsZRohrRzYJyf0FlCmxSYD5YaEfrtTR2rvWtpMuQ2PGRg0IwvvsmUXSpy+e3XlK\n Tfb6yJxziMl162yDYbjtDcjWuploOv5ILf0rBBdKvY8Q5yDKgMu+hSQiVtNznoNkm6mw\n 1CtZGTy9CwbBufy7vQkM5GtCHpzkEUa+Bxu056QDQB05XBjtreabuggfmUYgcS/ihhLU\n 5ulu1TLF1jNFYo9tlhlpnX2o1ddpGXxOgLwzEb3TpCYyM7pZLuAG9zz5IMRM9dEU0siF\n VMzQ==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1770586010; x=1771190810;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=qIcqjMZQVcp74e+YyccAAjSBAEwKwg+ufhESWqdwYSs=;\n b=rkYRnXfL8Kn2knTPDvCGLq6r/zXPhIeUh/Z8u7TASX5a4kLPXdXkVIyZjv3ASVl1z1\n yKINVTleuftEPDlumxph4bsDqlkTjEVDzU1RzQYw2N4WtAorMB/VpY0IC1JaEeXAx5Dd\n wFS+628AaMK2yt8TpxELR2h4nSH7vishvkRraNroTc4WwPAPmieRmUMhCjmcdOAwU0e0\n nE+zgS7ACV0KCloBaQDAtqg7ZbfnX7QRmUXMUhg5o8DxunRqP9NX7iP3blMmVIxsEGRX\n 78mN41G8/F+FPIpO69DtxD0UWx5F6wIrhoqB2xdRLgZgkORawG8rxIR/323sngzl5eyC\n 5ZsQ==", "X-Forwarded-Encrypted": "i=1;\n AJvYcCV8iQ0Xd2puJXZprefx5nSFkOg2kP3+y3DEK47UTE0Q+5w2ZxoSCCkpI/lA2v8g6txL7plgBOs=@lists.denx.de", "X-Gm-Message-State": "AOJu0YyKbBIXruUysg1N+nWCujiaxsnKXxHJjSjzAHhkz4gKaePHfGYI\n 5fixaAQWH2Q9CDgrGabIvf1PlMlP1v6iYtN3QSqJ2rPm4kQmzaCb388cy6H5CQ==", "X-Gm-Gg": "AZuq6aJ5rN234PIOZ5C/CdQH8di5FrZUkluP40eiXavy6Wd3CjLq++TGwXDliRpy6VB\n bmpYgVKzO3fFKdcAzGbkJ46cnP9LmtuyMPbxG5G/Yd0M/6VS5+ULtt9gexuK1zohoJnVGU/Z3wP\n R1mGsmp3FxvWAFagok/y/UYnS58WbTvmONcU7toD+yg6sOKlIQYr9/ctHt6gfP8UjNmL+UB0WZc\n sp4frZRh12U9ZwPIKEHt3KGUlmWaHIjsdm/rlv3r4tf04IO+fErFvvS5X8PEnhsJGwoZu6XLDye\n bTyyTpXEiLXaitLdZpRWsTTtklt1k2B2NhVibxLcXmikexNy6JL65jtFY/QYf1FR03KlB+qj+vQ\n gfZPo4XkN1eNE4lJqwEvlrriRTEO1Q75Qwr5hLO7z0+lhRXHIUKKTSMOoAS69PAMfzdeu7Nxr9W\n au3C4tw7Zxwu5chkiWpYS2Kj7QEQBX00T9Cnk=", "X-Received": "by 2002:a05:690c:e3ee:b0:796:3b25:b188 with SMTP id\n 00721157ae682-7963b25d22emr32224187b3.34.1770586010009;\n Sun, 08 Feb 2026 13:26:50 -0800 (PST)", "From": "Fabio Estevam <festevam@gmail.com>", "To": "kever.yang@rock-chips.com", "Cc": "trini@konsulko.com, jonas@kwiboo.se, u-boot@lists.denx.de,\n Fabio Estevam <festevam@nabladev.com>", "Subject": "[PATCH v2 6/7] spl: add SPI NAND support via MTD in SPL", "Date": "Sun, 8 Feb 2026 18:26:23 -0300", "Message-Id": "<20260208212624.3413494-7-festevam@gmail.com>", "X-Mailer": "git-send-email 2.34.1", "In-Reply-To": "<20260208212624.3413494-1-festevam@gmail.com>", "References": "<20260208212624.3413494-1-festevam@gmail.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-BeenThere": "u-boot@lists.denx.de", "X-Mailman-Version": "2.1.39", "Precedence": "list", "List-Id": "U-Boot discussion <u-boot.lists.denx.de>", "List-Unsubscribe": "<https://lists.denx.de/options/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=unsubscribe>", "List-Archive": "<https://lists.denx.de/pipermail/u-boot/>", "List-Post": "<mailto:u-boot@lists.denx.de>", "List-Help": "<mailto:u-boot-request@lists.denx.de?subject=help>", "List-Subscribe": "<https://lists.denx.de/listinfo/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=subscribe>", "Errors-To": "u-boot-bounces@lists.denx.de", "Sender": "\"U-Boot\" <u-boot-bounces@lists.denx.de>", "X-Virus-Scanned": "clamav-milter 0.103.8 at phobos.denx.de", "X-Virus-Status": "Clean" }, "content": "From: Fabio Estevam <festevam@nabladev.com>\n\nAdd support for booting U-Boot SPL from SPI NAND devices\nusing the MTD subsystem.\n\n - Introduce CONFIG_SPL_SPI_NAND_LOAD to enable SPL loading\n from SPI NAND flash.\n - Implement spl_spi_nand.c as a dedicated SPL loader that\n reads the FIT image from SPI NAND via MTD.\n - Update common/spl/Kconfig and Makefiles to include the\n new loader in SPL builds.\n - Adjust drivers/mtd/Makefile and drivers/mtd/nand/Makefile\n to build the necessary SPI NAND MTD objects only when\n CONFIG_SPL_SPI_NAND_LOAD is enabled, avoiding size impact\n on other boards.\n\nThis allows boards like the Omega4 RV1103 to boot SPL directly\nfrom SPI NAND, keeping the SPL small and avoiding unnecessary\ninclusion of SPI NOR code.\n\nSigned-off-by: Fabio Estevam <festevam@nabladev.com>\n---\nChanges since v1:\n- None.\n\n common/spl/Kconfig | 10 ++++-\n common/spl/Makefile | 1 +\n common/spl/spl_spi_nand.c | 82 +++++++++++++++++++++++++++++++++++++++\n drivers/mtd/Makefile | 1 +\n drivers/mtd/nand/Makefile | 13 ++++++-\n 5 files changed, 105 insertions(+), 2 deletions(-)\n create mode 100644 common/spl/spl_spi_nand.c", "diff": "diff --git a/common/spl/Kconfig b/common/spl/Kconfig\nindex 2998b7acb75f..126855b804ce 100644\n--- a/common/spl/Kconfig\n+++ b/common/spl/Kconfig\n@@ -1576,13 +1576,21 @@ config SPL_SPI_LOAD\n \t Enable support for loading next stage, U-Boot or otherwise, from\n \t SPI NOR in U-Boot SPL.\n \n+config SPL_SPI_NAND_LOAD\n+\tbool \"Support loading from SPI NAND flash\"\n+\tdepends on SPL\n+\tdepends on MTD && DM_MTD\n+\thelp\n+\t Enable support for loading next stage, U-Boot or otherwise, from\n+\t SPI NAND in U-Boot SPL.\n+\n endif # SPL_SPI_FLASH_SUPPORT\n \n config SYS_SPI_U_BOOT_OFFS\n \thex \"address of u-boot payload in SPI flash\"\n \tdefault 0x8000 if ARCH_SUNXI\n \tdefault 0x0\n-\tdepends on SPL_SPI_LOAD || SPL_SPI_SUNXI\n+\tdepends on SPL_SPI_LOAD || SPL_SPI_NAND_LOAD || SPL_SPI_SUNXI\n \thelp\n \t Address within SPI-Flash from where the u-boot payload is fetched\n \t from.\ndiff --git a/common/spl/Makefile b/common/spl/Makefile\nindex 4c9482bd3096..4628902e7e31 100644\n--- a/common/spl/Makefile\n+++ b/common/spl/Makefile\n@@ -35,6 +35,7 @@ obj-$(CONFIG_$(PHASE_)NVME) += spl_nvme.o\n obj-$(CONFIG_$(PHASE_)SEMIHOSTING) += spl_semihosting.o\n obj-$(CONFIG_$(PHASE_)DFU) += spl_dfu.o\n obj-$(CONFIG_$(PHASE_)SPI_LOAD) += spl_spi.o\n+obj-$(CONFIG_$(PHASE_)SPI_NAND_LOAD) += spl_spi_nand.o\n obj-$(CONFIG_$(PHASE_)RAM_SUPPORT) += spl_ram.o\n obj-$(CONFIG_$(PHASE_)USB_SDP_SUPPORT) += spl_sdp.o\n endif\ndiff --git a/common/spl/spl_spi_nand.c b/common/spl/spl_spi_nand.c\nnew file mode 100644\nindex 000000000000..20b877f75a05\n--- /dev/null\n+++ b/common/spl/spl_spi_nand.c\n@@ -0,0 +1,82 @@\n+// SPDX-License-Identifier: GPL-2.0+\n+\n+/*\n+ * SPL loader for SPI NAND devices using the MTD subsystem.\n+ *\n+ * Based on spl_spi.c, which is:\n+ *\n+ * Copyright (C) 2011 OMICRON electronics GmbH\n+ *\n+ * based on drivers/mtd/nand/raw/nand_spl_load.c\n+ *\n+ * Copyright (C) 2011\n+ * Heiko Schocher, DENX Software Engineering, hs@denx.de.\n+ */\n+\n+#include <config.h>\n+#include <image.h>\n+#include <log.h>\n+#include <errno.h>\n+#include <spl.h>\n+#include <spl_load.h>\n+#include <asm/io.h>\n+#include <dm/device_compat.h>\n+#include <dm/ofnode.h>\n+#include <dm/uclass.h>\n+#include <mtd.h>\n+\n+static struct mtd_info *spl_spi_nand_get_mtd(void)\n+{\n+\tstruct udevice *dev;\n+\tint ret;\n+\n+\tfor (ret = uclass_first_device_err(UCLASS_MTD, &dev);\n+\t dev;\n+\t ret = uclass_next_device_err(&dev)) {\n+\t\tif (ret)\n+\t\t\tcontinue;\n+\t\tif (device_is_compatible(dev, \"spi-nand\"))\n+\t\t\treturn dev_get_uclass_priv(dev);\n+\t}\n+\n+\treturn NULL;\n+}\n+\n+static ulong spl_spinand_fit_read(struct spl_load_info *load, ulong offs,\n+\t\t\t\t ulong size, void *buf)\n+{\n+\tstruct mtd_info *mtd = load->priv;\n+\tsize_t retlen = 0;\n+\tint ret;\n+\n+\tret = mtd_read(mtd, offs, size, &retlen, buf);\n+\tif (ret && ret != -EUCLEAN) {\n+\t\tprintf(\"SPI NAND read failed offs=0x%lx size=0x%lx ret=%d\\n\",\n+\t\t offs, size, ret);\n+\t\treturn 0;\n+\t}\n+\tif (retlen != size)\n+\t\treturn 0;\n+\n+\treturn retlen;\n+}\n+\n+static int spl_spinand_load_image(struct spl_image_info *spl_image,\n+\t\t\t\t struct spl_boot_device *bootdev)\n+{\n+\tstruct spl_load_info load;\n+\tstruct mtd_info *mtd;\n+\n+\tmtd = spl_spi_nand_get_mtd();\n+\tif (!mtd) {\n+\t\tputs(\"SPI NAND probe failed.\\n\");\n+\t\treturn -ENODEV;\n+\t}\n+\n+\tspl_load_init(&load, spl_spinand_fit_read, mtd, 1);\n+\n+\treturn spl_load(spl_image, bootdev, &load, 0, CONFIG_SYS_SPI_U_BOOT_OFFS);\n+}\n+\n+/* Use priority 1 so that boards can override this */\n+SPL_LOAD_IMAGE_METHOD(\"SPI NAND\", 1, BOOT_DEVICE_SPI, spl_spinand_load_image);\ndiff --git a/drivers/mtd/Makefile b/drivers/mtd/Makefile\nindex ce05e206073d..a12d880a9e90 100644\n--- a/drivers/mtd/Makefile\n+++ b/drivers/mtd/Makefile\n@@ -34,6 +34,7 @@ else\n ifneq ($(mtd-y),)\n obj-$(CONFIG_SPL_MTD) += mtd.o\n endif\n+obj-$(CONFIG_SPL_SPI_NAND_LOAD) += nand/\n obj-$(CONFIG_$(PHASE_)NAND_SUPPORT) += nand/\n obj-$(CONFIG_SPL_ONENAND_SUPPORT) += onenand/\n obj-$(CONFIG_$(PHASE_)SPI_FLASH_SUPPORT) += spi/\ndiff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile\nindex c8169cf73902..7cd2a5f1af9b 100644\n--- a/drivers/mtd/nand/Makefile\n+++ b/drivers/mtd/nand/Makefile\n@@ -1,10 +1,21 @@\n # SPDX-License-Identifier: GPL-2.0+\n \n-ifeq ($(CONFIG_XPL_BUILD)$(CONFIG_TPL_BUILD),)\n nandcore-objs := core.o bbt.o\n+\n+ifeq ($(CONFIG_XPL_BUILD)$(CONFIG_TPL_BUILD),)\n+\n+# U-Boot proper\n obj-$(CONFIG_MTD_NAND_CORE) += nandcore.o\n obj-$(CONFIG_MTD_RAW_NAND) += raw/\n obj-$(CONFIG_MTD_SPI_NAND) += spi/\n+\n else\n+\n+# SPL / XPL / TPL\n+# SPL has no MTD_NAND_CORE symbol, so we must key off SPI NAND usage\n+obj-$(CONFIG_SPL_SPI_NAND_LOAD) += nandcore.o\n+obj-$(CONFIG_SPL_SPI_NAND_LOAD) += spi/\n+\n+# raw NAND still follows the normal SPL rule\n obj-$(CONFIG_$(PHASE_)NAND_SUPPORT) += raw/\n endif\n", "prefixes": [ "v2", "6/7" ] }