get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2218991,
    "url": "http://patchwork.ozlabs.org/api/patches/2218991/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/uboot/patch/18e5f58dc65283a73c29c4b603a5b56f7c4d3e8a.1775121078.git.simona.toaca@nxp.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": "<18e5f58dc65283a73c29c4b603a5b56f7c4d3e8a.1775121078.git.simona.toaca@nxp.com>",
    "list_archive_url": null,
    "date": "2026-04-02T09:40:44",
    "name": "[v3,2/6] arm: mach-imx: Add command to expose QB functionality",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": false,
    "hash": "6aaa91ab2621133c2a28ce11a3cfccde8d659e39",
    "submitter": {
        "id": 92829,
        "url": "http://patchwork.ozlabs.org/api/people/92829/?format=api",
        "name": "Simona Toaca",
        "email": "simona.toaca@oss.nxp.com"
    },
    "delegate": {
        "id": 151988,
        "url": "http://patchwork.ozlabs.org/api/users/151988/?format=api",
        "username": "festevam",
        "first_name": "Fabio",
        "last_name": "Estevam",
        "email": "festevam@gmail.com"
    },
    "mbox": "http://patchwork.ozlabs.org/project/uboot/patch/18e5f58dc65283a73c29c4b603a5b56f7c4d3e8a.1775121078.git.simona.toaca@nxp.com/mbox/",
    "series": [
        {
            "id": 498456,
            "url": "http://patchwork.ozlabs.org/api/series/498456/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/uboot/list/?series=498456",
            "date": "2026-04-02T09:40:42",
            "name": "imx9{4,5,52}: Add Quickboot support",
            "version": 3,
            "mbox": "http://patchwork.ozlabs.org/series/498456/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2218991/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2218991/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=EuIyl5Ml;\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=\"EuIyl5Ml\";\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 4fmc5D2zG6z1yCs\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 02 Apr 2026 20:29:52 +1100 (AEDT)",
            "from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id 73FF28414B;\n\tThu,  2 Apr 2026 11:29:43 +0200 (CEST)",
            "by phobos.denx.de (Postfix, from userid 109)\n id AEB4484198; Thu,  2 Apr 2026 11:29:41 +0200 (CEST)",
            "from MRWPR03CU001.outbound.protection.outlook.com\n (mail-francesouthazlp170110003.outbound.protection.outlook.com\n [IPv6:2a01:111:f403:c207::3])\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 4D4AB84150\n for <u-boot@lists.denx.de>; Thu,  2 Apr 2026 11:29:34 +0200 (CEST)",
            "from VI0PR04MB11917.eurprd04.prod.outlook.com (2603:10a6:800:306::9)\n by AM7PR04MB7095.eurprd04.prod.outlook.com (2603:10a6:20b:11c::21)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.28; Thu, 2 Apr\n 2026 09:29:31 +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.9769.016; Thu, 2 Apr 2026\n 09:29:30 +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=AjJJI5M6CtXqGOO+9vZJTzB6Rq6rLrdssI/+ZR5QNQarrDDdLG9q5wA7ccnJVsrUDjpdvIQZaZ8A1SLhBYolMAVO4rWDGntE1+sV2pke1x3z+apuXuPQcFBfclq2ITArCviFIN+J35kb/QI7zFRcx5OUyuMFq+QSPqJkbhePPvyu50I9BCEIcAHlUavVlAmQgAffNRhXAmse4E4DFYCV/LKJIvZoOoHzW0EPz9R1BIaFUfCNfQMxcuGqOCxEOVzJNihymb608uxKyfkpBSTeVJ/h24Jpn4qjPP3bo7os03zjMYAD9DD6Bh5gMmahyDsn7qYSGsPR2bpyB8IsZ83/FA==",
        "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=jkExyOPCsQcfK1GFpAgs0n5uF/QaRcnHw7H7NZejhTQ=;\n b=BRal8ba3mIkbaQ1Pi3rR6kONeTdV2Znil5uyuJrinJZhHE3YhtI3z3Aufc358Y18UdURJ/5qAihTwmIS2KrsBCAOIKrhWNIv4rDJn6KMyrfL7i2Ne8FGHg3zmy8zmtucZ23427zNdY0J9/OqYkSOxMYv9IOxlIbFYml9qGdiGdxosxJqMihPjvxR1+S+BnBDNg2jiAWKVOylHRwRNLsqimpgP0F6twmajblMsSZ4ecX3BpiwPgL3FHUQkgLkgFHCppUjC/34squYE6KuY1B8wo93mVmZNDSonblGIw2imgOiKO+0yHM7feb5zw4BdopANcPWaWR1PzZW1HYQdgiD/Q==",
        "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=jkExyOPCsQcfK1GFpAgs0n5uF/QaRcnHw7H7NZejhTQ=;\n b=EuIyl5MlkiN8wwhbQVLZSp7QRVJua062TxDeypj8t5b6HBqBnvXRXgqIITWhOtlUEec6On585KHe/R5pG3Q/1eh82M74U7xDM1cFOMAjAsvGkGdD6mzh6WPKWru67Qy1V5DzbfvQbSPejpYjTqP+DTztKo5+97RCMpKqwJYPFMM3vbx5wDtBoATqSLlpmCju+fIpLDrB5wnegE5Ks/ac9BDXys/302m1Glvb3jtOP3oOQ4mPOH0sqbVB8b5C/hrObSMLj3hbTnNlUdZbl14C+GJzI/UwZvzQWYlj8MQ0HUVwH9K2SmNGwiB4AlJEOw3FMlCJ3An1hHKtAARrdM1lZA==",
        "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, viorel.suman@nxp.com, simona.toaca@nxp.com,\n ye.li@nxp.com, ping.bai@nxp.com, marex@nabladev.com,\n sebastien.szymanski@armadeus.com, ravi@prevas.dk,\n joao.goncalves@toradex.com, ji.luo@nxp.com, semen.protsenko@linaro.org,\n tharvey@gateworks.com, qijian.guo@nxp.com",
        "Subject": "[PATCH v3 2/6] arm: mach-imx: Add command to expose QB functionality",
        "Date": "Thu,  2 Apr 2026 12:40:44 +0300",
        "Message-ID": "\n <18e5f58dc65283a73c29c4b603a5b56f7c4d3e8a.1775121078.git.simona.toaca@nxp.com>",
        "X-Mailer": "git-send-email 2.43.0",
        "In-Reply-To": "<cover.1775121078.git.simona.toaca@nxp.com>",
        "References": "<cover.1775121078.git.simona.toaca@nxp.com>",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "FR4P281CA0122.DEUP281.PROD.OUTLOOK.COM\n (2603:10a6:d10:b9::6) 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_|AM7PR04MB7095:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "60a8f2c0-0083-42d4-6140-08de909a57e1",
        "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|19092799006|376014|1800799024|18002099003|22082099003|56012099003;",
        "X-Microsoft-Antispam-Message-Info": "\n SwHgqJrvGsiiwW250QwCE04mi7Yx16qoRadI52LUHglOvi58Hx3vuDjoIaVHSRt4OkHee4akWeIS34iOyPF0K7PyUmkAoeG/HmRnk4LTGlCFy8v5o2QagWzZlAGJiQOzuYXy4L9+SY9huBs8iC85SgqvLoL1EIdduZtB6ZjxpviihK6DME4LYd+TE4eKrQRsfKQplbbLouAgRTJ8mewMBFLzpEQ/o3iyyvciYWMQsW/NOj3e/saSqR3H8RIVmsG2PqeRhDVcSf1K9aibGkEaeTnj0FyYiaKl449SMBipT+0CKOQlqWkJdONzJbUIOuhRr87hq6h9uGr5t+NeSTf9+CiNoZQGQek6KB3qt0GCqPoYDyl7AQ3PB2ewFd+r1bUTxJJC9e1jTQWe8yJ/1WyxVaka6bltuGUhivcbOvHuEYO6LmfOsO0vXEuMQgkeJr+i7mfPzulUGcuHP+bHDqwOZ1ZiWqEeZe2bv7Y48MdB0cAiq+rJyl85sZuojyCfQM9s8DKDDR9aFSWa0dT9QKxCqK+lgIwHtQvPK6wlZcwCMXGpMJs8OkgpaMF06QklvybG4/BYU8MfLRgvY+5QbOH/KNi6p7rLlObAT685TcDHaZPmJxLIhRa6IkZZ52ngK++rKW5qbEFLNxfq/dSI70huljKtTJOKTBo0VonPoiLszz790+pBboXbogqL0WHyZiZ6V1mAPB8IXeyxhp5lcu31eoqnka5HZ27ZbRAROGlvTZg=",
        "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)(19092799006)(376014)(1800799024)(18002099003)(22082099003)(56012099003);\n DIR:OUT; SFP:1101;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "\n MLVgtgBVETcnWh7o6iHB9j29KHHuPdu7copWDSxpYQ91Mj/ocribV/f7/+wY8BYIJzLcq4EYBzCVT2q48hob0Eza5UnDiExFFiU0xiOyEhqrt+XLl8svFuxQJHpM+qaU6IhBFEumedAkaRjHchfdCK2sJMl0Sf9Cg/eby46+FCSJ+Wf1BsY3SmlGMhH2mC0KmPJs/uJIVhVpvMsNyFBnKbAW1swgmCDjGwVvTzJ5xBKz+fa041x0mV10N03AIkdNbWHVviLFyQT8+LwVeqDd9MfhBZ5PGeFLXnscnrVLc67zg84PfLAm5F283Q9KOFj5HOE5oILSbQHsG2jXriYoz8HHzg106U+Z1LaJLHE8kzJ8J3HvCJKr2T5Gy9PvPoJgal46Ezji15ZK/A33IYBRQP6HToqyRFRJrQbytHIkScWxdpRs4EiH+jqq5n/ARWCah9NXSAlHVhSFBilO4cZfechVNd3bCkUHF7RgOHA6XpZn0cjxhDCTx1t6tuzM4od0z/c9jJFKTdaoaCtrK6BWJonACUdIZZs6eUOCuufeUtHZWOLeZ/f/tIAEimiEtX2/4rkhUJ7pS8kxySg5uuF1iC3W+Gr+FNd0JdcggNokBQJWePat811EecjkX2lv/9SBmmvgYLkfsUtwKSKf7IbYL0wxFjFbQ3uXFnUloCO6BSYWWafU0MixMJlJAO2lDroKtNDrb9hlJm8VTCb0udV8ONxj7V05CIGo9QLIRkhRI+fwOqnAM697YzItRDaJ/UEGSrwH2U7LgEyQMeBlOGfS9u89ApDrseXHfjBNbsG3l4ajCRq5J5LwETgb3oAdWab4/LBUHNV6U0DtjUNT04nz09CBqZUlju6SndKbST2HE2jVpPiK8ZT09TaXhhiXtac2gszoU8I6uuoO7r1XrTXVfV2kOF/D8LxMz39XLNZHVzxJSH1mrMsV/odg5NW5Ra4zAOP5bd39489Hcy0N8ey5BXfzuMEI6Y/RJ6XU78OoNd2lGkCQPoLCDJBTMndLEui+/rfIiilEmTNmr7T1ZA2cFFGmC+WUufaH2whZPJYM4cW2BqtIWfZV1/OGQheQ0Vl1L23YDAstUvJxWjsAYrDd0CP7Wyx3loAzuuLWS2+DOaNhoNIKh87zEU/GULpwzXOqvNgabSKoN01Ied4Zivzmt66psa6k0mRT3vbUDd+aq1TBm5uuscgMe1VGvYzJJriiZMPF64lgOK9NtEuVTzMDyt47pj3I7bC9yCpxpR0VRJNX9aOPZ0XYdQfa+pixaplaKopGs+DyiepA64VBWVkc/2h2oWzUf/i0eAq0VfdRSXekbmJuxGOjJNSMUMymL9pEaaJcRAgbffxomUUvC6NXzKC7vJuYVHiSitHeG/Z/+Fwfj+CJA8tjHp3X25ZYCQCdiN/yJ6zAhQnEMByOeBmAk31DwFobWlTlaem8btyR1no7tbEQGkSB62Wx5JjpeXrqNr+lxGvyyU9QBDGJBlyXf4qiTxw/U06Ii13lnvc4D4ncb1GNFTooe9fsO2SIgQfwvVLmkkb6XrhCGmCcUhC5tseHxhEtPhSBm3F0U0icjlMrOboqzGGgNNOa0tdw3WibnfKGHBLY6xAtIjztIrWvczqahyFdWhipUEtADrt7K3QPrEmMcu+PSTSes5zYGVNWlTYOsGe22zYKWgWbWln/Z+l/Sq3KCSiDZkvJ6AHV7bUI5GTZbHQesue3PazURPBtRXyJqRxUTTGgCnxVPc5Zlg==",
        "X-OriginatorOrg": "oss.nxp.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 60a8f2c0-0083-42d4-6140-08de909a57e1",
        "X-MS-Exchange-CrossTenant-AuthSource": "VI0PR04MB11917.eurprd04.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "02 Apr 2026 09:29:30.8505 (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 X4dQzCXrr3uBzmGODNlBpeRFQquhVQZzj//kbTLT4GNm8hpWt/+SOZ3NoSypeQTXbEeAK/RcknaiKzKghTne/A==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "AM7PR04MB7095",
        "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      | 132 ++++++++++++++++++++++++++++++++\n arch/arm/mach-imx/imx9/Makefile |   4 +-\n 4 files changed, 147 insertions(+), 1 deletion(-)\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 e4014226582..48266cfd6e2 100644\n--- a/arch/arm/mach-imx/Kconfig\n+++ b/arch/arm/mach-imx/Kconfig\n@@ -71,6 +71,17 @@ config CSF_SIZE\n \t  Define the maximum size for Command Sequence File (CSF) binary\n \t  this information is used to define the image boot data.\n \n+config CMD_IMX_QB\n+\tbool \"Support the 'qb' command\"\n+\tdefault y\n+\tdepends on IMX94 || IMX95 || IMX952\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.\n+\t  For use in uuu scripts, the boot device must be specified\n+\t  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..33e987f18e0\n--- /dev/null\n+++ b/arch/arm/mach-imx/cmd_qb.c\n@@ -0,0 +1,132 @@\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 int get_board_boot_device(enum boot_device dev)\n+{\n+\tswitch (dev) {\n+\tcase SD1_BOOT:\n+\tcase MMC1_BOOT:\n+\t\treturn BOOT_DEVICE_MMC1;\n+\tcase SD2_BOOT:\n+\tcase MMC2_BOOT:\n+\t\treturn BOOT_DEVICE_MMC2;\n+\tcase USB_BOOT:\n+\t\treturn BOOT_DEVICE_BOARD;\n+\tcase QSPI_BOOT:\n+\t\treturn BOOT_DEVICE_SPI;\n+\tdefault:\n+\t\treturn BOOT_DEVICE_NONE;\n+\t}\n+}\n+\n+static void parse_qb_args(int argc, char * const argv[],\n+\t\t\t  int *qb_dev, int qb_bootdev)\n+{\n+\tlong dev = -1;\n+\tchar *interface = \"\";\n+\n+\tif (argc < 2) {\n+\t\t/* qb save -> use boot device */\n+\t\t*qb_dev = qb_bootdev;\n+\t} else {\n+\t\tinterface = argv[1];\n+\t}\n+\n+\tif (argc == 3)\n+\t\tdev = simple_strtol(argv[2], NULL, 10);\n+\n+\tif (!strcmp(interface, \"mmc\") && dev >= 0 &&\n+\t    dev <= (BOOT_DEVICE_MMC2_2 - BOOT_DEVICE_MMC1))\n+\t\t*qb_dev = BOOT_DEVICE_MMC1 + dev;\n+\telse if (!strcmp(interface, \"spi\"))\n+\t\t*qb_dev = BOOT_DEVICE_SPI;\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+\tint ret = CMD_RET_FAILURE;\n+\tenum boot_device boot_dev = UNKNOWN_BOOT;\n+\tint qb_dev = BOOT_DEVICE_NONE, qb_bootdev;\n+\n+\tboot_dev = get_boot_device();\n+\tqb_bootdev = get_board_boot_device(boot_dev);\n+\n+\tparse_qb_args(argc, argv, &qb_dev, qb_bootdev);\n+\n+\tret = qb(qb_dev, save);\n+\n+\treturn ret ? CMD_RET_FAILURE : 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 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+);\ndiff --git a/arch/arm/mach-imx/imx9/Makefile b/arch/arm/mach-imx/imx9/Makefile\nindex d2e44f0d5f9..3e323a714c1 100644\n--- a/arch/arm/mach-imx/imx9/Makefile\n+++ b/arch/arm/mach-imx/imx9/Makefile\n@@ -14,4 +14,6 @@ ifneq ($(CONFIG_SPL_BUILD),y)\n obj-y += imx_bootaux.o\n endif\n \n-obj-y += qb.o\n+ifneq ($(CONFIG_XPL_BUILD),y)\n+obj-$(CONFIG_CMD_IMX_QB) += qb.o\n+endif\n",
    "prefixes": [
        "v3",
        "2/6"
    ]
}