get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2175519,
    "url": "http://patchwork.ozlabs.org/api/1.0/patches/2175519/?format=api",
    "project": {
        "id": 18,
        "url": "http://patchwork.ozlabs.org/api/1.0/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
    },
    "msgid": "<20251218-bootconfig-v4-5-5bbbdb0be1dc@baylibre.com>",
    "date": "2025-12-18T11:17:00",
    "name": "[v4,5/5] test: abootimg: Add test for bootconfig handling",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": false,
    "hash": "c1de71c249b5413afaca35af4677070234d45d1f",
    "submitter": {
        "id": 76253,
        "url": "http://patchwork.ozlabs.org/api/1.0/people/76253/?format=api",
        "name": "Guillaume La Roque",
        "email": "glaroque@baylibre.com"
    },
    "delegate": {
        "id": 117687,
        "url": "http://patchwork.ozlabs.org/api/1.0/users/117687/?format=api",
        "username": "mkorpershoek",
        "first_name": "Mattijs",
        "last_name": "Korpershoek",
        "email": "mkorpershoek@baylibre.com"
    },
    "mbox": "http://patchwork.ozlabs.org/project/uboot/patch/20251218-bootconfig-v4-5-5bbbdb0be1dc@baylibre.com/mbox/",
    "series": [
        {
            "id": 485825,
            "url": "http://patchwork.ozlabs.org/api/1.0/series/485825/?format=api",
            "date": "2025-12-18T11:16:55",
            "name": "android: add bootconfig support",
            "version": 4,
            "mbox": "http://patchwork.ozlabs.org/series/485825/mbox/"
        }
    ],
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2175519/checks/",
    "tags": {},
    "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=baylibre-com.20230601.gappssmtp.com\n header.i=@baylibre-com.20230601.gappssmtp.com header.a=rsa-sha256\n header.s=20230601 header.b=NvJTpTsj;\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=none (p=none dis=none) header.from=baylibre.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=baylibre-com.20230601.gappssmtp.com\n header.i=@baylibre-com.20230601.gappssmtp.com header.b=\"NvJTpTsj\";\n\tdkim-atps=neutral",
            "phobos.denx.de;\n dmarc=none (p=none dis=none) header.from=baylibre.com",
            "phobos.denx.de;\n spf=pass smtp.mailfrom=glaroque@baylibre.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 4dX7SV3PpDz1y2F\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 18 Dec 2025 22:18:02 +1100 (AEDT)",
            "from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id 3662683DBF;\n\tThu, 18 Dec 2025 12:17:16 +0100 (CET)",
            "by phobos.denx.de (Postfix, from userid 109)\n id 6BC1C83D5D; Thu, 18 Dec 2025 12:17:14 +0100 (CET)",
            "from mail-wm1-x336.google.com (mail-wm1-x336.google.com\n [IPv6:2a00:1450:4864:20::336])\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 5D0B183DA6\n for <u-boot@lists.denx.de>; Thu, 18 Dec 2025 12:17:12 +0100 (CET)",
            "by mail-wm1-x336.google.com with SMTP id\n 5b1f17b1804b1-47a8195e515so4448105e9.0\n for <u-boot@lists.denx.de>; Thu, 18 Dec 2025 03:17:12 -0800 (PST)",
            "from [127.0.1.1] ([2a01:e0a:e50:3860:3734:1277:36b8:3f57])\n by smtp.gmail.com with ESMTPSA id\n 5b1f17b1804b1-47be273f147sm38070965e9.7.2025.12.18.03.17.10\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 18 Dec 2025 03:17:11 -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.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,\n DKIM_VALID,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=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1766056632;\n x=1766661432;\n darn=lists.denx.de;\n h=cc:to:in-reply-to:references:message-id:content-transfer-encoding\n :mime-version:subject:date:from:from:to:cc:subject:date:message-id\n :reply-to; bh=aaUbO5anb67fEYVTSVEwINvwPHSTVUHbq8ivjbChweQ=;\n b=NvJTpTsj1fJsr/60XPGiDi8zHzUXxd3ZFh1G3rNppNGMaBPgr7WRtCd6tdMcwDcGr8\n Cx5HUDvDpt3WxLWdXnR+Gk0zRRPMo+doRKq8+sMZBSmHi4EkzyzLTt/szbesq/h4Xj7E\n O7RXluvBzWeMzkAaNmnuDzUUItzqfbP5m/lTPz+7RlOky6nevPFwTR+QCQwKJwOZMcak\n OgFM8HlYVrvzQcVEjjLZDPZRPfXkYT2Q7rIqHGpjF6rorIGaz/ky6bCljucSydYV388P\n MTAYU8jPVLvpjWENjiZ2afCPt/78WYF5XASPxipAU860AvEyjX8acRx6JE/BKbzqPQV6\n 6BZw==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1766056632; x=1766661432;\n h=cc:to:in-reply-to:references:message-id:content-transfer-encoding\n :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to\n :cc:subject:date:message-id:reply-to;\n bh=aaUbO5anb67fEYVTSVEwINvwPHSTVUHbq8ivjbChweQ=;\n b=uND2+FkOU1cLma4yDIixNaIIkawokJLYOmFJ5wb6a9GB616q/NnGdbfLKFzOT4DUnK\n /aTLtmMmCnLDK87nlXm3LhcM+OhxiByatxdc2BSa40KK8JNsm/wrLd+l/BdVKm+3elk6\n CMhes+d/BJVkdRBFYzh7DMSqtI0IHa/vinlYdVEg+GN9md/kQFGGrhao0dFF3j5/NXjw\n hOaxoyV8Y6ARjTdahOby5SPdecPMPgIOjMAsdS9nT+BfnZ1xOK8YeC5Qx4uYvbtncmV8\n zURQJrONxG5CqZ+9JP4F8nAsyDcddLj4wxQPaEOc+yaWyhUpSaY9RKFr9eDMFW5K1ult\n 2Arw==",
        "X-Forwarded-Encrypted": "i=1;\n AJvYcCV4SBxc8rY9iZ56eqA5V4ZPfLOpJV7Vha5DzpC7nBmwmKv08ZEii3azc1mB4BXR1AsCk0Qi0u0=@lists.denx.de",
        "X-Gm-Message-State": "AOJu0YyyxlUNMJ0too05PalpIVgRtCsXvQ6mSCALF9FI0TU/r64CIYkI\n 5mapCy0AWmeaLM5KHoooKR5ikZ5R5dQSwb2uQPkrdIubjC97uH5Er6Pl1Y2KXPOH0jM=",
        "X-Gm-Gg": "AY/fxX5yJir/4o0eU4cc5vxDAdMZLl0reO/NZD/UdQisWpU+0JIjU5jPfg2iP0lCzmF\n 1/B1qmIL8RkZJ+nlnX1VFYt3HqV2jUj47XkSCrguWLQToj1yhHkiWirClQJpKH4o8lSUK3VpjyK\n Uahs6n7+KlcphuX7wK/sUH7iFykDdJGYjlIAXKL9QEiq/FYVsk9FHsOqFDZGaKopQTJgZRpFEbY\n pRscGfOqizp1gc2pJzzxHEBwg/guA6IlsG1k8lmQaWWW2qNT4y5NsQIsOWw+eskR3820dXZV+WQ\n Dqj6M6jr/4trbRJcvSHBDTrA+RCj5QxSMTL6zRVKQmYTf2wasHghwtnSB1ig9lpxEKvwRI03Rt5\n RoDRfWwY9+bKRyNpn1CVOhlQ3BZ4Zj2014WxB8uvWVdrlOSArCi9+dlCZtXVL+zOQ6sEwBmluCR\n rNRYeROR6Fm+u5yQ==",
        "X-Google-Smtp-Source": "\n AGHT+IGz3j6rvsG3iRFdPsu+BtZ0DATM3gbf1wSYtk8lBeQ5eFRJ6TYqJRBXw3Sjh3/hjOzdILR9ow==",
        "X-Received": "by 2002:a05:600d:13:b0:471:9da:5248 with SMTP id\n 5b1f17b1804b1-47a9327dc50mr192017995e9.26.1766056631837;\n Thu, 18 Dec 2025 03:17:11 -0800 (PST)",
        "From": "\"Guillaume La Roque (TI.com)\" <glaroque@baylibre.com>",
        "Date": "Thu, 18 Dec 2025 12:17:00 +0100",
        "Subject": "[PATCH v4 5/5] test: abootimg: Add test for bootconfig handling",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "7bit",
        "Message-Id": "<20251218-bootconfig-v4-5-5bbbdb0be1dc@baylibre.com>",
        "References": "<20251218-bootconfig-v4-0-5bbbdb0be1dc@baylibre.com>",
        "In-Reply-To": "<20251218-bootconfig-v4-0-5bbbdb0be1dc@baylibre.com>",
        "To": "Tom Rini <trini@konsulko.com>,\n Mattijs Korpershoek <mkorpershoek@kernel.org>",
        "Cc": "Julien Masson <jmasson@baylibre.com>,\n Guillaume La Roque <glaroque@baylibre.com>, u-boot@lists.denx.de,\n Simon Glass <sjg@chromium.org>, Nicolas Belin <nbelin@baylibre.com>,\n Neil Armstrong <neil.armstrong@linaro.org>,\n Andrew Goodbody <andrew.goodbody@linaro.org>,\n Aaron Kling <webgeek1234@gmail.com>, George Chan <gchan9527@gmail.com>,\n Sam Day <me@samcday.com>, Jerome Forissier <jerome.forissier@linaro.org>,\n Maxime Fournier <mfournier@baylibre.com>, Eddie Kovsky <ekovsky@redhat.com>,\n Casey Connolly <casey.connolly@linaro.org>,\n Guillaume Ranquet <ranquet.guillaume@gmail.com>",
        "X-Mailer": "b4 0.14.3",
        "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": "Add test to verify that androidboot.* parameters are correctly extracted\nfrom bootargs and appended to the bootconfig section when using\n'abootimg get ramdisk' with boot image v4 and vendor_boot image.\n\nThe test verifies:\n- androidboot.* parameters are removed from bootargs\n- They are appended to the bootconfig section in the ramdisk\n- Non-androidboot parameters remain in bootargs\n- The bootconfig trailer is properly updated\n\nReviewed-by: Simon Glass <sjg@chromium.org>\nSigned-off-by: Guillaume La Roque (TI.com) <glaroque@baylibre.com>\n---\n test/py/tests/test_android/test_abootimg.py | 108 +++++++++++++++++++++++++---\n 1 file changed, 99 insertions(+), 9 deletions(-)",
    "diff": "diff --git a/test/py/tests/test_android/test_abootimg.py b/test/py/tests/test_android/test_abootimg.py\nindex 2aadb692b30..bd5fb992a7d 100644\n--- a/test/py/tests/test_android/test_abootimg.py\n+++ b/test/py/tests/test_android/test_abootimg.py\n@@ -69,15 +69,33 @@ e5bddc8a7b792d8e8788c896ce9b88d32ebe6c971e7ddd3543cae734cd01\n c0ffc84c0000b0766d1a87d4e5afeadd3dab7a6f10000000f84163d5d7cd\n d43a000000000000000060c53e7544995700400000\"\"\"\n \n-# vendor boot image v4 hex dump\n-vboot_img_hex = \"\"\"1f8b0808baaecd63020376626f6f742e696d6700edd8310b824018c6f1b3\n-222a08f41b3436b4280dcdd19c11d16ee9109d18d59042d047ec8b04cd0d\n-d19d5a4345534bf6ffc173ef29272f38e93b1d0ec67dd79d548462aa1cd2\n-d5d20b0000f8438678f90c18d584b8a4bbb3a557991ecb2a0000f80d6b2f\n-f4179b656be5c532f2fc066f040000000080e23936af2755f62a3d918df1\n-db2a7ab67f9ffdeb7df7cda3465ecb79c4ce7e5c577562bb9364b74449a5\n-1e467e20c53c0a57de763193c1779b3b4fcd9d4ee27c6a0e00000000c0ff\n-309ffea7010000000040f1dc004129855400400000\"\"\"\n+# vendor boot image v4 hex dump (contains initial bootconfig: androidboot.hardware=test)\n+vboot_img_hex = \"\"\"1f8b08000000000002ffeddb316a02411806d009a49040606d3d84374823a9a348b095\n+915951b2c9caee8690ce237a91406a0b497603e215dcbc577cf3334cf5350303b3787a\n+9c4fa6d3e7dbf02b6b63dfc6b01b0180ffe726644d5e37975bb34108c76efa1eb65974\n+c7fed691c600e02a64e7ab3e8494afe37bd128050000007ae6707ffad202000000f45b\n+155fd3b67e59eee26751c674a711000000e89ff896aa729b5665d98c37b14a1fb1ca1f\n+da4f7f5e02000000a0377e0040ab5ba000500000\"\"\"\n+\n+# bootable boot image v4 hex dump (contains actual bootable kernel)\n+boot_bootable_img_hex = \"\"\"1f8b08081663ee6802ff626f6f745f626f6f7461626c655f76342e696d67\n+00edd1c14ac3401485e159b80a083ec24dba4f117c81d8140c6dad24ee25\n+4da6e9d07452321305dfca37d4d4ec5cb954fe6f37ccb967606ef298e6db\n+2c0d3f94526feae25adda81fae140000000000f8ab66e17c67ecdc1d025d\n+1d3a89125bf79da9e5beebbc64a7b2d1f27a27cfda7959e9deea369a8263\n+a0eaecde34e2c75b375495766e3fb46114cca430a7a12dbd96e3654a7663\n+dfb9f4feeb383514beecbdb1cd1489e3380a5cabf5596ea7c4f78b62acf1\n+a66ccdbbaea380950100000000f06b79b249b362f5f2b44e16cb87ed3a5d\n+e67c0a0000000000ffcc27ba944c7e00300000\"\"\"\n+\n+# bootable vendor boot image v4 hex dump (contains actual bootable ramdisk)\n+vendor_boot_bootable_img_hex = \"\"\"1f8b08081663ee6802ff76656e646f725f626f6f745f626f6f7461626c65\n+5f76342e696d6700edd8b10a02310cc6f10c0e7220f8080737b8b93ab9a8\n+282e571171959e0d787058a84557f5c96ddd7d80c3ff0f92217c5396408e\n+f56abf30e63090649c9b3c53bd050000fcab57d45b3c35de47db749a06bb\n+e1eff08c7d0100d00bf6ea826f5dbef0d38b0dee618396f3f27bf69ddedb\n+b316558a4d462255fe132c4dbdde6e0a160700000000408f7c0027597569\n+00200000\"\"\"\n \n # Expected response for \"abootimg dtb_dump\" command\n dtb_dump_resp=\"\"\"## DTB area contents (concat format):\n@@ -179,6 +197,24 @@ def abootimgv4_disk_image_boot(ubman):\n         gtdi3 = AbootimgTestDiskImage(ubman, 'bootv4.img', boot_img_hex)\n     return gtdi3\n \n+gtdi4 = None\n+@pytest.fixture(scope='function')\n+def abootimgv4_bootable_disk_image_boot(ubman):\n+    \"\"\"pytest fixture to provide bootable boot image v4.\"\"\"\n+    global gtdi4\n+    if not gtdi4:\n+        gtdi4 = AbootimgTestDiskImage(ubman, 'boot_bootable_v4.img', boot_bootable_img_hex)\n+    return gtdi4\n+\n+gtdi5 = None\n+@pytest.fixture(scope='function')\n+def abootimgv4_bootable_disk_image_vboot(ubman):\n+    \"\"\"pytest fixture to provide bootable vendor boot image v4.\"\"\"\n+    global gtdi5\n+    if not gtdi5:\n+        gtdi5 = AbootimgTestDiskImage(ubman, 'vendor_boot_bootable_v4.img', vendor_boot_bootable_img_hex)\n+    return gtdi5\n+\n @pytest.mark.boardspec('sandbox')\n @pytest.mark.buildconfigspec('android_boot_image')\n @pytest.mark.buildconfigspec('cmd_abootimg')\n@@ -266,3 +302,57 @@ def test_abootimgv4(abootimgv4_disk_image_vboot, abootimgv4_disk_image_boot, ubm\n     ubman.run_command('fdt get value v / model')\n     response = ubman.run_command('env print v')\n     assert response == 'v=x2'\n+\n+@pytest.mark.boardspec('sandbox')\n+@pytest.mark.buildconfigspec('android_boot_image')\n+@pytest.mark.buildconfigspec('cmd_abootimg')\n+@pytest.mark.requiredtool('xxd')\n+@pytest.mark.requiredtool('gunzip')\n+def test_abootimg_bootconfig(abootimgv4_disk_image_vboot,\n+                              abootimgv4_disk_image_boot,\n+                              ubman):\n+    \"\"\"Test bootconfig handling with boot image v4.\n+\n+    Verifies that androidboot.* parameters from bootargs are appended to the\n+    bootconfig section in vendor_boot image in memory, and that non-androidboot\n+    parameters remain in bootargs.\n+    \"\"\"\n+\n+    # Setup addresses\n+    ram_base = utils.find_ram_base(ubman)\n+    ramdisk_addr_r = ram_base + 0x4000000\n+    ubman.run_command('setenv ramdisk_addr_r 0x%x' % ramdisk_addr_r)\n+    ubman.run_command('setenv loadaddr 0x%x' % loadaddr)\n+    ubman.run_command('setenv vloadaddr 0x%x' % vloadaddr)\n+\n+    # Set bootargs with androidboot.* parameters\n+    ubman.run_command('setenv bootargs \"androidboot.serialno=ABC123 androidboot.mode=recovery console=ttyS0\"')\n+\n+    # Load images\n+    ubman.run_command('host load hostfs - 0x%x %s' % (vloadaddr,\n+        abootimgv4_disk_image_vboot.path))\n+    ubman.run_command('host load hostfs - 0x%x %s' % (loadaddr,\n+        abootimgv4_disk_image_boot.path))\n+    ubman.run_command('abootimg addr 0x%x 0x%x' % (loadaddr, vloadaddr))\n+\n+    # Extract ramdisk (triggers bootconfig append)\n+    ubman.run_command('abootimg get ramdisk ramdisk_addr ramdisk_size')\n+\n+    # Get ramdisk address\n+    response = ubman.run_command('env print ramdisk_addr')\n+    ramdisk_start = int(response.split('=')[1], 16)\n+\n+    # Verify androidboot.* parameters were removed from bootargs\n+    response = ubman.run_command('env print bootargs')\n+    assert 'androidboot.' not in response\n+    assert 'console=ttyS0' in response\n+\n+    # Get ramdisk size and verify BOOTCONFIG magic at the end\n+    response = ubman.run_command('env print ramdisk_size')\n+    ramdisk_size = int(response.split('=')[1], 16)\n+\n+    # Dump the end of the ramdisk where BOOTCONFIG trailer should be\n+    response = ubman.run_command('md.b 0x%x 96' % (ramdisk_start))\n+\n+    # Verify BOOTCONFIG magic is present\n+    assert 'BOOTCONFIG' in response or 'BOOTCON' in response\n",
    "prefixes": [
        "v4",
        "5/5"
    ]
}