Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2217984/?format=api
{ "id": 2217984, "url": "http://patchwork.ozlabs.org/api/patches/2217984/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/patch/20260331075338.2391-6-ansuelsmth@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": "<20260331075338.2391-6-ansuelsmth@gmail.com>", "list_archive_url": null, "date": "2026-03-31T07:53:24", "name": "[v4,5/5] misc: fw_loader: implement request_firmware_size() OP", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "d00ca03014d781b58bdce2354190112258512005", "submitter": { "id": 71108, "url": "http://patchwork.ozlabs.org/api/people/71108/?format=api", "name": "Christian Marangi", "email": "ansuelsmth@gmail.com" }, "delegate": { "id": 3651, "url": "http://patchwork.ozlabs.org/api/users/3651/?format=api", "username": "trini", "first_name": "Tom", "last_name": "Rini", "email": "trini@ti.com" }, "mbox": "http://patchwork.ozlabs.org/project/uboot/patch/20260331075338.2391-6-ansuelsmth@gmail.com/mbox/", "series": [ { "id": 498136, "url": "http://patchwork.ozlabs.org/api/series/498136/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/list/?series=498136", "date": "2026-03-31T07:53:19", "name": "misc: fs_loader: reorg and split to FS and FW loader + FIP loader", "version": 4, "mbox": "http://patchwork.ozlabs.org/series/498136/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2217984/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2217984/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=20251104 header.b=eqdnJ+5J;\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=\"eqdnJ+5J\";\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=ansuelsmth@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 4flL4K1Fhdz1xtJ\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 31 Mar 2026 18:54:41 +1100 (AEDT)", "from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id AA48B84088;\n\tTue, 31 Mar 2026 09:54:02 +0200 (CEST)", "by phobos.denx.de (Postfix, from userid 109)\n id A09A284082; Tue, 31 Mar 2026 09:53:58 +0200 (CEST)", "from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com\n [IPv6:2a00:1450:4864:20::32d])\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 BA7C683F0A\n for <u-boot@lists.denx.de>; Tue, 31 Mar 2026 09:53:55 +0200 (CEST)", "by mail-wm1-x32d.google.com with SMTP id\n 5b1f17b1804b1-486fc4725f0so53976305e9.1\n for <u-boot@lists.denx.de>; Tue, 31 Mar 2026 00:53:55 -0700 (PDT)", "from Ansuel-XPS24 (93-34-88-122.ip49.fastwebnet.it. [93.34.88.122])\n by smtp.googlemail.com with ESMTPSA id\n 5b1f17b1804b1-4887c561750sm23889915e9.2.2026.03.31.00.53.53\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Tue, 31 Mar 2026 00:53:54 -0700 (PDT)" ], "X-Spam-Checker-Version": "SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de", "X-Spam-Level": "", "X-Spam-Status": "No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,\n DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,\n RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham\n autolearn_force=no version=3.4.2", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20251104; t=1774943635; x=1775548435; darn=lists.denx.de;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:to:from:from:to:cc:subject:date:message-id\n :reply-to; bh=2ORj84iNSbkgpiM21gHmI5ty7ZisVRiWvA1wNGv34d0=;\n b=eqdnJ+5JSc2IyzkWL+HzDXIvYoswB9jN8r1M977qlCHSeQtJgbjVxIqzWl2nnW0mwc\n 7DA4z21nDhZ+HaIGb4ekk/Jg9ZNbeKjPvLEWDnJFI5eE3lDhxPaowXRRNd/hFWc70Xpr\n UGGdFYkmwnklzxepnpixLss1QW5PIsGMH3vj5w40SivXKzuwDj2Wg5PxghWiz0uvMyEz\n DN8psLsWSyBGWQj67YjLt5N8qCATrgVWwZw8b33+2iRrv2AjZWL/uax/WXkLCXfkMBvF\n p8dlHK4ooUKa9IgU6tWjicrx+jf5POADFNBPVuXYWLUVlrNjIQNajH8f4s2itHlccH1p\n iQrw==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1774943635; x=1775548435;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to\n :cc:subject:date:message-id:reply-to;\n bh=2ORj84iNSbkgpiM21gHmI5ty7ZisVRiWvA1wNGv34d0=;\n b=Ce4cy3U3DzIWXWStdUVBGGVpE4BufF/R138BAlYVMuLMDjc6edSPjcRDdyXZt+sbwu\n gdzw33czYNEVBcpKixRI38VQsuPvNOR48YvVUDOXe57QTejZEfd9ZQzquj7S2q4j17Wr\n Ue1M9C7ZUF+yj7frd9XqqQRXGFKtqhC+gFZaXhmMJ4slGLjgC3Z5gfmonkIESpallzNn\n ZUQSVsfoLixOf7zgFWFGKyc14TsrzrWWeaRfCJSltSdbOya1sr4zDaZ2w4OuWrgmz3OS\n zHnZNdizPwjze2cdRO+j+uf5T7tiBDSZcSCuRmS0nuXR8mLXvLPqkpeTUJPbZalCIDje\n IseQ==", "X-Forwarded-Encrypted": "i=1;\n AJvYcCVSdm5cvj7eG5EC6Qzmcw0MIYS3MMQgsAbSRB5X2BWjUwlzpBXY3tGcaKpUBGXwpU3faH+HFVY=@lists.denx.de", "X-Gm-Message-State": "AOJu0Yx30z4dKFRe2sAaHJkeClzTkfCDMl1BVp9nyVj1cV3nMHdVz7Ye\n QJWTfC627IOe61P7Xhb+PvUegvrJHEW6maJlm1Cc/DzlSkgM8QSLl6oU", "X-Gm-Gg": "ATEYQzyokKsC4OvF4YROythwusw3clKP7HKjaRU1S5q4UAC14hMD+bq4OG1DeBOInnE\n J4Vt862LTdIm0RF7ag+t0es41HjiYQ7ro6KAkIKAPc4N1MR93s9okHANk5YCN7bVrEyIZxQYGqz\n 8+7aIAGfi/2ogsSTC90eiiQtM+PGJvTeQVFReC6LE74K4tPAcIzkOlqmZMvKoWADTaw6hbev9ej\n Ln5MHmL7g7/o0Qzpi4Y49RVBsCBYJSA1D6RbyiP+kIifoMJLrWuAYHkhpjfpqlNmGE4mjUbpQ6Z\n x7WnxM3QpbvKSce4OPv6MSSr1OPfENalSWhjmMW1qwp2igm7PqgXZwsKJov6tPC+kZjHkQKwgC2\n o+IL2Ga1d23B9HPT4dD76v5qkUxygv1iqRTMX+lePmCuq3DboPEAJxAnYJTL8I43fEzvgU5b8W6\n OLoSotiU/VVFjF4l6LIu39Q4Lr5LjPd08+V1wcbsVsJEosS0+Ffm018Wg=", "X-Received": "by 2002:a05:600c:8907:b0:485:fbd2:f72 with SMTP id\n 5b1f17b1804b1-4887818678emr31580055e9.1.1774943634832;\n Tue, 31 Mar 2026 00:53:54 -0700 (PDT)", "From": "Christian Marangi <ansuelsmth@gmail.com>", "To": "Tom Rini <trini@konsulko.com>, Simon Glass <sjg@chromium.org>,\n Casey Connolly <casey.connolly@linaro.org>,\n Quentin Schulz <quentin.schulz@cherry.de>,\n Christian Marangi <ansuelsmth@gmail.com>, Peng Fan <peng.fan@nxp.com>,\n Ilias Apalodimas <ilias.apalodimas@linaro.org>,\n Chen-Yu Tsai <wens@kernel.org>,\n Jamie Gibbons <jamie.gibbons@microchip.com>,\n Neha Malcom Francis <n-francis@ti.com>,\n Justin Klaassen <justin@tidylabs.net>, Harsha Vardhan V M <h-vm@ti.com>,\n Leo Yu-Chi Liang <ycliang@andestech.com>,\n Weijie Gao <weijie.gao@mediatek.com>,\n Marek Vasut <marek.vasut+renesas@mailbox.org>,\n Alif Zakuan Yuslaimi <alif.zakuan.yuslaimi@altera.com>,\n Sky Huang <SkyLake.Huang@mediatek.com>,\n \"Lucien.Jheng\" <lucienzx159@gmail.com>, u-boot@lists.denx.de", "Subject": "[PATCH v4 5/5] misc: fw_loader: implement request_firmware_size() OP", "Date": "Tue, 31 Mar 2026 09:53:24 +0200", "Message-ID": "<20260331075338.2391-6-ansuelsmth@gmail.com>", "X-Mailer": "git-send-email 2.53.0", "In-Reply-To": "<20260331075338.2391-1-ansuelsmth@gmail.com>", "References": "<20260331075338.2391-1-ansuelsmth@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": "It might be useful to get the firmware size before reading it to allocate\nthe correct size. This is needed for case where the firmware size change\nacross different firmware version and is not always the same. In such case\nthe only way to handle this scenario is to allocate a big-enough buffer to\nread the firmware.\n\nTo better handle this, introduce the request_firmware_size() OP to get the\nfirmware size before reading it. This way proper buffer can be allocated\nand dynamic firmware size can be better supported.\n\nBoth FS and FIP lodaer are updated to handle the new .get_size() handler.\n\nSigned-off-by: Christian Marangi <ansuelsmth@gmail.com>\n---\n drivers/misc/fw_loader/fip_loader.c | 29 ++++++++++++\n drivers/misc/fw_loader/fs_loader.c | 70 ++++++++++++++++++++++++-----\n drivers/misc/fw_loader/fw_loader.c | 20 +++++++++\n drivers/misc/fw_loader/internal.h | 1 +\n include/fw_loader.h | 9 ++++\n 5 files changed, 118 insertions(+), 11 deletions(-)", "diff": "diff --git a/drivers/misc/fw_loader/fip_loader.c b/drivers/misc/fw_loader/fip_loader.c\nindex 5c01013276d7..b50c89c892d6 100644\n--- a/drivers/misc/fw_loader/fip_loader.c\n+++ b/drivers/misc/fw_loader/fip_loader.c\n@@ -495,6 +495,34 @@ static int fw_get_fip_firmware(struct udevice *dev)\n \treturn ret;\n }\n \n+/**\n+ * fw_get_fip_firmware_size - get firmware size.\n+ * @dev: An instance of a driver.\n+ *\n+ * Return: Size of firmware, negative value when error.\n+ */\n+static int fw_get_fip_firmware_size(struct udevice *dev)\n+{\n+\tstruct fip_toc_entry ent;\n+\tstruct fip_storage_info info = { };\n+\tint ret;\n+\n+\tret = fw_parse_storage_info(dev, &info);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tstruct firmware *firmwarep = dev_get_priv(dev);\n+\n+\tif (!firmwarep)\n+\t\treturn -EINVAL;\n+\n+\tret = parse_fip_firmware(firmwarep, &info, &ent);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\treturn ent.size;\n+}\n+\n static int fip_loader_probe(struct udevice *dev)\n {\n \tstruct device_plat *plat = dev_get_plat(dev);\n@@ -505,6 +533,7 @@ static int fip_loader_probe(struct udevice *dev)\n \t\treturn ret;\n \n \tplat->get_firmware = fw_get_fip_firmware;\n+\tplat->get_size = fw_get_fip_firmware_size;\n \n \treturn 0;\n };\ndiff --git a/drivers/misc/fw_loader/fs_loader.c b/drivers/misc/fw_loader/fs_loader.c\nindex 26ac936aa590..a92ee8a4b519 100644\n--- a/drivers/misc/fw_loader/fs_loader.c\n+++ b/drivers/misc/fw_loader/fs_loader.c\n@@ -89,15 +89,8 @@ static int select_fs_dev(struct device_plat *plat)\n \treturn ret;\n }\n \n-/**\n- * fw_get_filesystem_firmware - load firmware into an allocated buffer.\n- * @dev: An instance of a driver.\n- *\n- * Return: Size of total read, negative value when error.\n- */\n-static int fw_get_filesystem_firmware(struct udevice *dev)\n+static int __fw_get_filesystem_firmware_prepare(struct udevice *dev)\n {\n-\tloff_t actread = 0;\n \tchar *storage_interface, *dev_part, *ubi_mtdpart, *ubi_volume;\n \tint ret;\n \n@@ -122,6 +115,28 @@ static int fw_get_filesystem_firmware(struct udevice *dev)\n \t\tret = select_fs_dev(dev_get_plat(dev));\n \t}\n \n+\treturn ret;\n+}\n+\n+static void __fw_get_filesystem_firmware_release(struct udevice *dev)\n+{\n+#ifdef CONFIG_CMD_UBIFS\n+\tumount_ubifs();\n+#endif\n+}\n+\n+/**\n+ * fw_get_filesystem_firmware - load firmware into an allocated buffer.\n+ * @dev: An instance of a driver.\n+ *\n+ * Return: Size of total read, negative value when error.\n+ */\n+static int fw_get_filesystem_firmware(struct udevice *dev)\n+{\n+\tloff_t actread = 0;\n+\tint ret;\n+\n+\tret = __fw_get_filesystem_firmware_prepare(dev);\n \tif (ret)\n \t\tgoto out;\n \n@@ -143,9 +158,41 @@ static int fw_get_filesystem_firmware(struct udevice *dev)\n \t}\n \n out:\n-#ifdef CONFIG_CMD_UBIFS\n-\tumount_ubifs();\n-#endif\n+\t__fw_get_filesystem_firmware_release(dev);\n+\treturn ret;\n+}\n+\n+/**\n+ * fw_get_filesystem_firmware_size - get firmware size.\n+ * @dev: An instance of a driver.\n+ *\n+ * Return: Size of firmware, negative value when error.\n+ */\n+static int fw_get_filesystem_firmware_size(struct udevice *dev)\n+{\n+\tloff_t size = 0;\n+\tint ret;\n+\n+\tret = __fw_get_filesystem_firmware_prepare(dev);\n+\tif (ret)\n+\t\tgoto out;\n+\n+\tstruct firmware *firmwarep = dev_get_priv(dev);\n+\n+\tif (!firmwarep)\n+\t\treturn -ENOMEM;\n+\n+\tret = fs_size(firmwarep->name, &size);\n+\n+\tif (ret) {\n+\t\tdebug(\"Error: %d Failed to get size for %s.\\n\",\n+\t\t ret, firmwarep->name);\n+\t} else {\n+\t\tret = size;\n+\t}\n+\n+out:\n+\t__fw_get_filesystem_firmware_release(dev);\n \treturn ret;\n }\n \n@@ -159,6 +206,7 @@ static int fs_loader_probe(struct udevice *dev)\n \t\treturn ret;\n \n \tplat->get_firmware = fw_get_filesystem_firmware;\n+\tplat->get_size = fw_get_filesystem_firmware_size;\n \n \treturn 0;\n };\ndiff --git a/drivers/misc/fw_loader/fw_loader.c b/drivers/misc/fw_loader/fw_loader.c\nindex 26c2ce406ac9..c761fb1ff281 100644\n--- a/drivers/misc/fw_loader/fw_loader.c\n+++ b/drivers/misc/fw_loader/fw_loader.c\n@@ -185,3 +185,23 @@ int request_firmware_into_buf(struct udevice *dev,\n \n \treturn plat->get_firmware(dev);\n }\n+\n+int request_firmware_size(struct udevice *dev, const char *name)\n+{\n+\tstruct device_plat *plat;\n+\tint ret;\n+\n+\tif (!dev)\n+\t\treturn -EINVAL;\n+\n+\tret = _request_firmware_prepare(dev, name, NULL, 0, 0);\n+\tif (ret < 0) /* error */\n+\t\treturn ret;\n+\n+\tplat = dev_get_plat(dev);\n+\n+\tif (!plat->get_size)\n+\t\treturn -EOPNOTSUPP;\n+\n+\treturn plat->get_size(dev);\n+}\ndiff --git a/drivers/misc/fw_loader/internal.h b/drivers/misc/fw_loader/internal.h\nindex 9e7585a92808..d823d56e53f5 100644\n--- a/drivers/misc/fw_loader/internal.h\n+++ b/drivers/misc/fw_loader/internal.h\n@@ -36,6 +36,7 @@ struct device_plat {\n \tchar *ubivol;\n \n \tint (*get_firmware)(struct udevice *dev);\n+\tint (*get_size)(struct udevice *dev);\n };\n \n /**\ndiff --git a/include/fw_loader.h b/include/fw_loader.h\nindex 7053c7bc6f05..1af3db385161 100644\n--- a/include/fw_loader.h\n+++ b/include/fw_loader.h\n@@ -39,6 +39,15 @@ int request_firmware_into_buf(struct udevice *dev,\n \t\t\t const char *name,\n \t\t\t void *buf, size_t size, u32 offset);\n \n+/**\n+ * request_firmware_size - Get firmware size.\n+ * @dev: An instance of a driver.\n+ * @name: Name of firmware file.\n+ *\n+ * Return: Size of firmware, negative value when error.\n+ */\n+int request_firmware_size(struct udevice *dev, const char *name);\n+\n /**\n * request_firmware_into_buf_via_script() -\n * Load firmware using a U-Boot script and copy to buffer\n", "prefixes": [ "v4", "5/5" ] }