get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2230920,
    "url": "http://patchwork.ozlabs.org/api/1.2/patches/2230920/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/uboot/patch/bcdf8d29f12cf8bfee1f9351bd4cf45de966732f.1777536451.git.simona.toaca@nxp.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": "<bcdf8d29f12cf8bfee1f9351bd4cf45de966732f.1777536451.git.simona.toaca@nxp.com>",
    "list_archive_url": null,
    "date": "2026-04-30T08:33:31",
    "name": "[v4,2/4] arm: mach-imx: Add command to expose QB functionality",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "c7af6cf67408f7d182c7811cebd5fdf48d16a6c0",
    "submitter": {
        "id": 92829,
        "url": "http://patchwork.ozlabs.org/api/1.2/people/92829/?format=api",
        "name": "Simona Toaca (OSS)",
        "email": "simona.toaca@oss.nxp.com"
    },
    "delegate": {
        "id": 151988,
        "url": "http://patchwork.ozlabs.org/api/1.2/users/151988/?format=api",
        "username": "festevam",
        "first_name": "Fabio",
        "last_name": "Estevam",
        "email": "festevam@gmail.com"
    },
    "mbox": "http://patchwork.ozlabs.org/project/uboot/patch/bcdf8d29f12cf8bfee1f9351bd4cf45de966732f.1777536451.git.simona.toaca@nxp.com/mbox/",
    "series": [
        {
            "id": 502232,
            "url": "http://patchwork.ozlabs.org/api/1.2/series/502232/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/uboot/list/?series=502232",
            "date": "2026-04-30T08:33:29",
            "name": "imx9{4,5,52}: Add Quickboot support",
            "version": 4,
            "mbox": "http://patchwork.ozlabs.org/series/502232/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2230920/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2230920/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=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com\n header.a=rsa-sha256 header.s=selector1-NXP1-onmicrosoft-com\n header.b=q/Y7QEfQ;\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=oss.nxp.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=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com\n header.b=\"q/Y7QEfQ\";\n\tdkim-atps=neutral",
            "phobos.denx.de;\n dmarc=none (p=none dis=none) header.from=oss.nxp.com",
            "phobos.denx.de;\n spf=pass smtp.mailfrom=simona.toaca@oss.nxp.com",
            "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=oss.nxp.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 4g5nHv3tgDz1yGq\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 18:23:39 +1000 (AEST)",
            "from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id 13F7184660;\n\tThu, 30 Apr 2026 10:23:24 +0200 (CEST)",
            "by phobos.denx.de (Postfix, from userid 109)\n id B762184662; Thu, 30 Apr 2026 10:23:20 +0200 (CEST)",
            "from OSPPR02CU001.outbound.protection.outlook.com\n (mail-norwayeastazlp170130007.outbound.protection.outlook.com\n [IPv6:2a01:111:f403:c20f::7])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits))\n (No client certificate requested)\n by phobos.denx.de (Postfix) with ESMTPS id 9411784662\n for <u-boot@lists.denx.de>; Thu, 30 Apr 2026 10:23:18 +0200 (CEST)",
            "from VI0PR04MB11917.eurprd04.prod.outlook.com (2603:10a6:800:306::9)\n by DB8PR04MB7036.eurprd04.prod.outlook.com (2603:10a6:10:12f::21)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.20; Thu, 30 Apr\n 2026 08:23:15 +0000",
            "from VI0PR04MB11917.eurprd04.prod.outlook.com\n ([fe80::a506:3460:d2bc:26e7]) by VI0PR04MB11917.eurprd04.prod.outlook.com\n ([fe80::a506:3460:d2bc:26e7%4]) with mapi id 15.20.9870.016; Thu, 30 Apr 2026\n 08:23:15 +0000"
        ],
        "X-Spam-Checker-Version": "SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de",
        "X-Spam-Level": "",
        "X-Spam-Status": "No, score=-0.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,\n DKIM_VALID,FORGED_SPF_HELO,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_PASS,\n T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2",
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=RsZ5uZuYKOpv1sT7x0UHG2dgFbiG1uVy1G1sBwwpJr3Y1e5whKLpY28q+6NlEZpq3Isk3KbCECORGiK3cUAk2ewBEVAtkKzShuTzf002qPZ68OGAYMYWy6xnDjD8onDt3ihLa5pulC7VfJZNiaekWexXrYYqTpkf+WqjtT8b2XI7I/Is8nAYmuYQKGYit5c5UQ1L5J8Hm9MCwrFnqUsuF6bMg3dcsnfSGOepHv0eIY6cX2sCZn17wsalgcflg6p5w6I2+G3vHp1BKC5qhUH1ZtnYah/rTYD8kJCbt4XiAvuCsR6BK2E5Od5TdqIIXOYrVOhoZwOm9nGFIBXJOli8NQ==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=Wd6Mh90JW451ZlQebqvLW69je7I4DHy1JlRyMWAa0gQ=;\n b=LIktkZ+zLPq+cMgrILuWsU7f4PgHfNdoz3JRQwnxaQ8L3awwklEJc3vVyP+NkWhuW5vU+eR4lYmF6AwlB7Kr0nuJwIcf7D8WPiHMJwTLzHUDRwY+sRj52b5qTqr20mwb4NvgC9ORw10k/HXCw+tvlGL2PfQXoON9K8Tf5VvV+AFRhFyBfJsbcDqJ2VokbTUOpU9+5buv8Vlscjzpl7pD1Ft/m9RI4p5Oq82BVlelu78haJfYBJBUmfWMoXTZZWWwsNWZM1vN56SXu/VpsMBMEVt4Ni5hy8qtA5mAll0DsVRCauPhdm/vmLNvv/UMr2Zt/YzdCjAm0q/O2sYDMxi7oQ==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com;\n dkim=pass header.d=oss.nxp.com; arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com;\n s=selector1-NXP1-onmicrosoft-com;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=Wd6Mh90JW451ZlQebqvLW69je7I4DHy1JlRyMWAa0gQ=;\n b=q/Y7QEfQNAdbbxSOrGBkM4G98IWqjoOVMMOgBhInsT4jqhmn76geSoazZp1cdJ70DBATFjtPkT8sXs63QThsBLPgseGw2XxgloTbuIkPGWvStzX3XGWpqsIjukQYqpPa8NmHRXU4/wquULM+U9CHVhmxMTRKrc1TBzjLbUTusMmSMeBtmSi2ZOVIqG1p7ySHwmbJIoTA56wiSSoMGdVVn3KXGRJE5qfQE2gMSrFvL6bk13jyQu5TT6Q8aX/hcqN0jYo0OFe4Jwu7a3nRQILd/6ookTEw8+tQ4FQ9bbpafFqrEViEc/gITiYU6Zm5vYf9jnXP4/juau93CMleXS2gsw==",
        "From": "\"Simona Toaca (OSS)\" <simona.toaca@oss.nxp.com>",
        "To": "uboot-imx@nxp.com,\n\tu-boot@lists.denx.de",
        "Cc": "Stefano Babic <sbabic@nabladev.com>, festevam@gmail.com, peng.fan@nxp.com,\n alice.guo@nxp.com, ye.li@nxp.com, simona.toaca@nxp.com,\n viorel.suman@nxp.com, fedor.ross@ifm.com, marex@nabladev.com,\n joao.goncalves@toradex.com, ravi@prevas.dk, ping.bai@nxp.com,\n ji.luo@nxp.com, qijian.guo@nxp.com",
        "Subject": "[PATCH v4 2/4] arm: mach-imx: Add command to expose QB functionality",
        "Date": "Thu, 30 Apr 2026 11:33:31 +0300",
        "Message-ID": "\n <bcdf8d29f12cf8bfee1f9351bd4cf45de966732f.1777536451.git.simona.toaca@nxp.com>",
        "X-Mailer": "git-send-email 2.43.0",
        "In-Reply-To": "<cover.1777536451.git.simona.toaca@nxp.com>",
        "References": "<cover.1777536451.git.simona.toaca@nxp.com>",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "AM9P250CA0022.EURP250.PROD.OUTLOOK.COM\n (2603:10a6:20b:21c::27) To VI0PR04MB11917.eurprd04.prod.outlook.com\n (2603:10a6:800:306::9)",
        "MIME-Version": "1.0",
        "X-MS-Exchange-MessageSentRepresentingType": "1",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "VI0PR04MB11917:EE_|DB8PR04MB7036:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "6e465624-b87d-4fe3-844d-08dea691b9c8",
        "X-MS-Exchange-SharedMailbox-RoutingAgent-Processed": "True",
        "X-LD-Processed": "686ea1d3-bc2b-4c6f-a92c-d99c5c301635,ExtAddr",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;\n ARA:13230040|366016|1800799024|19092799006|376014|18002099003|56012099003|22082099003;",
        "X-Microsoft-Antispam-Message-Info": "\n P9BxQKJwyjCHyuW26P/wVZJhiWGwSuzvE/kbiqAZHil8QIRPuiAjNwFTZnE/Zi8aaUBAWZvEpwFWsW/0WN/XiF1GWxR/b8ejOrO39oIEmcb6gW3CG5BaekyakJ95ZRtpqSGDMvHXt4TRptbqSQfvDf661SoPrFB6ZpjaiMCfVrAI52D2l7kJIYI6FZbEvhbVafjhFwH7vLKkKLRQLCb9ZPKD8HvTNFCgUcWNKuREfoiBz8QPXkmsfHdzfFdqFcQ+YKwbsoIylgxNeO93NzJ0aRd6+A8awwYoynKb9NVsn+b41Y1U6JBQorqoB0wsiSDvdaII0vUCWr0pHY2/cwjQ2GTGpGRbQDLE/lTx9+J0S5Syu5dJxq2lo1T3VNqAv2A6jtew2U+4EhxhqN8yM+zomdphV4XG9ROgl7+p7BQYLVpoqZRqSkBlBzQcau7FikQO6IyP7ns9TXl+p9TGfSxVrrBfYwPSJ7KlTOtn2tudgVDAVoHZGwIjFr9l2C0VniZxrWyO8/ZB6R2D8YINvy83zEj8Q6gMoyMHw5t4Kr8yVpq3QnrL/HlnjWUYuNDiR0buh6iALv132VlturjPfSZo6SB35wFjSa0UzpXqoXmqS/c+HVizGE3DnHdeV/d2pgKiNJBoPNTyOpl5zeDW5GwMvPBAmch2gZzyML8wSaKZI+5fnCv0dca3DdHrYsI9IPSt2QaAbdulBahC6xWimkMHYgI8OX5pcIKNf5+LDoMfygo=",
        "X-Forefront-Antispam-Report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:VI0PR04MB11917.eurprd04.prod.outlook.com; PTR:;\n CAT:NONE;\n SFS:(13230040)(366016)(1800799024)(19092799006)(376014)(18002099003)(56012099003)(22082099003);\n DIR:OUT; SFP:1101;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "\n 3MUjeMXqEx2I013rLI7/LXtLUcDYIAlpVYOHOJsyPR/za9hYZKCGqMsT6JtMrwyWfOUvf2FB0PcdiVTGKL4y2+dcq/aphllb3iTyE9JYKaBZAfDYziL1A4t5HUH03gR/VBWQjBgGRa2DmlVJ/kX+4btRUNR8ND1w0eegYYvHX697xDYLwLd3SNZyNKMTSTfDSDsl6XhzuOF9iw2faabb50zNyivnFgNR7tqupRSbkQMAM/4lD91MK66Xka9EkRuxL7jtsBZaLoR8cC4y4cCSLW5s20pHJSYwz8u9zDzIvJn/JSuzHvlyQaCXgh+MXFGC24A1Ty1STBJGxDsDv/PTHXY5Xf4xbJQGzu1KET1FTftdwzvMGzwSgA7h9MsnazZul8UORbOWRDBci8cKDtZG9z+McTK1T/jQMYPEch7I7T9Y+Z3iwJ6mbBI3b8vuG70/z4uoQlUnue9Jg6XgXhF9cuC/qEfP7HmWEBEEngjuYiAjgSjrKsl8ZwQakblpgDlxphy+1kCmSgQzV21LoKQWu5KfkrE5R3raYx1Wuunb7hnRUwPbOKNclouZTdBb5cJLsGdozxqXS4M+83EHAZjXGghQbHakQdWbBDe4dB08Eca+unotBBhzwymcvpnCgCKR05dkl11XFoMQbL67N8e1irCP+QU+p0GmUz87SXq+cY5WB5o9Br+QKTYO+Lnw7VnvH1jnSE62Vv7vhXqkRR1t9Zohq0dDrbciI0/wdNpnoQSRxoEAgujW1tEWHLx1qREzZaf3se8QxUiVuEJq+FUui4yk7s8tQEE4hLsH8IqXVvI/IcmJaufL/O/xc5Wc2PoVBDemBwNWvo5Kg/HI/0Qo8hU9lSd16IRZczaAAsu72STl64F44k+DdK+W3LpdY/8bnPQozmTXpoIB4hbwimTv/yQJtZ8cvfRDA5not5W6GGA63qGsYEzGRjWhpG1ZoHTU6cW62ChJ44kFLe74+zhr44Rj2tIpKic2GENLPmjncdNP/3xwjLsttoJLewd/SuRKf27YNl8XoUjDMg3j/L7BRnvtA7kr4Bo46pv+eemrzguQ/Nd/SCdpViMgkHTac4jpqmj9fCR6Hnui+aeOZqiFpLOg4f5Fu5b4rOqPTsbdxpf1KRssJrnEYjEMS332GFpqtuZ7UC02IOhmgHEVm++TU67XbroaLky84KHJqCQzDX0LEK9RaBoSBnPOr2lDkfqM+oAPatqXNhYnjFHIK9w04BrnVe0IdCUkt9BHgNUzU4GDlWQC+BSxXwmNloUkHx5XL3TrSe/lY+YPAthekDWpmsOHX3QHdPWAjrjfm/0dXvDCnFe0GCzon9j/A4ThJ3NOo+fJEVlBfStlhENiU+q7Teov2gNP1qgKvTbON8e8Eopfni9gfrZi6yueElsWypzly1ctd2Ec5dSeciYEnxTDBTc+WTsfAYUS6ukm7E8zWimGrQCKu10FE9oVgXg/MglMbAIYrjg13NvM6blOQCj+8AWoWHNutHVoTiFg9/A7SqdvtI69D4fva/f0TZS/pdgkGR69S9VudHwTwPb5ZrxzmlPFoKHTs6iSw0s2TTcKwRGjb7bgMyZE4FZJhVM+HC7hnB/OG7EfwcDVVRa/e1/H1hry02sMPLgTHdoIStfe0/7Ga/ggaBsdlJ6A+Q46y5qs29o0x3NCVL7aaDg2m+ZgQ8AhQOULnvGbk9/DCmwAdKuKW2uN8xcOamogXIrue0BAN92CsppySN99vfPJq7UhlA==",
        "X-OriginatorOrg": "oss.nxp.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 6e465624-b87d-4fe3-844d-08dea691b9c8",
        "X-MS-Exchange-CrossTenant-AuthSource": "VI0PR04MB11917.eurprd04.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "30 Apr 2026 08:23:15.2837 (UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "686ea1d3-bc2b-4c6f-a92c-d99c5c301635",
        "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED",
        "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n 0IXSEIgOs+IqjWYME2APrTwaDnIkN3KZDu1aT2UWhUTwStThDyPJ4B+T3nwbwl1SfFKY6nqTk9ShsaZjPCS/9A==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DB8PR04MB7036",
        "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: Simona Toaca <simona.toaca@nxp.com>\n\nThis command exposes 3 methods:\n- check -> checks if the data in volatile memory is valid\n\t   (integrity check)\n- save  -> saves the data to non-volatile memory and\n\t   erases the data in volatile memory\n- erase\t-> erases the data in non-volatile memory\n\ncmd_qb can be used either directly in the U-Boot console\nor in an uuu script to save the QB data during flashing.\nIt supports specifying a different boot medium than the\ncurrent boot device for saving the data.\n\nSigned-off-by: Viorel Suman <viorel.suman@nxp.com>\nSigned-off-by: Ye Li <ye.li@nxp.com>\nSigned-off-by: Simona Toaca <simona.toaca@nxp.com>\n---\n arch/arm/mach-imx/Kconfig  |  11 ++++\n arch/arm/mach-imx/Makefile |   1 +\n arch/arm/mach-imx/cmd_qb.c | 102 +++++++++++++++++++++++++++++++++++++\n 3 files changed, 114 insertions(+)\n create mode 100644 arch/arm/mach-imx/cmd_qb.c",
    "diff": "diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig\nindex bb62a0cf2f6..a40baf24631 100644\n--- a/arch/arm/mach-imx/Kconfig\n+++ b/arch/arm/mach-imx/Kconfig\n@@ -80,6 +80,17 @@ config IMX_QB\n \t  memory to non-volatile storage. OEI uses the saved data to\n \t  run Quickboot flow and skip re-training the DDR PHY.\n \n+config CMD_IMX_QB\n+\tbool \"Support the 'qb' command\"\n+\tdefault y\n+\tdepends on IMX_QB\n+\thelp\n+\t  Enable qb command to write/erase DDR quick boot training\n+\t  data to/from a chosen boot device. Using 'qb save/erase'\n+\t  without arguments implies using the current boot device's\n+\t  first bootable partition (e.g. boot0 for eMMC). For use in\n+\t  uuu scripts, the boot device must be specified explicitly.\n+\n config CMD_BMODE\n \tbool \"Support the 'bmode' command\"\n \tdefault y\ndiff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile\nindex bf6820de655..43febc10460 100644\n--- a/arch/arm/mach-imx/Makefile\n+++ b/arch/arm/mach-imx/Makefile\n@@ -80,6 +80,7 @@ endif\n ifneq ($(CONFIG_XPL_BUILD),y)\n obj-$(CONFIG_CMD_BMODE) += cmd_bmode.o\n obj-$(CONFIG_CMD_HDMIDETECT) += cmd_hdmidet.o\n+obj-$(CONFIG_CMD_IMX_QB) += cmd_qb.o\n obj-$(CONFIG_CMD_DEKBLOB) += cmd_dek.o\n obj-$(CONFIG_CMD_NANDBCB) += cmd_nandbcb.o\n endif\ndiff --git a/arch/arm/mach-imx/cmd_qb.c b/arch/arm/mach-imx/cmd_qb.c\nnew file mode 100644\nindex 00000000000..633d83d3abd\n--- /dev/null\n+++ b/arch/arm/mach-imx/cmd_qb.c\n@@ -0,0 +1,102 @@\n+// SPDX-License-Identifier: GPL-2.0+\n+/**\n+ * Copyright 2024-2026 NXP\n+ */\n+#include <command.h>\n+#include <spl.h>\n+#include <stdlib.h>\n+\n+#include <asm/mach-imx/boot_mode.h>\n+#include <asm/mach-imx/sys_proto.h>\n+#include <asm/mach-imx/qb.h>\n+\n+static void parse_qb_args(int argc, char * const argv[],\n+\t\t\t  const char **ifname, const char **dev)\n+{\n+\t/* qb save/erase -> use boot device */\n+\tif (argc < 2) {\n+\t\t*ifname = \"auto\";\n+\t\treturn;\n+\t}\n+\n+\t*ifname = argv[1];\n+\n+\tif (argc == 3)\n+\t\t*dev = argv[2];\n+}\n+\n+static int do_qb(struct cmd_tbl *cmdtp, int flag, int argc,\n+\t\t char * const argv[], bool save)\n+{\n+\tconst char *ifname, *dev;\n+\n+\tparse_qb_args(argc, argv, &ifname, &dev);\n+\n+\tif (imx_qb(ifname, dev, save))\n+\t\treturn CMD_RET_FAILURE;\n+\n+\treturn CMD_RET_SUCCESS;\n+}\n+\n+static int do_qb_check(struct cmd_tbl *cmdtp, int flag,\n+\t\t       int argc, char * const argv[])\n+{\n+\treturn imx_qb_check() ? CMD_RET_SUCCESS : CMD_RET_FAILURE;\n+}\n+\n+static int do_qb_save(struct cmd_tbl *cmdtp, int flag,\n+\t\t      int argc, char * const argv[])\n+{\n+\treturn do_qb(cmdtp, flag, argc, argv, true);\n+}\n+\n+static int do_qb_erase(struct cmd_tbl *cmdtp, int flag,\n+\t\t       int argc, char * const argv[])\n+{\n+\treturn do_qb(cmdtp, flag, argc, argv, false);\n+}\n+\n+static struct cmd_tbl cmd_qb[] = {\n+\tU_BOOT_CMD_MKENT(check, 1, 1, do_qb_check, \"\", \"\"),\n+\tU_BOOT_CMD_MKENT(save,  3, 1, do_qb_save,  \"\", \"\"),\n+\tU_BOOT_CMD_MKENT(erase, 3, 1, do_qb_erase, \"\", \"\"),\n+};\n+\n+static int do_qbops(struct cmd_tbl *cmdtp, int flag, int argc,\n+\t\t    char *const argv[])\n+{\n+\tstruct cmd_tbl *cp;\n+\n+\tcp = find_cmd_tbl(argv[1], cmd_qb, ARRAY_SIZE(cmd_qb));\n+\n+\t/* Drop the qb command */\n+\targc--;\n+\targv++;\n+\n+\tif (!cp) {\n+\t\tprintf(\"qb: %s: command not found\\n\", argv[0] ? argv[0] : \" \");\n+\t\treturn CMD_RET_USAGE;\n+\t}\n+\n+\tif (argc > cp->maxargs) {\n+\t\tprintf(\"qb %s: too many arguments: %d > %d\\n\", cp->name,\n+\t\t       argc - 1, cp->maxargs - 1);\n+\t\treturn CMD_RET_USAGE;\n+\t}\n+\n+\tif (flag == CMD_FLAG_REPEAT && !cmd_is_repeatable(cp)) {\n+\t\tprintf(\"qb %s: repeat flag set but command is not repeatable\\n\",\n+\t\t       cp->name);\n+\t\treturn CMD_RET_SUCCESS;\n+\t}\n+\n+\treturn cp->cmd(cmdtp, flag, argc, argv);\n+}\n+\n+U_BOOT_CMD(\n+\tqb, 4, 1, do_qbops,\n+\t\"DDR Quick Boot sub system\",\n+\t\"check - check if quick boot data is stored in mem by training flow\\n\"\n+\t\"qb save [interface] [dev]  - save quick boot data in NVM => trigger quick boot flow\\n\"\n+\t\"qb erase [interface] [dev] - erase quick boot data from NVM => trigger training flow\\n\"\n+);\n",
    "prefixes": [
        "v4",
        "2/4"
    ]
}