get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.2/patches/2221476/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2221476,
    "url": "http://patchwork.ozlabs.org/api/1.2/patches/2221476/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/uboot/patch/20260409133303.31875-5-ansuelsmth@gmail.com/",
    "project": {
        "id": 18,
        "url": "http://patchwork.ozlabs.org/api/1.2/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": "<20260409133303.31875-5-ansuelsmth@gmail.com>",
    "list_archive_url": null,
    "date": "2026-04-09T13:33:00",
    "name": "[v6,4/6] misc: fw_loader: implement request_firmware_size() OP",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "6652215cbc88dc37f45d9663506c6c73b676e5a0",
    "submitter": {
        "id": 71108,
        "url": "http://patchwork.ozlabs.org/api/1.2/people/71108/?format=api",
        "name": "Christian Marangi",
        "email": "ansuelsmth@gmail.com"
    },
    "delegate": {
        "id": 3651,
        "url": "http://patchwork.ozlabs.org/api/1.2/users/3651/?format=api",
        "username": "trini",
        "first_name": "Tom",
        "last_name": "Rini",
        "email": "trini@ti.com"
    },
    "mbox": "http://patchwork.ozlabs.org/project/uboot/patch/20260409133303.31875-5-ansuelsmth@gmail.com/mbox/",
    "series": [
        {
            "id": 499303,
            "url": "http://patchwork.ozlabs.org/api/1.2/series/499303/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/uboot/list/?series=499303",
            "date": "2026-04-09T13:32:56",
            "name": "misc: fs_loader: reorg and split to FS and FW loader + FIP loader",
            "version": 6,
            "mbox": "http://patchwork.ozlabs.org/series/499303/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2221476/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2221476/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=sCmF870f;\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=\"sCmF870f\";\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 4fs19j3BMpz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 09 Apr 2026 23:34:01 +1000 (AEST)",
            "from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id 3FDF28414B;\n\tThu,  9 Apr 2026 15:33:28 +0200 (CEST)",
            "by phobos.denx.de (Postfix, from userid 109)\n id 5F4DB841D6; Thu,  9 Apr 2026 15:33:27 +0200 (CEST)",
            "from mail-wm1-x32f.google.com (mail-wm1-x32f.google.com\n [IPv6:2a00:1450:4864:20::32f])\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 5F06C8414B\n for <u-boot@lists.denx.de>; Thu,  9 Apr 2026 15:33:25 +0200 (CEST)",
            "by mail-wm1-x32f.google.com with SMTP id\n 5b1f17b1804b1-488a29e6110so9956625e9.3\n for <u-boot@lists.denx.de>; Thu, 09 Apr 2026 06:33:25 -0700 (PDT)",
            "from Ansuel-XPS24 (host-82-61-192-155.retail.telecomitalia.it.\n [82.61.192.155]) by smtp.googlemail.com with ESMTPSA id\n 5b1f17b1804b1-488ccf9b919sm52876215e9.0.2026.04.09.06.33.23\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 09 Apr 2026 06:33:24 -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=1775741605; x=1776346405; 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=QXY/GsbVe9Lk6E8NTjJVvdwZuIu3JOlbbq9iW2053qg=;\n b=sCmF870fyd10KbybzrDYThYj7R1EM9OklrYT8k4ifjshKmjBdi9FLZZ1SRJO8iGOlA\n ORTknok4/66k2KyPBHW2fWJVnNtuLBEFvN+LrGotLS1z4v+pQWOgzQ2yu3M41ljdo1Qh\n 8JhH40xcaRkT4Oidx9X+BZb5dwh4pap31AR8VTbyi6+miGe0Q2jDo//kIEpR7zmYV1R5\n or1BJPw/kXc8s2rp30WfvIJlD+WaDQzk70upHpZ56Mw0bW2jJqExai5iHSDLz3aYnG1p\n 6VNB1Kh4xpV8YZmzyaGkE30DUgUPSsup4hYafJQ8uiATg9xzmKjkUDhb4I0gtgLyrHbb\n jiZA==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1775741605; x=1776346405;\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=QXY/GsbVe9Lk6E8NTjJVvdwZuIu3JOlbbq9iW2053qg=;\n b=KPDO1XKq9CbLSq0WXHqnMIXB33NJlhhpPlt5cw7DQ6cSgh1wXranaCOYKbbpTAmuX6\n 58MIAaMueAT8P7YfHY/0bFnWP2bUNWdJjjuSb9yJpwKZSo0vHS9k0GjiK8Q+A5dXkJ3T\n uzJ+tzgqA+vsJscEaEkdIIWQFcDZwIZB7/HRIoZF3z23MMKx4I2M9dBhb0zpzjF6OsB5\n fu7bYdy79hdXZfO/oqZyAtEVrRhyxUya3qm/wHhv3PPlEiFuiRxySY/aIUXWScv3GV4i\n 1zyez/q5GjROPIlWs+y+Oat5X5TLiayfcOghtVGia/QBcHY2YjlSujjhsi9/IlBFn8Ei\n dk4g==",
        "X-Forwarded-Encrypted": "i=1;\n AJvYcCVymrLNweivY1OnrCsLNv9uBUzrhlhqWSsZp9xi5QoYls9SrdRPF12xgk0c6SdrUp0A5RF7xU8=@lists.denx.de",
        "X-Gm-Message-State": "AOJu0YxKjihPKsS2LMKu4w5lT7cFk4PVcauU3jluprrE+NvOHe7jG8nj\n 1cGfRH7j95G8sE9ynjGgREFFxgFYk2gKAZ508/5HXbNr1ED4MflkE52I",
        "X-Gm-Gg": "AeBDievHFouaDUsydB5yVgMDVWsrVwF5Wog0cFLfjYkVuDVwE1jAIC3AOcTrM9apClL\n KWxO6pwEXvlid2217w3ITQBf75wW21sm5TLEm8lzLm5TTGDe+Olwys5kepi8l0xwz9rhKfunjcH\n LPG1wS04YRwUPW/t9UqkemKmhn0ASwGEedKDw8xYqdKyZwyi7N6ufxcZKb/zg2VGA1S7lQ0PpWC\n SHerJpWcS9mF++O4SPpubKXkuJuWDb0ZoRtkI6iDYRRri3hCkm7MfLSR/mWRtA7qHy8KRUuEeKm\n UtZnI1qNV1vnhAzC7GqKgJ7Wnv6VioTRVirxNlRePLa0HpzmrNnvtPNyXs7CA47SPM8SrhNatqh\n TFqtD9ZzysWT99qbDg62j9NQ9AvTnkqquOKu3WSmYO3VN+lpewNrLKuKk7S5KIWTI7BHdMrZE+V\n lHVvE42h5lpZMUYa3KbAVnY4o9cT27c0/up+yDM6jBRt9J/ZtHA7Xv0zpbMDq2swtLgS+UE6U=",
        "X-Received": "by 2002:a05:600c:3549:b0:471:700:f281 with SMTP id\n 5b1f17b1804b1-488997d5e5bmr331365735e9.25.1775741604562;\n Thu, 09 Apr 2026 06:33:24 -0700 (PDT)",
        "From": "Christian Marangi <ansuelsmth@gmail.com>",
        "To": "Tom Rini <trini@konsulko.com>, Simon Glass <sjg@chromium.org>,\n Christian Marangi <ansuelsmth@gmail.com>,\n Casey Connolly <casey.connolly@linaro.org>,\n Quentin Schulz <quentin.schulz@cherry.de>, Peng Fan <peng.fan@nxp.com>,\n Kever Yang <kever.yang@rock-chips.com>,\n Heinrich Schuchardt <xypron.glpk@gmx.de>,\n Mateus Lima Alves <mateuslima.ti@gmail.com>,\n Jamie Gibbons <jamie.gibbons@microchip.com>,\n Neha Malcom Francis <n-francis@ti.com>,\n Justin Klaassen <justin@tidylabs.net>,\n Leo Yu-Chi Liang <ycliang@andestech.com>,\n Weijie Gao <weijie.gao@mediatek.com>,\n Marek Vasut <marek.vasut+renesas@mailbox.org>,\n \"Lucien.Jheng\" <lucienzx159@gmail.com>, u-boot@lists.denx.de",
        "Subject": "[PATCH v6 4/6] misc: fw_loader: implement request_firmware_size() OP",
        "Date": "Thu,  9 Apr 2026 15:33:00 +0200",
        "Message-ID": "<20260409133303.31875-5-ansuelsmth@gmail.com>",
        "X-Mailer": "git-send-email 2.53.0",
        "In-Reply-To": "<20260409133303.31875-1-ansuelsmth@gmail.com>",
        "References": "<20260409133303.31875-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\nFS loader is updated to handle the new .get_size() handler.\n\nSigned-off-by: Christian Marangi <ansuelsmth@gmail.com>\n---\n drivers/misc/fw_loader/fs_loader.c        | 68 +++++++++++++++++++----\n drivers/misc/fw_loader/fw_loader-uclass.c | 19 +++++++\n drivers/misc/fw_loader/internal.h         |  7 +++\n include/fw_loader.h                       |  9 +++\n 4 files changed, 91 insertions(+), 12 deletions(-)",
    "diff": "diff --git a/drivers/misc/fw_loader/fs_loader.c b/drivers/misc/fw_loader/fs_loader.c\nindex 2694111d8396..8f549654a1be 100644\n--- a/drivers/misc/fw_loader/fs_loader.c\n+++ b/drivers/misc/fw_loader/fs_loader.c\n@@ -89,18 +89,10 @@ 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_prepare(struct udevice *dev)\n {\n \tchar *storage_interface, *dev_part, *ubi_mtdpart, *ubi_volume;\n-\tstruct firmware *upriv = dev_get_uclass_priv(dev);\n \tstruct device_plat *plat = dev_get_uclass_plat(dev);\n-\tloff_t actread = 0;\n \tint ret;\n \n \tstorage_interface = env_get(\"storage_interface\");\n@@ -124,6 +116,29 @@ static int fw_get_filesystem_firmware(struct udevice *dev)\n \t\tret = select_fs_dev(plat);\n \t}\n \n+\treturn ret;\n+}\n+\n+static void fw_get_filesystem_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+\tstruct firmware *upriv = dev_get_uclass_priv(dev);\n+\tloff_t actread = 0;\n+\tint ret;\n+\n+\tret = fw_get_filesystem_prepare(dev);\n \tif (ret)\n \t\tgoto out;\n \n@@ -138,14 +153,43 @@ 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+\tfw_get_filesystem_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+\tstruct firmware *upriv = dev_get_uclass_priv(dev);\n+\tloff_t size = 0;\n+\tint ret;\n+\n+\tret = fw_get_filesystem_prepare(dev);\n+\tif (ret)\n+\t\tgoto out;\n+\n+\tret = fs_size(upriv->name, &size);\n+\tif (ret) {\n+\t\tdebug(\"Error: %d Failed to get size for %s.\\n\",\n+\t\t      ret, upriv->name);\n+\t\tgoto out;\n+\t}\n+\n+\tret = size;\n+\n+out:\n+\tfw_get_filesystem_release(dev);\n \treturn ret;\n }\n \n static const struct fw_loader_ops fs_loader_ops = {\n \t.get_firmware = fw_get_filesystem_firmware,\n+\t.get_size = fw_get_filesystem_firmware_size,\n };\n \n static const struct udevice_id fs_loader_ids[] = {\ndiff --git a/drivers/misc/fw_loader/fw_loader-uclass.c b/drivers/misc/fw_loader/fw_loader-uclass.c\nindex c32c213b5b38..19379c23411b 100644\n--- a/drivers/misc/fw_loader/fw_loader-uclass.c\n+++ b/drivers/misc/fw_loader/fw_loader-uclass.c\n@@ -168,3 +168,22 @@ int request_firmware_into_buf(struct udevice *dev,\n \n \treturn ops->get_firmware(dev);\n }\n+\n+int request_firmware_size(struct udevice *dev, const char *name)\n+{\n+\tstruct fw_loader_ops *ops;\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+\tops = fw_loader_get_ops(dev);\n+\tif (!ops->get_size)\n+\t\treturn -EOPNOTSUPP;\n+\n+\treturn ops->get_size(dev);\n+}\ndiff --git a/drivers/misc/fw_loader/internal.h b/drivers/misc/fw_loader/internal.h\nindex 2f93d0c706b6..9964dc436afb 100644\n--- a/drivers/misc/fw_loader/internal.h\n+++ b/drivers/misc/fw_loader/internal.h\n@@ -32,6 +32,13 @@ struct fw_loader_ops {\n \t * @dev:\tFirmware Loader device to read firmware from\n \t */\n \tint (*get_firmware)(struct udevice *dev);\n+\n+\t/**\n+\t * get_size() - get firmware size from Firmware Loader driver\n+\t *\n+\t * @dev:\tFirmware Loader device to get firmware size from\n+\t */\n+\tint (*get_size)(struct udevice *dev);\n };\n \n #define fw_loader_get_ops(dev)\t((struct fw_loader_ops *)(dev)->driver->ops)\ndiff --git a/include/fw_loader.h b/include/fw_loader.h\nindex 99c47380a172..01f242dcbefd 100644\n--- a/include/fw_loader.h\n+++ b/include/fw_loader.h\n@@ -38,6 +38,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": [
        "v6",
        "4/6"
    ]
}