{"id":2220196,"url":"http://patchwork.ozlabs.org/api/patches/2220196/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260406154935.144674-6-djordje.todorovic@htecgroup.com/","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":"<20260406154935.144674-6-djordje.todorovic@htecgroup.com>","list_archive_url":null,"date":"2026-04-06T15:49:42","name":"[v6,5/7] hw/riscv: Make boot code endianness-aware at runtime","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"ba0ccfb5dd48d0afcbd389d69a86934930c7dc8a","submitter":{"id":90738,"url":"http://patchwork.ozlabs.org/api/people/90738/?format=json","name":"Djordje Todorovic","email":"Djordje.Todorovic@htecgroup.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260406154935.144674-6-djordje.todorovic@htecgroup.com/mbox/","series":[{"id":498877,"url":"http://patchwork.ozlabs.org/api/series/498877/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=498877","date":"2026-04-06T15:49:42","name":"Add RISC-V big-endian target support","version":6,"mbox":"http://patchwork.ozlabs.org/series/498877/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2220196/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2220196/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 unprotected) header.d=htecgroup.com header.i=@htecgroup.com\n header.a=rsa-sha256 header.s=selector1 header.b=u7rMRZLK;\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=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)","dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=htecgroup.com;"],"Received":["from lists.gnu.org (lists.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 4fqDLY6HMNz1yFt\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 07 Apr 2026 01:50:29 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1w9mD9-0005dd-QG; Mon, 06 Apr 2026 11:49:59 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <Djordje.Todorovic@htecgroup.com>)\n id 1w9mD8-0005cE-6V; Mon, 06 Apr 2026 11:49:58 -0400","from mail-swedencentralazlp170130007.outbound.protection.outlook.com\n ([2a01:111:f403:c202::7] helo=GVXPR05CU001.outbound.protection.outlook.com)\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <Djordje.Todorovic@htecgroup.com>)\n id 1w9mD6-00021U-F3; Mon, 06 Apr 2026 11:49:57 -0400","from GV2PR09MB8755.eurprd09.prod.outlook.com (2603:10a6:150:358::6)\n by VI1PR09MB6903.eurprd09.prod.outlook.com (2603:10a6:800:1e2::19)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.19; Mon, 6 Apr\n 2026 15:49:43 +0000","from GV2PR09MB8755.eurprd09.prod.outlook.com\n ([fe80::939c:95df:4890:ce63]) by GV2PR09MB8755.eurprd09.prod.outlook.com\n ([fe80::939c:95df:4890:ce63%3]) with mapi id 15.20.9769.014; Mon, 6 Apr 2026\n 15:49:43 +0000"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=gL6jfjb9/YfBTm0QCxXJKJX43bxbD7WC2UQNc9i4DHNc2HVB2idVXoHLWnQMpemqBZmwp5TEptkhCcF0sGZBRckec7VihvVoWCAQ76w34t27sAkov319kj/zPHWUfu62PlMtVWz7bXpyk2uvbp4Ncg+H+1mMgeHKMFjWiDMTjDxKRixPB2nIFz8mha7rD7uXPShstqbAFvtYjmZCR+CLnVqkZEGq3gSOkLcK6+Pyop2Xwy3yqS4Zr9HcbHilJEn9cSABbWfKhvZaEHqpU+iGFYTXk2m79Mxi7ZhBZKMo0OEBdYUEavdrR/ElIKoIlsg6PfJLWxYwqMph4bXRfoeBXQ==","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=pbfVXWr9+U6etvsznPf/5+PQydUm4sQ3DPy9B4dJuEk=;\n b=D9NHE1DQ2yO/l5eSpmh1sO6Kyjp1iG1LYOcos4ZgP9TspRFFmx1qAjpuv8JJec+apoT7RL2ZXr13R0lGLHIYdUZAgL4wiYq1XMaUFZDD/VT22A5+wZLV4HmkndfPvjF1vz+BAkrIXKSin9mthg5YVE5y0NfjyVbcRdiF+UQZB0auXYyjfYGq1mPs4T5WvFAHisFZZRhus6IjuO/iFS10T23jHtSGLqH7PSLOGLEYksiO5gYM9ZudwPef+pJuh0A8mu/ffLV8ncdHifEdluwKJRkKhzHwTgOQIJe6rIdq46ZeTOBZdTM38viHtQP8jxj9tgyFejz4GhMOrNiBdVlHWg==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=htecgroup.com; dmarc=pass action=none\n header.from=htecgroup.com; dkim=pass header.d=htecgroup.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=htecgroup.com;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=pbfVXWr9+U6etvsznPf/5+PQydUm4sQ3DPy9B4dJuEk=;\n b=u7rMRZLKj/KGn9QxcfkfLdkNFJASKXswINNuwIP32yRVdQQuTfqSDuB3iOEcv5u3DPutzK9+xLgnNbAZDnpzX2Rukc+PBrp4OmOGnGPVPAWpTJhAwaewp4BdlXbhFPdPhqjnCa/c5GCpqhnLcMXD+SS86qoBA5mjKP4WiYU/1hHGq3m7BqOpJkCretU/B6Wo7AuVzn9sQRI7cmQio1bveSy84k1T2LeGEhY2XTahXdP6jfRae85v5hcp0m5udd5UEr6LDwyvLADWNu+CZQK8DZRkgi6k/3vK/OEbAVUIgsuYpphpUFRD93l/bnwb/tEu5mN+R6BBzOaXvLJDiDhoBw==","From":"Djordje Todorovic <Djordje.Todorovic@htecgroup.com>","To":"\"qemu-devel@nongnu.org\" <qemu-devel@nongnu.org>","CC":"\"qemu-riscv@nongnu.org\" <qemu-riscv@nongnu.org>, \"cfu@mips.com\"\n <cfu@mips.com>, \"mst@redhat.com\" <mst@redhat.com>,\n \"marcel.apfelbaum@gmail.com\" <marcel.apfelbaum@gmail.com>,\n \"dbarboza@ventanamicro.com\" <dbarboza@ventanamicro.com>, \"philmd@linaro.org\"\n <philmd@linaro.org>, \"alistair23@gmail.com\" <alistair23@gmail.com>,\n \"thuth@redhat.com\" <thuth@redhat.com>, Djordje Todorovic\n <Djordje.Todorovic@htecgroup.com>","Subject":"[PATCH v6 5/7] hw/riscv: Make boot code endianness-aware at runtime","Thread-Topic":"[PATCH v6 5/7] hw/riscv: Make boot code endianness-aware at\n runtime","Thread-Index":"AQHcxdz7ZtpTLs+6xkGyp26LLHNMSg==","Date":"Mon, 6 Apr 2026 15:49:42 +0000","Message-ID":"<20260406154935.144674-6-djordje.todorovic@htecgroup.com>","References":"<20260406154935.144674-1-djordje.todorovic@htecgroup.com>","In-Reply-To":"<20260406154935.144674-1-djordje.todorovic@htecgroup.com>","Accept-Language":"en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","authentication-results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=htecgroup.com header.i=@htecgroup.com\n header.a=rsa-sha256 header.s=selector1 header.b=u7rMRZLK;\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=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)","dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=htecgroup.com;"],"x-ms-publictraffictype":"Email","x-ms-traffictypediagnostic":"GV2PR09MB8755:EE_|VI1PR09MB6903:EE_","x-ms-office365-filtering-correlation-id":"a2bc9e86-62f0-4003-f899-08de93f41ede","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n ARA:13230040|366016|376014|1800799024|18002099003|38070700021|22082099003|56012099003;","x-microsoft-antispam-message-info":"\n vJZw3P482XhjvAHR7USZJQ0ftOKB5bC4fhMj+p0d+z/AuNyWsKfnZoS01Km9JXaAhbUtIyhpT5RRL7Yo6erCc/ugMxj1uyxbdv8tQMfzvB+yq/wxi9q5mg/+l60QV7oQC1y8rxKkdAWEpyOuSS8dCWlztoU3fyjwfe+j47oLg37X2xLok7hh5PyxPyWUxDyWL3S68Rg1Pjj3PlXtVX3xQ+wWhN88ude15b/0K3b2q65cHYP/Vd4C9o8jKcWm/AA2JLSSwH0Kv+OynPbJC3bvYiACAXEpomOerj8em4ejnsLKAjqzgmAUXl1fGnkiX9rnUYIwrjWRfFXu5cyYfD/KwVSaRI7IAKoFNYR0GOCBk4HkFJnGrlCuHyrc6Z+nO4Av5mxz1YPdS7Bql4wH4EG4oB/n78HxFbqwFKaJJN4mX+tZUGwHR1tcXvrzww/KNf3gy9NJ14ByA3xYonOWlFSVTk6Ap4ZyzsBV6U9lD5RbX9yMUZy+r1QlDAEMO4CKixZU2xSWLaL5hSn23X0bbNFKDc1K7w0k6QvYyWh+vpc7Os7YpravY5eY7G69Uz8IhXbFb6Wmfn3Ijv9cWw/41NKZPIK7LmY1rbQYT5byx81keZyfhsAAMXc6mKRSUqda50i1N6WUWHJujYReCw02WiW4upksWKymyili1kLY/EaQmi9hxGFec4mOWOEaqt9rLSCNuW1GEoq+zLWDn7yFiTTURFa6sRcdJ5tj+ntA5EItRKcfRApZKFcYcuQjO5XE9GGW2X1+KuDfnv3sfxvbWTEkRoWUOYlRxBL9sGCIHJgeNbQ=","x-forefront-antispam-report":"CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:GV2PR09MB8755.eurprd09.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(13230040)(366016)(376014)(1800799024)(18002099003)(38070700021)(22082099003)(56012099003);\n DIR:OUT; SFP:1102;","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?iso-8859-1?q?BsWLVdKMM21V2WegaCFLd3K?=\n\t=?iso-8859-1?q?qjt6yKIfy3VlhCt0wNRIbwi7Q73Zc1vt4X/0aznxbYJi4vbXyjlnFhk0Adk5?=\n\t=?iso-8859-1?q?tq5cRX9dRybQrk8Q3vZkG164V9Rxa5CLJnT3uHN5DIn4ztvXWzWZbRPNJ6e8?=\n\t=?iso-8859-1?q?j92oZ9l9mkaIEyJRRiXR/7D0H97XurNP35yw4/nEkhSegV5SgTd/Z9g1oX8q?=\n\t=?iso-8859-1?q?wNXdIiSTfzGUw0NPopi20SpXSLNNp8h1+tgXEKWp+6sU1GhH7oEU0wzqFvFd?=\n\t=?iso-8859-1?q?uCaQN1CedQuk1lAMB5Lt4S/7l1xJxwtmERS6e/5VEEDoMh3v/6edRhPhVHlT?=\n\t=?iso-8859-1?q?FDu0Mah6qQc4yfppd8m/ugmCQDYLeOpZ/PjXZUwGluXabpD+Z/jUtDRTp0tA?=\n\t=?iso-8859-1?q?sCbqkiqZgZ9wAw8fRgTn7Dg9qAkrrjwnmcoaG0us1rR3M0fK9JYECO39PIl5?=\n\t=?iso-8859-1?q?h4Px4WwmSM1VDdhME21AHx3DJbFuqxEJSyf/yjVGyjBl1FMNaK/CLQiNfKis?=\n\t=?iso-8859-1?q?AAfpNPqv0aSZ6WkzqeQjxxTPPBY+DVY9g4yYGf622tvleri8EfPdcd4ekdyO?=\n\t=?iso-8859-1?q?5ue/yoe4W0korLkEy67EnbjVpypAg29d4R/Af4DSd+gz2fQ8nY26dEqgtDpT?=\n\t=?iso-8859-1?q?eocB/I7kPd3F1kIYE/u3kigP3g2UQ4cbgGTQLXcbPtHcTA8Zvx/DuOE9Tb/r?=\n\t=?iso-8859-1?q?XKcoBj/6anqj5x1T68JaLfiCPBnUlm9FtRAzBdyflaPt9N+tkN5h6cx1hXEh?=\n\t=?iso-8859-1?q?ewwMZ0KzIDmdFmdYcM1oQ04Qdu2+yBQDmuJQ/3UkmzU7in1YPEg19oZzDW/Z?=\n\t=?iso-8859-1?q?uH97JpGuSG9PkU0RYa/dxmqg3BepUj6xnFXbVylz5aUW+ypi2OxUOKvuVOGx?=\n\t=?iso-8859-1?q?Fa+hVBxsJ3C4waJTkBimz6Sz5z/Enp9xHbz6KzkyEutIq+X8ciZFBzOYeNsu?=\n\t=?iso-8859-1?q?3P7pvBDtecnEVqrAoe7px7MEfKGWXbIwC0Ky9kzPfpWir2TtuLFkuRFhTr/F?=\n\t=?iso-8859-1?q?EjcbNU8gl9JiYomb9aiB8pxgNCTNXdDOXH5255hv7/FStv5HlhnVm3ndhQ8A?=\n\t=?iso-8859-1?q?SIvfPyTt25dVCpvHrTcLDPy1y3563BOsPe3p6TmgYyqVGJ+d7htXRbmSpssg?=\n\t=?iso-8859-1?q?KUdmhd+yZMyorXLt2w+5C3wbQxiyGiVUNH0LmKdUea7+vZJoMzKcpX31RZ7J?=\n\t=?iso-8859-1?q?baF/i1xEhk3tu6Nol/GS9EcvyMdoqv1NCgqDfSMyCgoVpPiZI6bnXpagOgON?=\n\t=?iso-8859-1?q?vHwu5pA5ApvNPfTc6hv5bnZQuurgzQJel3HjC0S0Zj/fzoXhImDHF6WI3tP6?=\n\t=?iso-8859-1?q?/I6Bw+MXTlo4Tl6rAWyB5rSxU3LvNOyE4AimH9xll7IPEmJ4htBIkZa7x1tR?=\n\t=?iso-8859-1?q?mu5gWMiiTAV1mbmBhIV3/QlDrwzbSuc/brtICwLoU9v6GlfpFVlLQBRJt5PP?=\n\t=?iso-8859-1?q?17XyykOw+5E3cWPD6gS9LP/LFkY6SrwQFqlmIsmVnHUoSgRa+FsgtU8TGWg+?=\n\t=?iso-8859-1?q?TTAbqslN4kgoQ2i9FLrvSR2WfkC1R9+rEpjy6tsbzbJoi6CrI2SbCfPHZ6Ml?=\n\t=?iso-8859-1?q?LKQp180O0JoqgjSh8p0wq4cMIECrL0WchqHebLoI7DPCXTexqu2hntWaIr+J?=\n\t=?iso-8859-1?q?y9SHpmXCJJ/n8ufnfaGSQhFoGPwkTGBbTk/Z+FxNzkUr+KBznva23iIGDfdI?=\n\t=?iso-8859-1?q?jOgcmyXwN976+LhytTvSrBFCTOYsOj9dR5KQiUQ3WDVFT0lLYZjJoivp5TFB?=\n\t=?iso-8859-1?q?iJ9yPIHQtOis3Wrgs8pZnH/wnyD04TgBuSrR6x23W8PIjHq7Vtgi3HGhFjVi?=\n\t=?iso-8859-1?q?F7Qllt9YWNPfNqkA/WshouD1YsrHF?=","Content-Type":"text/plain; charset=\"iso-8859-1\"","Content-Transfer-Encoding":"quoted-printable","MIME-Version":"1.0","X-OriginatorOrg":"htecgroup.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-AuthSource":"GV2PR09MB8755.eurprd09.prod.outlook.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n a2bc9e86-62f0-4003-f899-08de93f41ede","X-MS-Exchange-CrossTenant-originalarrivaltime":"06 Apr 2026 15:49:42.5185 (UTC)","X-MS-Exchange-CrossTenant-fromentityheader":"Hosted","X-MS-Exchange-CrossTenant-id":"9f85665b-7efd-4776-9dfe-b6bfda2565ee","X-MS-Exchange-CrossTenant-mailboxtype":"HOSTED","X-MS-Exchange-CrossTenant-userprincipalname":"\n q2PuC5JEp54zRQE79BSUCHRvYSuQU8Z9lJUIm43c1jbXI9JjewO1SOrirDJJZSl+zScwbxVvuDE1CVZ5A3tZ95cvHgPU8LPjk0E1yjqQnnM=","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"VI1PR09MB6903","Received-SPF":"pass client-ip=2a01:111:f403:c202::7;\n envelope-from=Djordje.Todorovic@htecgroup.com;\n helo=GVXPR05CU001.outbound.protection.outlook.com","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, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001,\n 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":"Add riscv_is_big_endian() helper that checks the hart's big-endian CPU\nproperty and use it throughout the boot code:\n\n- ELF loading: pass ELFDATA2MSB or ELFDATA2LSB based on endianness\n- Firmware dynamic info: use cpu_to_be* or cpu_to_le* based on endianness\n- Reset vector: instructions (entries 0-5) remain always little-endian,\n  data words (entries 6-9) use target data endianness. For RV64 BE, the\n  hi/lo word pairs within each dword are swapped since LD reads as BE.\n\nThis is part of the runtime big-endian support series which avoids\nseparate BE binaries by handling endianness as a CPU property.\n\nSigned-off-by: Djordje Todorovic <djordje.todorovic@htecgroup.com>\n---\n hw/riscv/boot.c         | 82 +++++++++++++++++++++++++++++++++++------\n include/hw/riscv/boot.h |  2 +\n 2 files changed, 72 insertions(+), 12 deletions(-)","diff":"diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c\nindex e5490beda0..c7558b904f 100644\n--- a/hw/riscv/boot.c\n+++ b/hw/riscv/boot.c\n@@ -40,6 +40,28 @@ bool riscv_is_32bit(RISCVHartArrayState *harts)\n     return mcc->def->misa_mxl_max == MXL_RV32;\n }\n \n+bool riscv_is_big_endian(RISCVHartArrayState *harts)\n+{\n+    return harts->harts[0].cfg.big_endian;\n+}\n+\n+/*\n+ * Convert a pair of 32-bit words forming a 64-bit dword to target data\n+ * endianness. For big-endian, the hi/lo word order is swapped since LD\n+ * interprets bytes as BE.\n+ */\n+static void riscv_boot_data_dword(uint32_t *data, bool big_endian)\n+{\n+    if (big_endian) {\n+        uint32_t tmp = data[0];\n+        data[0] = cpu_to_be32(data[1]);\n+        data[1] = cpu_to_be32(tmp);\n+    } else {\n+        data[0] = cpu_to_le32(data[0]);\n+        data[1] = cpu_to_le32(data[1]);\n+    }\n+}\n+\n /*\n  * Return the per-socket PLIC hart topology configuration string\n  * (caller must free with g_free())\n@@ -72,6 +94,7 @@ void riscv_boot_info_init(RISCVBootInfo *info, RISCVHartArrayState *harts)\n     info->kernel_size = 0;\n     info->initrd_size = 0;\n     info->is_32bit = riscv_is_32bit(harts);\n+    info->is_big_endian = riscv_is_big_endian(harts);\n }\n \n vaddr riscv_calc_kernel_start_addr(RISCVBootInfo *info,\n@@ -247,8 +270,9 @@ void riscv_load_kernel(MachineState *machine,\n      */\n     kernel_size = load_elf_ram_sym(kernel_filename, NULL, NULL, NULL, NULL,\n                                    &info->image_low_addr, &info->image_high_addr,\n-                                   NULL, ELFDATA2LSB, EM_RISCV,\n-                                   1, 0, NULL, true, sym_cb);\n+                                   NULL,\n+                                   ELFDATA2LSB,\n+                                   EM_RISCV, 1, 0, NULL, true, sym_cb);\n     if (kernel_size > 0) {\n         info->kernel_size = kernel_size;\n         goto out;\n@@ -391,21 +415,32 @@ void riscv_rom_copy_firmware_info(MachineState *machine,\n     struct fw_dynamic_info64 dinfo64;\n     void *dinfo_ptr = NULL;\n     size_t dinfo_len;\n+    bool big_endian = riscv_is_big_endian(harts);\n \n     if (riscv_is_32bit(harts)) {\n-        dinfo32.magic = cpu_to_le32(FW_DYNAMIC_INFO_MAGIC_VALUE);\n-        dinfo32.version = cpu_to_le32(FW_DYNAMIC_INFO_VERSION);\n-        dinfo32.next_mode = cpu_to_le32(FW_DYNAMIC_INFO_NEXT_MODE_S);\n-        dinfo32.next_addr = cpu_to_le32(kernel_entry);\n+        dinfo32.magic = big_endian ? cpu_to_be32(FW_DYNAMIC_INFO_MAGIC_VALUE)\n+                                   : cpu_to_le32(FW_DYNAMIC_INFO_MAGIC_VALUE);\n+        dinfo32.version = big_endian ? cpu_to_be32(FW_DYNAMIC_INFO_VERSION)\n+                                     : cpu_to_le32(FW_DYNAMIC_INFO_VERSION);\n+        dinfo32.next_mode = big_endian\n+                          ? cpu_to_be32(FW_DYNAMIC_INFO_NEXT_MODE_S)\n+                          : cpu_to_le32(FW_DYNAMIC_INFO_NEXT_MODE_S);\n+        dinfo32.next_addr = big_endian ? cpu_to_be32(kernel_entry)\n+                                       : cpu_to_le32(kernel_entry);\n         dinfo32.options = 0;\n         dinfo32.boot_hart = 0;\n         dinfo_ptr = &dinfo32;\n         dinfo_len = sizeof(dinfo32);\n     } else {\n-        dinfo64.magic = cpu_to_le64(FW_DYNAMIC_INFO_MAGIC_VALUE);\n-        dinfo64.version = cpu_to_le64(FW_DYNAMIC_INFO_VERSION);\n-        dinfo64.next_mode = cpu_to_le64(FW_DYNAMIC_INFO_NEXT_MODE_S);\n-        dinfo64.next_addr = cpu_to_le64(kernel_entry);\n+        dinfo64.magic = big_endian ? cpu_to_be64(FW_DYNAMIC_INFO_MAGIC_VALUE)\n+                                   : cpu_to_le64(FW_DYNAMIC_INFO_MAGIC_VALUE);\n+        dinfo64.version = big_endian ? cpu_to_be64(FW_DYNAMIC_INFO_VERSION)\n+                                     : cpu_to_le64(FW_DYNAMIC_INFO_VERSION);\n+        dinfo64.next_mode = big_endian\n+                          ? cpu_to_be64(FW_DYNAMIC_INFO_NEXT_MODE_S)\n+                          : cpu_to_le64(FW_DYNAMIC_INFO_NEXT_MODE_S);\n+        dinfo64.next_addr = big_endian ? cpu_to_be64(kernel_entry)\n+                                       : cpu_to_le64(kernel_entry);\n         dinfo64.options = 0;\n         dinfo64.boot_hart = 0;\n         dinfo_ptr = &dinfo64;\n@@ -474,10 +509,33 @@ void riscv_setup_rom_reset_vec(MachineState *machine, RISCVHartArrayState *harts\n         reset_vec[2] = 0x00000013;   /*     addi   x0, x0, 0 */\n     }\n \n-    /* copy in the reset vector in little_endian byte order */\n-    for (i = 0; i < ARRAY_SIZE(reset_vec); i++) {\n+    /* RISC-V instructions are always little-endian */\n+    for (i = 0; i < 6; i++) {\n         reset_vec[i] = cpu_to_le32(reset_vec[i]);\n     }\n+\n+    /*\n+     * Data words (addresses at entries 6-9) must match the firmware's data\n+     * endianness.\n+     */\n+    if (riscv_is_32bit(harts)) {\n+        for (i = 6; i < ARRAY_SIZE(reset_vec); i++) {\n+            if (riscv_is_big_endian(harts)) {\n+                reset_vec[i] = cpu_to_be32(reset_vec[i]);\n+            } else {\n+                reset_vec[i] = cpu_to_le32(reset_vec[i]);\n+            }\n+        }\n+    } else {\n+        /*\n+         * For RV64, each pair of 32-bit words forms a dword. For big-endian,\n+         * the hi/lo word order within each dword must be swapped since LD\n+         * interprets bytes as BE.\n+         */\n+        for (i = 6; i < ARRAY_SIZE(reset_vec); i += 2) {\n+            riscv_boot_data_dword(reset_vec + i, riscv_is_big_endian(harts));\n+        }\n+    }\n     rom_add_blob_fixed_as(\"mrom.reset\", reset_vec, sizeof(reset_vec),\n                           rom_base, &address_space_memory);\n     riscv_rom_copy_firmware_info(machine, harts,\ndiff --git a/include/hw/riscv/boot.h b/include/hw/riscv/boot.h\nindex f00b3ca122..a54c2b397d 100644\n--- a/include/hw/riscv/boot.h\n+++ b/include/hw/riscv/boot.h\n@@ -36,9 +36,11 @@ typedef struct RISCVBootInfo {\n     ssize_t initrd_size;\n \n     bool is_32bit;\n+    bool is_big_endian;\n } RISCVBootInfo;\n \n bool riscv_is_32bit(RISCVHartArrayState *harts);\n+bool riscv_is_big_endian(RISCVHartArrayState *harts);\n \n char *riscv_plic_hart_config_string(int hart_count);\n \n","prefixes":["v6","5/7"]}