{"id":2225497,"url":"http://patchwork.ozlabs.org/api/patches/2225497/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260421053140.752059-5-joel@jms.id.au/","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/projects/14/?format=json","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":"<20260421053140.752059-5-joel@jms.id.au>","list_archive_url":null,"date":"2026-04-21T05:31:29","name":"[v3,04/13] hw/riscv/boot: Provide a simple halting payload","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"d35c9e676966382ef502d015b8aaa8fcc3ab89ee","submitter":{"id":48628,"url":"http://patchwork.ozlabs.org/api/people/48628/?format=json","name":"Joel Stanley","email":"joel@jms.id.au"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260421053140.752059-5-joel@jms.id.au/mbox/","series":[{"id":500733,"url":"http://patchwork.ozlabs.org/api/series/500733/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=500733","date":"2026-04-21T05:31:26","name":"hw/riscv: Add the Tenstorrent Atlantis machine","version":3,"mbox":"http://patchwork.ozlabs.org/series/500733/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2225497/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2225497/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=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=O92i3bQT;\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 4g09yF4Wtvz1yJG\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 15:33:56 +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 1wF3ji-0000Tb-Tn; Tue, 21 Apr 2026 01:33:27 -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 <joel.stan@gmail.com>)\n id 1wF3jg-0000SF-JE\n for qemu-devel@nongnu.org; Tue, 21 Apr 2026 01:33:25 -0400","from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <joel.stan@gmail.com>)\n id 1wF3jf-0004QO-0s\n for qemu-devel@nongnu.org; Tue, 21 Apr 2026 01:33:24 -0400","by mail-pj1-x102b.google.com with SMTP id\n 98e67ed59e1d1-35fc258aaa4so2359402a91.2\n for <qemu-devel@nongnu.org>; Mon, 20 Apr 2026 22:33:22 -0700 (PDT)","from donnager-debian.. ([203.221.103.1])\n by smtp.gmail.com with ESMTPSA id\n 98e67ed59e1d1-36141898ebasm12472308a91.7.2026.04.20.22.33.17\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Mon, 20 Apr 2026 22:33:20 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20251104; t=1776749602; x=1777354402; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date\n :message-id:reply-to;\n bh=UOf+lRYb8kBYFx9GhbOqJp0Zp/ZahLQSb+Dx2wr2ujs=;\n b=O92i3bQT0LnSoQ95Y8TW9sugIOMFp2usuxLSRmUwiqd1ZZSW0ai6zfyOVt4xMmcvrr\n Lz9cC7mn/ghH8/arYX3H3TO0ghrFqdNmBcS7/FMV614mhFf9OcTo9i/aF9oj/DHaGKdu\n joOwO2SUq4kTWAIaJpwi3JmoEr9oOG2b0RgHDprGB9k6qdtoKxZ7IifWuCu+Qj1uOz/W\n B0qUHSI2TGFzUqhiANCeYgrnCArJkzOYVvjkto/169UBwtga8GxWs7JmaomWfXMWcU5Y\n zAEpGMmTC2UM+tcQiAOjTAaXVmotIZcgUZWXiLEP8th/U91EYftknczcB86KLdZsQv5H\n E8hw==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776749602; x=1777354402;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:sender:x-gm-gg\n :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;\n bh=UOf+lRYb8kBYFx9GhbOqJp0Zp/ZahLQSb+Dx2wr2ujs=;\n b=IkyxSgdio4xn3d/KvtK+J9MPknjDiW8/HoHMq80nT+OcGtCI4VR28PJKEvL3h2BRxM\n 5BX/ERRb6R+btdDwA+YihrZYmQFaemtC7Gq91V2586U0BFagT4p/5WdMDi17Mxn3nnV4\n fe0ov3gw5PGUgFcCZbag2HUijbL2LFkJfLZVqgEdtTa8hp97j1e9GjtvxkxsBTOtY/+Y\n K1Pg42WhMHwMUXSnvFzKppEvSV15s6kh2kmWXU0uFsIUAPaWgz8mnyT+8GsHvJ3c6F79\n KoQVxnvIjEQq2bWhQ5771WQdmsB1ZxOmYGcNLOT5EMM4x3AAePwfZ4BxwA1MXO4uSShR\n Iy7g==","X-Forwarded-Encrypted":"i=1;\n AFNElJ/ZkYlv1TXrtKx3SUwz6DSZPHjqvxVVLZ9ubS1nj4ZsBOMIYFhNT+5I7IyYem0kY+XzTvSlU9rsgjx/@nongnu.org","X-Gm-Message-State":"AOJu0Yzi4JjcqmjSMqO/OzgGJzd1b3BKfXIpshTcEs6bUV9mRX5EL2Oa\n 7aY1y5wrmsx0ysyydSukgor81AR7TEiPyVtaDF62oMguYs/ozZsSA+tf","X-Gm-Gg":"AeBDietmlcwFPms1xYMG5ClEYG4pUkgRPwhGCwnGouTygImkyVHMSyxmj/2LBkrSXWm\n OORXM7i+jcXIumlSnQtXF1/nP+HuYOScX46XW9yLQ90QEkkzyT03csaRUD5tJ2VUwSYyOTAPS8n\n c0fEj7/NWTjL8twf3CaRlXLUWTYQChZRYb52f6bFGUzHutFE2UJQxjuw+9MwSCxboA0yNj1MrI5\n KrV2cwzQtxpBpMxVlaT5gPUDu+PxkYCimGADGXXmgaWqQrm4wF19gPatEEL9XPLPE1cb/JZCcj6\n SD7ngpI8N/K6Ubtl/edT+PPbZck3ztNYHZnbLLWWqRGYPCu4mBq92J/3cOclza6idjXTujizlPP\n Hne1V81EJ4PxSE4lb8nAwRGTefy33R9IqSeaIh6S9XIlfn3zTs9xYeYs/Mb72OsW6Bwl/IasG44\n /Tksc/NU96KCbvtxHOMcjx+NbhGn7LQTPFiqCTJLsMzzYTaC+lIAleNl2YP30dFq48ghlDGlEqc\n Z7VyzXnMt2UmQk06t1zSUNF6ST2iDLFAHL7eVvywQtX+pZ7","X-Received":"by 2002:a17:90b:2fc8:b0:35e:5a4c:9069 with SMTP id\n 98e67ed59e1d1-3614048a431mr16791897a91.14.1776749601522;\n Mon, 20 Apr 2026 22:33:21 -0700 (PDT)","From":"Joel Stanley <joel@jms.id.au>","To":"Alistair Francis <alistair.francis@wdc.com>,\n Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>","Cc":"Nicholas Piggin <npiggin@gmail.com>, Michael Ellerman <mpe@kernel.org>,\n Joel Stanley <jms@oss.tenstorrent.com>,\n Anirudh Srinivasan <asrinivasan@oss.tenstorrent.com>,\n qemu-riscv@nongnu.org, qemu-devel@nongnu.org","Subject":"[PATCH v3 04/13] hw/riscv/boot: Provide a simple halting payload","Date":"Tue, 21 Apr 2026 15:31:29 +1000","Message-ID":"<20260421053140.752059-5-joel@jms.id.au>","X-Mailer":"git-send-email 2.47.3","In-Reply-To":"<20260421053140.752059-1-joel@jms.id.au>","References":"<20260421053140.752059-1-joel@jms.id.au>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Received-SPF":"pass client-ip=2607:f8b0:4864:20::102b;\n envelope-from=joel.stan@gmail.com; helo=mail-pj1-x102b.google.com","X-Spam_score_int":"-16","X-Spam_score":"-1.7","X-Spam_bar":"-","X-Spam_report":"(-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.001,\n FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.25,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=no 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: Nicholas Piggin <npiggin@gmail.com>\n\nOpenSBI hangs before any console output if the domain init code sees the\nnext stage is not in an executable region.\n\nIf no kernel payload is provided to QEMU, the next stage address is\nNULL, and the riscv virt machine memory map ends up covering the 0\naddress with the catch all S-mode RWX region and so OpenSBI prints\nconsole messages and does not hang until the next stage boot.\n\nThe soon to be added Tenstorrent Atlantis board address map has RAM\nstarting at 0 and it loads OpenSBI there, so it is M-mode and not\naccessible by S-mode, tripping the early check and hang.\n\nAdd a helper to set up a simple payload that gets OpenSBI messages\nto console.\n\nSigned-off-by: Nicholas Piggin <npiggin@gmail.com>\nReviewed-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>\nSigned-off-by: Joel Stanley <joel@jms.id.au>\n---\nv3: MachineState argument was unused\n---\n include/hw/riscv/boot.h |  1 +\n hw/riscv/boot.c         | 20 ++++++++++++++++++++\n 2 files changed, 21 insertions(+)","diff":"diff --git a/include/hw/riscv/boot.h b/include/hw/riscv/boot.h\nindex fb90bf12399e..a1eb377474b9 100644\n--- a/include/hw/riscv/boot.h\n+++ b/include/hw/riscv/boot.h\n@@ -78,6 +78,7 @@ void riscv_setup_rom_reset_vec(MachineState *machine, RISCVHartArrayState *harts\n                                hwaddr rom_base, hwaddr rom_size,\n                                uint64_t kernel_entry,\n                                uint64_t fdt_load_addr);\n+void riscv_setup_halting_payload(RISCVBootInfo *info, hwaddr addr);\n void riscv_rom_copy_firmware_info(MachineState *machine,\n                                   RISCVHartArrayState *harts,\n                                   hwaddr rom_base,\ndiff --git a/hw/riscv/boot.c b/hw/riscv/boot.c\nindex 3ea95c175c14..3a97fd1441f7 100644\n--- a/hw/riscv/boot.c\n+++ b/hw/riscv/boot.c\n@@ -518,6 +518,26 @@ void riscv_setup_rom_reset_vec(MachineState *machine, RISCVHartArrayState *harts\n                                  kernel_entry);\n }\n \n+/* Simple payload so OpenSBI does not hang early with no output */\n+void riscv_setup_halting_payload(RISCVBootInfo *info, hwaddr addr)\n+{\n+    int i;\n+    uint32_t payload_vec[] = {\n+        0x10500073,                     /* 1: wfi           */\n+        0xffdff06f,                     /* j       1b       */\n+    };\n+    /* copy in the payload vector in little_endian byte order */\n+    for (i = 0; i < ARRAY_SIZE(payload_vec); i++) {\n+        payload_vec[i] = cpu_to_le32(payload_vec[i]);\n+    }\n+    rom_add_blob_fixed_as(\"mrom.payload\", payload_vec, sizeof(payload_vec),\n+                          addr, &address_space_memory);\n+\n+    info->kernel_size = sizeof(payload_vec);\n+    info->image_low_addr = addr;\n+    info->image_high_addr = info->image_low_addr + info->kernel_size;\n+}\n+\n void riscv_setup_direct_kernel(hwaddr kernel_addr, hwaddr fdt_addr)\n {\n     CPUState *cs;\n","prefixes":["v3","04/13"]}