{"id":2228149,"url":"http://patchwork.ozlabs.org/api/1.1/patches/2228149/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260425131721.932250-5-joel@jms.id.au/","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/1.1/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":""},"msgid":"<20260425131721.932250-5-joel@jms.id.au>","date":"2026-04-25T13:17:10","name":"[v4,04/13] hw/riscv/boot: Provide a simple halting payload","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"ec4867e7b68e8a8514b6215225c8d7dba8557839","submitter":{"id":48628,"url":"http://patchwork.ozlabs.org/api/1.1/people/48628/?format=json","name":"Joel Stanley","email":"joel@jms.id.au"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260425131721.932250-5-joel@jms.id.au/mbox/","series":[{"id":501439,"url":"http://patchwork.ozlabs.org/api/1.1/series/501439/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=501439","date":"2026-04-25T13:17:08","name":"hw/riscv: Add the Tenstorrent Atlantis machine","version":4,"mbox":"http://patchwork.ozlabs.org/series/501439/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2228149/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2228149/checks/","tags":{},"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=IKjnjme/;\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 4g2r6m0ydxz1yHv\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 25 Apr 2026 23:20:32 +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 1wGcts-00075H-NW; Sat, 25 Apr 2026 09:18:24 -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 1wGctp-00074f-Dn\n for qemu-devel@nongnu.org; Sat, 25 Apr 2026 09:18:22 -0400","from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433])\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 1wGctn-0008TV-VP\n for qemu-devel@nongnu.org; Sat, 25 Apr 2026 09:18:21 -0400","by mail-pf1-x433.google.com with SMTP id\n d2e1a72fcca58-83177129e28so1195312b3a.1\n for <qemu-devel@nongnu.org>; Sat, 25 Apr 2026 06:18:18 -0700 (PDT)","from donnager-debian.. ([45.124.203.19])\n by smtp.gmail.com with ESMTPSA id\n d2e1a72fcca58-82f8e9f7735sm26898866b3a.21.2026.04.25.06.18.13\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Sat, 25 Apr 2026 06:18:17 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20251104; t=1777123098; x=1777727898; 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=sW0fdPqCEH1I1Gmqkpz2eOq8cT+yEGpRcyXw/JwbtO4=;\n b=IKjnjme/h7RX0D0ujU6/lH/j78aFVlxaAp4ky2jkkEwXP1EM4f1CBDfBc11yr08sJo\n on1VZYA5kZTPH4Fj93nkpQrPaiu5rykKlmySi1bEkhnQLNE9wx1LI0unHQnhA1/U8SV7\n n4laM9ajK4eYZ0W2lW7q94N4CgyZQByBFlL+eSRGzMoB28oCeDPStuaDqP8hp+Rndx0+\n UWCOiqqePtRSmKTfL++QbnlVCsZo5h+o8+4be8W9QvWM3ZbBE3BFyqsOV3sWTviuchJy\n I7vUeexXZND22QzFbMrrKN3f+g4L8hHfnkXianLY0P/iUW1KlyVfEuCrQOFreRHG5klz\n O4lg==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777123098; x=1777727898;\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=sW0fdPqCEH1I1Gmqkpz2eOq8cT+yEGpRcyXw/JwbtO4=;\n b=U8P8PyJQtpYlY48c1SmBz/oUUjqmZtBQZVRIg6zswYrERwW+2EJiGLq0ZEbvRZGGdr\n /7jF+2JubBzol0yo6cCV8qka5gUft4SmQY8JIiui9eMYxthQGCKdKQuMmuFWtFV5H2E3\n BDqkOk/o4AhCAFSIAnhvIr9qCvF/s621AbMrgbz8iodYkpYjiJT3cnABh3691nYc1sL9\n Dibhi+XjQ6gQ39gHlWdmeDTdBcn2BiMHn4vynxvToIPJDvwyLnGY3t0ccBHvMK/7Ihb8\n bK78aHyt9UoqDtpyhBf19BtIrOCUx9I46SbxHpr4NUOncEPB3PkIUblS0iHZtmAVsbG6\n 2QAA==","X-Forwarded-Encrypted":"i=1;\n AFNElJ83uU+kBeRyNZz7SyvHrIhYSdCEfL3ytwIUJmrw0unYu9P/OCup/J52EaK7kvPjF8rPmIx9M2TCYU0W@nongnu.org","X-Gm-Message-State":"AOJu0Yw5l20S5p3qgsXRjw8K/0jUdv77sthYX6tD4bVOl+ZkNQFVvJof\n w4ZvAcHtwkbc8KWzePUl4fR8zx4g9RQsqGAAtDKa3WGTwXAVkmzTYOc+","X-Gm-Gg":"AeBDiesrprv7oWSwRGHmbysiMxmRfPV9AEhYMCuhziBHHnEbwYyuXYRpjc7t0n3lNpU\n w36J3c2n29QpG0F+CVVTQyq/s8T0mfeU7HBzh9//E1WdBCf9iX/MAV5iFu5veZajooRzaPlHCZL\n eBt/NfDo7riqoRfpE3stfGSl21UmyOZ0Y5ZEFeMGqNuMq/VPUVhgeWsJ11djvJ4PVHVIgaPCGBB\n 0jjPsXvTcukB9EB4rrdCWoma5JPWUohWjV13Fp23mV9w0PcTAxvog7AY+rz5wep+jfnr2fSB/mX\n gTWYKbuBPBmpjY3Re1BTm9HYOk5FAemVuafvPtymlVTOsp/9zHSq7wdDqbT4M9C79lARpsZ9Zjz\n vsEqfxSbkUVSxSlvskN1mmzJ8WVT9sYYcD7Gu5JboR9aBykgdhu2QLn9MSYFMgHGKbaJ37MOPKr\n 22my70lKPSbWSlvUUpvrqn4RrT7caHA8npB9MOkg2li8QosOs+FrFBeniScMyR7KBfrfWICONgc\n 8Laoe+clBJLhzjJVwW7IWoZqHmm+vL6","X-Received":"by 2002:a05:6a00:2d03:b0:82d:6310:2efc with SMTP id\n d2e1a72fcca58-82f8c82d824mr36173369b3a.17.1777123097874;\n Sat, 25 Apr 2026 06:18:17 -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":"Chao Liu <chao.liu.zevorn@gmail.com>, Nicholas Piggin <npiggin@gmail.com>,\n Michael Ellerman <mpe@kernel.org>, Joel Stanley <jms@oss.tenstorrent.com>,\n Anirudh Srinivasan <asrinivasan@oss.tenstorrent.com>,\n Portia Stephens <portias@oss.tenstorrent.com>, qemu-riscv@nongnu.org,\n qemu-devel@nongnu.org","Subject":"[PATCH v4 04/13] hw/riscv/boot: Provide a simple halting payload","Date":"Sat, 25 Apr 2026 23:17:10 +1000","Message-ID":"<20260425131721.932250-5-joel@jms.id.au>","X-Mailer":"git-send-email 2.47.3","In-Reply-To":"<20260425131721.932250-1-joel@jms.id.au>","References":"<20260425131721.932250-1-joel@jms.id.au>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Received-SPF":"pass client-ip=2607:f8b0:4864:20::433;\n envelope-from=joel.stan@gmail.com; helo=mail-pf1-x433.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---\nv4: Make vec instructions const\nv3: MachineState argument was unused\n---\n include/hw/riscv/boot.h |  1 +\n hw/riscv/boot.c         | 16 ++++++++++++++++\n 2 files changed, 17 insertions(+)","diff":"diff --git a/include/hw/riscv/boot.h b/include/hw/riscv/boot.h\nindex b2ef64fb1d14..3dfb0e98db4c 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 4fbc778263cf..3c2501b3c721 100644\n--- a/hw/riscv/boot.c\n+++ b/hw/riscv/boot.c\n@@ -518,6 +518,22 @@ 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+    /* Store the payload vector in little_endian byte order */\n+    static const uint32_t payload_vec[] = {\n+        const_le32(0x10500073),         /* 1: wfi           */\n+        const_le32(0xffdff06f),         /* j       1b       */\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":["v4","04/13"]}