Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/813658/?format=api
{ "id": 813658, "url": "http://patchwork.ozlabs.org/api/patches/813658/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/patch/20170913220546.19560-8-robdclark@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": "<20170913220546.19560-8-robdclark@gmail.com>", "list_archive_url": null, "date": "2017-09-13T22:05:30", "name": "[U-Boot,v3,07/21] efi_loader: flesh out device-path to text", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "3043292322cd039c0c47734fd25b7a1a948ade60", "submitter": { "id": 18760, "url": "http://patchwork.ozlabs.org/api/people/18760/?format=api", "name": "Rob Clark", "email": "robdclark@gmail.com" }, "delegate": { "id": 3400, "url": "http://patchwork.ozlabs.org/api/users/3400/?format=api", "username": "agraf", "first_name": "Alexander", "last_name": "Graf", "email": "agraf@suse.de" }, "mbox": "http://patchwork.ozlabs.org/project/uboot/patch/20170913220546.19560-8-robdclark@gmail.com/mbox/", "series": [ { "id": 2990, "url": "http://patchwork.ozlabs.org/api/series/2990/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/list/?series=2990", "date": "2017-09-13T22:05:23", "name": "efi_loader: enough UEFI for standard distro boot", "version": 3, "mbox": "http://patchwork.ozlabs.org/series/2990/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/813658/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/813658/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<u-boot-bounces@lists.denx.de>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org", "Authentication-Results": [ "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=lists.denx.de\n\t(client-ip=81.169.180.215; helo=lists.denx.de;\n\tenvelope-from=u-boot-bounces@lists.denx.de;\n\treceiver=<UNKNOWN>)", "ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"TiyeYiRn\"; dkim-atps=neutral" ], "Received": [ "from lists.denx.de (dione.denx.de [81.169.180.215])\n\tby ozlabs.org (Postfix) with ESMTP id 3xsx1r6nzlz9sxR\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 14 Sep 2017 08:20:32 +1000 (AEST)", "by lists.denx.de (Postfix, from userid 105)\n\tid B425BC2258E; Wed, 13 Sep 2017 22:10:35 +0000 (UTC)", "from lists.denx.de (localhost [IPv6:::1])\n\tby lists.denx.de (Postfix) with ESMTP id 77A30C22545;\n\tWed, 13 Sep 2017 22:08:16 +0000 (UTC)", "by lists.denx.de (Postfix, from userid 105)\n\tid CD3A4C22616; Wed, 13 Sep 2017 22:06:16 +0000 (UTC)", "from mail-qt0-f193.google.com (mail-qt0-f193.google.com\n\t[209.85.216.193])\n\tby lists.denx.de (Postfix) with ESMTPS id 4606FC225A4\n\tfor <u-boot@lists.denx.de>; Wed, 13 Sep 2017 22:06:13 +0000 (UTC)", "by mail-qt0-f193.google.com with SMTP id u48so943332qtc.4\n\tfor <u-boot@lists.denx.de>; Wed, 13 Sep 2017 15:06:13 -0700 (PDT)", "from localhost ([2601:184:4780:aac0:25f8:dd96:a084:785a])\n\tby smtp.gmail.com with ESMTPSA id\n\t25sm10449778qtv.14.2017.09.13.15.06.10\n\t(version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256);\n\tWed, 13 Sep 2017 15:06:10 -0700 (PDT)" ], "X-Spam-Checker-Version": "SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de", "X-Spam-Level": "", "X-Spam-Status": "No, score=-0.0 required=5.0 tests=FREEMAIL_FROM,\n\tRCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,\n\tT_DKIM_INVALID\n\tautolearn=unavailable autolearn_force=no version=3.4.0", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=9wvjK6cnE3C9klIJHwS9ip4xCU9ANtGDr0esnZ4NAhQ=;\n\tb=TiyeYiRnM5KH/ISgI+j7YX+CI3qqWxcz6b17yJznxpl1NhZ9j3vRLONKthx8PRmDb2\n\t6ceRd1rIesDwNwoyW2vBhg86KhpIeOm5B2XuUFnDqpSVqpsLYDhnf9JYAc1lwlAANO5H\n\tHt1IPBEnFwmwJ4TYXU6hxYG31IGacvBdlQTswB0gZqX/Cd8G1AiP6Ub0nBuXUOOS6Fam\n\tKYfCQk+eVxaXIoUyUhCiW4afHKXZDxzTYeG0aULX/N56k8EsvLDwzCb+e8xdtWiHYOQQ\n\tFxPKulJjMhHFrJGxncvxz8cy/qfz+NjABAeQ1FX9sZ0bg1PRr4fqC1DPpNw4Sl7OhJyw\n\toPMA==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=9wvjK6cnE3C9klIJHwS9ip4xCU9ANtGDr0esnZ4NAhQ=;\n\tb=eUstutc1Fib7fLWyBCyOP7o0Eh4Nd2gs8dnbYLK2llGSAuKrkRjc4nEFOAGBrr0Tor\n\trvF/n/mRQIj1mMRuDV/Djdo6u1D7y7yyqK/7vnfqg6BH/3UUrv1nuSiQiLZ1DLdyuwoo\n\tcJMM0zx5iFmAyI8mjlGzrA0mH169wFSWp2HRxjrjc9eWsyY2nXhW5jnYD5kIp5Paolis\n\tlegHOFUzitlZnBYKSvOnxex6t/pooqxNJvNMnFQ6JS5+RUOPdFqjx71ERYYYCpnkRzqz\n\tJw8TMlqlpSf1q9dnG1oE87QN2fX2RIakG3LqYK3eTRoVZx5DTd/13JgO7qFTN6PISjEn\n\t2t3g==", "X-Gm-Message-State": "AHPjjUhyVolv2Ozd6gLUgLfZFuxJBDEvRRBWjOYw7zkgovKm+vYpexAd\n\tdxRDxP1JXwdN+tKuuyM=", "X-Google-Smtp-Source": "AOwi7QAAoNrSTCr+M80wyDhrFYyvd1NunSNCTxikgINSx5Srdy8zDBQFdlSnhP8DZuRZZ6UTrasYkg==", "X-Received": "by 10.237.63.15 with SMTP id p15mr27677693qtf.117.1505340371941; \n\tWed, 13 Sep 2017 15:06:11 -0700 (PDT)", "From": "Rob Clark <robdclark@gmail.com>", "To": "U-Boot Mailing List <u-boot@lists.denx.de>", "Date": "Wed, 13 Sep 2017 18:05:30 -0400", "Message-Id": "<20170913220546.19560-8-robdclark@gmail.com>", "X-Mailer": "git-send-email 2.13.5", "In-Reply-To": "<20170913220546.19560-1-robdclark@gmail.com>", "References": "<20170913220546.19560-1-robdclark@gmail.com>", "Cc": "Heinrich Schuchardt <xypron.glpk@gmx.de>, Peter Jones <pjones@redhat.com>", "Subject": "[U-Boot] [PATCH v3 07/21] efi_loader: flesh out device-path to text", "X-BeenThere": "u-boot@lists.denx.de", "X-Mailman-Version": "2.1.18", "Precedence": "list", "List-Id": "U-Boot discussion <u-boot.lists.denx.de>", "List-Unsubscribe": "<https://lists.denx.de/options/u-boot>,\n\t<mailto:u-boot-request@lists.denx.de?subject=unsubscribe>", "List-Archive": "<http://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\t<mailto:u-boot-request@lists.denx.de?subject=subscribe>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "base64", "Errors-To": "u-boot-bounces@lists.denx.de", "Sender": "\"U-Boot\" <u-boot-bounces@lists.denx.de>" }, "content": "It needs to handle more device-path node types, and also multiple levels\nof path hierarchy. To simplify this, initially construct utf8 string to\na temporary buffer, and then allocate the real utf16 buffer that is\nreturned. This should be mostly for debugging or at least not critical-\npath so an extra copy won't hurt, and is saner than the alternative.\n\nSigned-off-by: Rob Clark <robdclark@gmail.com>\n---\n include/efi_api.h | 1 +\n include/efi_loader.h | 2 +\n lib/efi_loader/efi_device_path_to_text.c | 241 +++++++++++++++++++++++--------\n 3 files changed, 181 insertions(+), 63 deletions(-)", "diff": "diff --git a/include/efi_api.h b/include/efi_api.h\nindex ac58fd58de..0c36122107 100644\n--- a/include/efi_api.h\n+++ b/include/efi_api.h\n@@ -304,6 +304,7 @@ struct efi_device_path_vendor {\n \n #define EFI_PNP_ID(ID)\t\t\t\t(u32)(((ID) << 16) | 0x41D0)\n #define EISA_PNP_ID(ID)\t\t\t\tEFI_PNP_ID(ID)\n+#define EISA_PNP_NUM(ID)\t\t\t((ID) >> 16)\n \n struct efi_device_path_acpi_path {\n \tstruct efi_device_path dp;\ndiff --git a/include/efi_loader.h b/include/efi_loader.h\nindex d052b03ab7..f39c2ee6da 100644\n--- a/include/efi_loader.h\n+++ b/include/efi_loader.h\n@@ -59,6 +59,8 @@ extern struct efi_simple_input_interface efi_con_in;\n extern const struct efi_console_control_protocol efi_console_control;\n extern const struct efi_device_path_to_text_protocol efi_device_path_to_text;\n \n+uint16_t *efi_dp_str(struct efi_device_path *dp);\n+\n extern const efi_guid_t efi_guid_console_control;\n extern const efi_guid_t efi_guid_device_path;\n extern const efi_guid_t efi_guid_loaded_image;\ndiff --git a/lib/efi_loader/efi_device_path_to_text.c b/lib/efi_loader/efi_device_path_to_text.c\nindex f9d071ac50..1a5ef3919b 100644\n--- a/lib/efi_loader/efi_device_path_to_text.c\n+++ b/lib/efi_loader/efi_device_path_to_text.c\n@@ -15,82 +15,197 @@\n const efi_guid_t efi_guid_device_path_to_text_protocol =\n \t\tEFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID;\n \n-static uint16_t *efi_convert_device_node_to_text(\n-\t\tstruct efi_device_path *device_node,\n-\t\tbool display_only,\n-\t\tbool allow_shortcuts)\n+static char *dp_unknown(char *s, struct efi_device_path *dp)\n {\n-\tunsigned long buffer_size;\n-\tefi_status_t r;\n-\tuint16_t *buffer = NULL;\n-\tint i;\n+\ts += sprintf(s, \"/UNKNOWN(%04x,%04x)\", dp->type, dp->sub_type);\n+\treturn s;\n+}\n \n-\tswitch (device_node->type) {\n-\tcase DEVICE_PATH_TYPE_END:\n-\t\treturn NULL;\n-\tcase DEVICE_PATH_TYPE_MESSAGING_DEVICE:\n-\t\tswitch (device_node->sub_type) {\n-\t\tcase DEVICE_PATH_SUB_TYPE_MSG_MAC_ADDR: {\n-\t\t\tstruct efi_device_path_mac_addr *dp =\n-\t\t\t\t(struct efi_device_path_mac_addr *)device_node;\n-\n-\t\t\tif (dp->if_type != 0 && dp->if_type != 1)\n-\t\t\t\tbreak;\n-\t\t\tr = efi_allocate_pool(EFI_ALLOCATE_ANY_PAGES,\n-\t\t\t\t\t 2 * MAC_OUTPUT_LEN,\n-\t\t\t\t\t (void **)&buffer);\n-\t\t\tif (r != EFI_SUCCESS)\n-\t\t\t\treturn NULL;\n-\t\t\tsprintf((char *)buffer,\n-\t\t\t\t\"MAC(%02x%02x%02x%02x%02x%02x,0x%1x)\",\n-\t\t\t\tdp->mac.addr[0], dp->mac.addr[1],\n-\t\t\t\tdp->mac.addr[2], dp->mac.addr[3],\n-\t\t\t\tdp->mac.addr[4], dp->mac.addr[5],\n-\t\t\t\tdp->if_type);\n-\t\t\tfor (i = MAC_OUTPUT_LEN - 1; i >= 0; --i)\n-\t\t\t\tbuffer[i] = ((uint8_t *)buffer)[i];\n+static char *dp_hardware(char *s, struct efi_device_path *dp)\n+{\n+\tswitch (dp->sub_type) {\n+\tcase DEVICE_PATH_SUB_TYPE_VENDOR: {\n+\t\tstruct efi_device_path_vendor *vdp =\n+\t\t\t(struct efi_device_path_vendor *)dp;\n+\t\ts += sprintf(s, \"/VenHw(%pUl)\", &vdp->guid);\n+\t\tbreak;\n+\t}\n+\tdefault:\n+\t\ts = dp_unknown(s, dp);\n+\t\tbreak;\n+\t}\n+\treturn s;\n+}\n+\n+static char *dp_acpi(char *s, struct efi_device_path *dp)\n+{\n+\tswitch (dp->sub_type) {\n+\tcase DEVICE_PATH_SUB_TYPE_ACPI_DEVICE: {\n+\t\tstruct efi_device_path_acpi_path *adp =\n+\t\t\t(struct efi_device_path_acpi_path *)dp;\n+\t\ts += sprintf(s, \"/Acpi(PNP%04x\", EISA_PNP_NUM(adp->hid));\n+\t\tif (adp->uid)\n+\t\t\ts += sprintf(s, \",%d\", adp->uid);\n+\t\ts += sprintf(s, \")\");\n+\t\tbreak;\n+\t}\n+\tdefault:\n+\t\ts = dp_unknown(s, dp);\n+\t\tbreak;\n+\t}\n+\treturn s;\n+}\n+\n+static char *dp_msging(char *s, struct efi_device_path *dp)\n+{\n+\tswitch (dp->sub_type) {\n+\tcase DEVICE_PATH_SUB_TYPE_MSG_USB: {\n+\t\tstruct efi_device_path_usb *udp =\n+\t\t\t(struct efi_device_path_usb *)dp;\n+\t\ts += sprintf(s, \"/Usb(0x%x,0x%x)\", udp->parent_port_number,\n+\t\t\t udp->usb_interface);\n+\t\tbreak;\n+\t}\n+\tcase DEVICE_PATH_SUB_TYPE_MSG_MAC_ADDR: {\n+\t\tstruct efi_device_path_mac_addr *mdp =\n+\t\t\t(struct efi_device_path_mac_addr *)dp;\n+\n+\t\tif (mdp->if_type != 0 && mdp->if_type != 1)\n \t\t\tbreak;\n-\t\t\t}\n-\t\t}\n+\n+\t\ts += sprintf(s, \"/MAC(%02x%02x%02x%02x%02x%02x,0x%1x)\",\n+\t\t\tmdp->mac.addr[0], mdp->mac.addr[1],\n+\t\t\tmdp->mac.addr[2], mdp->mac.addr[3],\n+\t\t\tmdp->mac.addr[4], mdp->mac.addr[5],\n+\t\t\tmdp->if_type);\n+\n+\t\tbreak;\n+\t}\n+\tcase DEVICE_PATH_SUB_TYPE_MSG_USB_CLASS: {\n+\t\tstruct efi_device_path_usb_class *ucdp =\n+\t\t\t(struct efi_device_path_usb_class *)dp;\n+\n+\t\ts += sprintf(s, \"/USBClass(%x,%x,%x,%x,%x)\",\n+\t\t\tucdp->vendor_id, ucdp->product_id,\n+\t\t\tucdp->device_class, ucdp->device_subclass,\n+\t\t\tucdp->device_protocol);\n+\n+\t\tbreak;\n+\t}\n+\tcase DEVICE_PATH_SUB_TYPE_MSG_SD:\n+\tcase DEVICE_PATH_SUB_TYPE_MSG_MMC: {\n+\t\tconst char *typename =\n+\t\t\t(dp->sub_type == DEVICE_PATH_SUB_TYPE_MSG_SD) ?\n+\t\t\t\t\t\"SDCard\" : \"MMC\";\n+\t\tstruct efi_device_path_sd_mmc_path *sddp =\n+\t\t\t(struct efi_device_path_sd_mmc_path *)dp;\n+\t\ts += sprintf(s, \"/%s(Slot%u)\", typename, sddp->slot_number);\n+\t\tbreak;\n+\t}\n+\tdefault:\n+\t\ts = dp_unknown(s, dp);\n \t\tbreak;\n-\tcase DEVICE_PATH_TYPE_MEDIA_DEVICE:\n-\t\tswitch (device_node->sub_type) {\n-\t\tcase DEVICE_PATH_SUB_TYPE_FILE_PATH: {\n-\t\t\tstruct efi_device_path_file_path *fp =\n-\t\t\t\t(struct efi_device_path_file_path *)device_node;\n-\t\t\tbuffer_size = device_node->length - 4;\n-\t\t\tr = efi_allocate_pool(EFI_ALLOCATE_ANY_PAGES,\n-\t\t\t\t\t buffer_size, (void **) &buffer);\n-\t\t\tif (r != EFI_SUCCESS)\n-\t\t\t\treturn NULL;\n-\t\t\tmemcpy(buffer, fp->str, buffer_size);\n+\t}\n+\treturn s;\n+}\n+\n+static char *dp_media(char *s, struct efi_device_path *dp)\n+{\n+\tswitch (dp->sub_type) {\n+\tcase DEVICE_PATH_SUB_TYPE_HARD_DRIVE_PATH: {\n+\t\tstruct efi_device_path_hard_drive_path *hddp =\n+\t\t\t(struct efi_device_path_hard_drive_path *)dp;\n+\t\tvoid *sig = hddp->partition_signature;\n+\n+\t\tswitch (hddp->signature_type) {\n+\t\tcase SIG_TYPE_MBR:\n+\t\t\ts += sprintf(s, \"/HD(Part%d,Sig%08x)\",\n+\t\t\t\t hddp->partition_number,\n+\t\t\t\t *(uint32_t *)sig);\n \t\t\tbreak;\n+\t\tcase SIG_TYPE_GUID:\n+\t\t\ts += sprintf(s, \"/HD(Part%d,Sig%pUl)\",\n+\t\t\t\t hddp->partition_number, sig);\n+\t\tdefault:\n+\t\t\ts += sprintf(s, \"/HD(Part%d,MBRType=%02x,SigType=%02x)\",\n+\t\t\t\t hddp->partition_number, hddp->partmap_type,\n+\t\t\t\t hddp->signature_type);\n \t\t}\n-\t\t}\n+\n+\t\tbreak;\n+\t}\n+\tcase DEVICE_PATH_SUB_TYPE_CDROM_PATH: {\n+\t\tstruct efi_device_path_cdrom_path *cddp =\n+\t\t\t(struct efi_device_path_cdrom_path *)dp;\n+\t\ts += sprintf(s, \"/CDROM(0x%x)\", cddp->boot_entry);\n+\t\tbreak;\n+\t}\n+\tcase DEVICE_PATH_SUB_TYPE_FILE_PATH: {\n+\t\tstruct efi_device_path_file_path *fp =\n+\t\t\t(struct efi_device_path_file_path *)dp;\n+\t\tint slen = (dp->length - sizeof(*dp)) / 2;\n+\t\ts += sprintf(s, \"/%-*ls\", slen, fp->str);\n+\t\tbreak;\n+\t}\n+\tdefault:\n+\t\ts = dp_unknown(s, dp);\n \t\tbreak;\n \t}\n+\treturn s;\n+}\n \n-\t/*\n-\t * For all node types that we do not yet support return\n-\t * 'UNKNOWN(type,subtype)'.\n-\t */\n-\tif (!buffer) {\n-\t\tr = efi_allocate_pool(EFI_ALLOCATE_ANY_PAGES,\n-\t\t\t\t 2 * UNKNOWN_OUTPUT_LEN,\n-\t\t\t\t (void **)&buffer);\n-\t\tif (r != EFI_SUCCESS)\n-\t\t\treturn NULL;\n-\t\tsprintf((char *)buffer,\n-\t\t\t\"UNKNOWN(%04x,%04x)\",\n-\t\t\tdevice_node->type,\n-\t\t\tdevice_node->sub_type);\n-\t\tfor (i = UNKNOWN_OUTPUT_LEN - 1; i >= 0; --i)\n-\t\t\tbuffer[i] = ((uint8_t *)buffer)[i];\n+static uint16_t *efi_convert_device_node_to_text(\n+\t\tstruct efi_device_path *dp,\n+\t\tbool display_only,\n+\t\tbool allow_shortcuts)\n+{\n+\tunsigned long len;\n+\tefi_status_t r;\n+\tchar buf[512]; /* this ought be be big enough for worst case */\n+\tchar *str = buf;\n+\tuint16_t *out;\n+\n+\twhile (dp) {\n+\t\tswitch (dp->type) {\n+\t\tcase DEVICE_PATH_TYPE_HARDWARE_DEVICE:\n+\t\t\tstr = dp_hardware(str, dp);\n+\t\t\tbreak;\n+\t\tcase DEVICE_PATH_TYPE_ACPI_DEVICE:\n+\t\t\tstr = dp_acpi(str, dp);\n+\t\t\tbreak;\n+\t\tcase DEVICE_PATH_TYPE_MESSAGING_DEVICE:\n+\t\t\tstr = dp_msging(str, dp);\n+\t\t\tbreak;\n+\t\tcase DEVICE_PATH_TYPE_MEDIA_DEVICE:\n+\t\t\tstr = dp_media(str, dp);\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\tstr = dp_unknown(str, dp);\n+\t\t}\n+\n+\t\tdp = efi_dp_next(dp);\n \t}\n \n-\treturn buffer;\n+\t*str++ = '\\0';\n+\n+\tlen = str - buf;\n+\tr = efi_allocate_pool(EFI_ALLOCATE_ANY_PAGES, 2 * len, (void **)&out);\n+\tif (r != EFI_SUCCESS)\n+\t\treturn NULL;\n+\n+\tascii2unicode(out, buf);\n+\tout[len - 1] = 0;\n+\n+\treturn out;\n }\n \n+/* helper for debug prints.. efi_free_pool() the result. */\n+uint16_t *efi_dp_str(struct efi_device_path *dp)\n+{\n+\treturn efi_convert_device_node_to_text(dp, true, true);\n+}\n+\n+\n static uint16_t EFIAPI *efi_convert_device_node_to_text_ext(\n \t\tstruct efi_device_path *device_node,\n \t\tbool display_only,\n", "prefixes": [ "U-Boot", "v3", "07/21" ] }