get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2223355,
    "url": "http://patchwork.ozlabs.org/api/patches/2223355/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/9fab19ee4c755f9cb2abf55494541fcadff46cbd.1776231967.git.jan.kiszka@siemens.com/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api",
        "name": "QEMU Development",
        "link_name": "qemu-devel",
        "list_id": "qemu-devel.nongnu.org",
        "list_email": "qemu-devel@nongnu.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<9fab19ee4c755f9cb2abf55494541fcadff46cbd.1776231967.git.jan.kiszka@siemens.com>",
    "list_archive_url": null,
    "date": "2026-04-15T05:46:07",
    "name": "[2/2] hw/sd/sdcard: Add support for pre-setting the authentication key",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "4b9ac04e53e3a3df9099860756102ceec6381e6c",
    "submitter": {
        "id": 710,
        "url": "http://patchwork.ozlabs.org/api/people/710/?format=api",
        "name": "Jan Kiszka",
        "email": "jan.kiszka@siemens.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/9fab19ee4c755f9cb2abf55494541fcadff46cbd.1776231967.git.jan.kiszka@siemens.com/mbox/",
    "series": [
        {
            "id": 499926,
            "url": "http://patchwork.ozlabs.org/api/series/499926/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=499926",
            "date": "2026-04-15T05:46:05",
            "name": "sd: Small improvements around RPMB emulation",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/499926/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2223355/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2223355/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>",
        "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 secure) header.d=siemens.com header.i=jan.kiszka@siemens.com\n header.a=rsa-sha256 header.s=fm2 header.b=ZXE2Q9H1;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"
        ],
        "Received": [
            "from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fwVm262YFz1yHM\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 15 Apr 2026 15:57:22 +1000 (AEST)",
            "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wCtEa-0007Fy-6Y; Wed, 15 Apr 2026 01:56:20 -0400",
            "from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from\n <fm-294854-2026041505460989a3cfb7970002079b-q97qC2@rts-flowmailer.siemens.com>)\n id 1wCtEY-0007FP-9X\n for qemu-devel@nongnu.org; Wed, 15 Apr 2026 01:56:18 -0400",
            "from mta-65-226.siemens.flowmailer.net ([185.136.65.226])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from\n <fm-294854-2026041505460989a3cfb7970002079b-q97qC2@rts-flowmailer.siemens.com>)\n id 1wCtEV-000506-VM\n for qemu-devel@nongnu.org; Wed, 15 Apr 2026 01:56:18 -0400",
            "by mta-65-226.siemens.flowmailer.net with ESMTPSA id\n 2026041505460989a3cfb7970002079b for <qemu-devel@nongnu.org>;\n Wed, 15 Apr 2026 07:46:09 +0200"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm2;\n d=siemens.com; i=jan.kiszka@siemens.com;\n h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To;\n bh=VIy4BuoOYDrOsEWURNMpXvgUEQxseoHsEGpeQhJpWqM=;\n b=ZXE2Q9H1I7/by0OxV5ZD8mUpyk0qUpyaxyIru6L3T+ebOG9rB5lIlcUqzXE4dVq2v5DoG8\n zQ8WmFQNvSf+XvGBCC2tRpMjaAV8FSRHWz449y3xpMscjWJXC8gVoE7M3yMzfWRy5mBnykA5\n ejX5YXIlJVkMtywSoTGD8yFPEpv3jjd/Wtw++K9KM6OeAQXy9nzV76YtBdw3v+Hb8qelotsp\n eiXA4I354IfXgYOdXvGZbAmjNIa0uBsN4YXhw8wh56IBKmzmw4bz8Q4oDuCS/+W7NVCibv3h\n i/gzoU3mjreodoIzIuMj5xSsMTaD335rY1s1WdAawBNZ4q8flcxMgMsg==;",
        "From": "Jan Kiszka <jan.kiszka@siemens.com>",
        "To": "qemu-devel <qemu-devel@nongnu.org>",
        "Cc": "=?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>,\n Bin Meng <bmeng.cn@gmail.com>, qemu-block@nongnu.org,\n Ilias Apalodimas <ilias.apalodimas@linaro.org>,\n =?utf-8?q?Alex_Benn=C3=A9e?= <alex.bennee@linaro.org>, =?utf-8?q?Jan_L?=\n\t=?utf-8?q?=C3=BCbbe?= <jlu@pengutronix.de>,\n Jerome Forissier <jerome.forissier@linaro.org>,\n Jens Wiklander <jens.wiklander@linaro.org>",
        "Subject": "[PATCH 2/2] hw/sd/sdcard: Add support for pre-setting the\n authentication key",
        "Date": "Wed, 15 Apr 2026 07:46:07 +0200",
        "Message-ID": "\n <9fab19ee4c755f9cb2abf55494541fcadff46cbd.1776231967.git.jan.kiszka@siemens.com>",
        "In-Reply-To": "<cover.1776231967.git.jan.kiszka@siemens.com>",
        "References": "<cover.1776231967.git.jan.kiszka@siemens.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-Flowmailer-Platform": "Siemens",
        "Feedback-ID": "519:519-294854:519-21489:flowmailer",
        "Received-SPF": "pass client-ip=185.136.65.226;\n envelope-from=fm-294854-2026041505460989a3cfb7970002079b-q97qC2@rts-flowmailer.siemens.com;\n helo=mta-65-226.siemens.flowmailer.net",
        "X-Spam_score_int": "-20",
        "X-Spam_score": "-2.1",
        "X-Spam_bar": "--",
        "X-Spam_report": "(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,\n SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no",
        "X-Spam_action": "no action",
        "X-BeenThere": "qemu-devel@nongnu.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "qemu development <qemu-devel.nongnu.org>",
        "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>",
        "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>",
        "List-Post": "<mailto:qemu-devel@nongnu.org>",
        "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>",
        "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>",
        "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org",
        "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"
    },
    "content": "From: Jan Kiszka <jan.kiszka@siemens.com>\n\nIn contrast to real eMMCs, we are not (yet) persisting the full state\nof the device. This particularly includes the authentication key used\nfor RPMB access, complicating testing of firmware images which do not\nsupport initial provisioning of the key.\n\nOne way to address this would be, e.g., extending the eMMC disk image\nwith a special sector to store further state. A simpler approach is used\nhere: Add another device property that allows to specify the\nauthentication key, bringing up the eMMC as if the key has already been\nprovisioned before.\n\nThis is how to tell qemu to use the OP-TEE test key:\n\n-device emmc,[...],auth-key=D3EB3EC36E334C9F988CE2C0B85954610D2BCF8664844DF2AB56E6C61BB701E4\n\nOr use this for machine-configured eMMCs:\n\n-global emmc.auth-key=D3EB3EC36E334C9F988CE2C0B85954610D2BCF8664844DF2AB56E6C61BB701E4\n\nSigned-off-by: Jan Kiszka <jan.kiszka@siemens.com>\n---\n hw/sd/sd.c | 23 +++++++++++++++++++++++\n 1 file changed, 23 insertions(+)",
    "diff": "diff --git a/hw/sd/sd.c b/hw/sd/sd.c\nindex 37f6e0702b..13ea54df38 100644\n--- a/hw/sd/sd.c\n+++ b/hw/sd/sd.c\n@@ -205,6 +205,7 @@ struct SDState {\n     QEMUTimer *ocr_power_timer;\n     uint8_t dat_lines;\n     bool cmd_line;\n+    char *preset_auth_key;\n };\n \n static void sd_realize(DeviceState *dev, Error **errp);\n@@ -3132,6 +3133,27 @@ static void sd_realize(DeviceState *dev, Error **errp)\n                           \"The RPMB partition size must be multiples of 128K\"\n                           \"and not larger than 16384K.\\n\");\n     }\n+    if (sd_is_emmc(sd) && sd->preset_auth_key) {\n+        if (strlen(sd->preset_auth_key) != 64) {\n+            error_setg(errp,\n+                       \"Authentication key must be 32 bytes long, \"\n+                       \"encoded hexadecimally\");\n+            return;\n+        }\n+\n+        char *pos = sd->preset_auth_key;\n+        unsigned int n;\n+        for (n = 0; n < RPMB_KEY_MAC_LEN; n++, pos += 2) {\n+            int chrs;\n+            if (sscanf(pos, \"%02hhx%n\", &sd->rpmb.key[n], &chrs) != 1 ||\n+                chrs != 2) {\n+                error_setg(errp,\n+                           \"Authentication key contains invalid characters\");\n+                return;\n+            }\n+        }\n+        sd->rpmb.key_set = 1;\n+    }\n }\n \n static void emmc_realize(DeviceState *dev, Error **errp)\n@@ -3156,6 +3178,7 @@ static const Property emmc_properties[] = {\n     DEFINE_PROP_UINT64(\"boot-partition-size\", SDState, boot_part_size, 0),\n     DEFINE_PROP_UINT8(\"boot-config\", SDState, boot_config, 0x0),\n     DEFINE_PROP_UINT64(\"rpmb-partition-size\", SDState, rpmb_part_size, 0),\n+    DEFINE_PROP_STRING(\"auth-key\", SDState, preset_auth_key),\n };\n \n static void sdmmc_common_class_init(ObjectClass *klass, const void *data)\n",
    "prefixes": [
        "2/2"
    ]
}