From nobody Mon Feb 3 11:51:54 2025
X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4YmlGM3RhNz5n3kf;
Mon, 03 Feb 2025 11:51:55 +0000 (UTC)
(envelope-from git@FreeBSD.org)
Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256
client-signature RSA-PSS (4096 bits) client-digest SHA256)
(Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK))
by mx1.freebsd.org (Postfix) with ESMTPS id 4YmlGM0h3rz3r9m;
Mon, 03 Feb 2025 11:51:55 +0000 (UTC)
(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
t=1738583515;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:mime-version:mime-version:content-type:content-type:
content-transfer-encoding:content-transfer-encoding;
bh=sxQAqiOeeYdc/oLG7LF9bbkXbLiqAClNaT6lujV1jls=;
b=SIsr+hqCY5pm/qvux1q1kqkIeBQ1+VbI4BGVi8SYH5/Q13jqZzKLWAFOiHGtyNzck2U1bq
ROj7xGYvep62ucnc3ATBAS+/+Xd1sSS/xc34eVANyML/NCJbAAZeCp05ECrQztm9Jya8Ep
0BDZRdyRyjD8y4MZ0JXn2o0xu9pyRghJE/4ES7b66Rz5CPrKGlzo0cXcaIdU73Lp+6ATzS
G4vNsKkhmBTSkEjbfiMNvdM67mn1OAn3P5o9kQhlZ+R1tC/159esQeSK7Al/fLCWzteOVw
YX6xey1rIzYUBknio82CAVA31MpxmewRjd33zvw4RGym1PbKE2aKY8SV58bzbA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
s=dkim; t=1738583515;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:mime-version:mime-version:content-type:content-type:
content-transfer-encoding:content-transfer-encoding;
bh=sxQAqiOeeYdc/oLG7LF9bbkXbLiqAClNaT6lujV1jls=;
b=bIlJrbRKrSK8/CWN2QygU2PJhAQJViAbXfcTLR0XFxBcpgw8W4Dne1V8qtICZjMKngJfxO
IWtkJi4LMoi3qRQULgVYvaLq/VLgl3N4ttHJuX+aNnWV2khW5aMELFdvaLfeAIBUIOcIab
GN8EPWgG3+ZyDVUGtjb5vH3CzgUwa5PAEbNUO6MA19Dmjn+VZD4sQPiMXUwSUB/p2Ka+gp
7/Xnt8fCwUI28TJxeFbW/92/yCeT02NoXcmNHNyGrzn9aYxOQX+eQ9XDPFRTecK1wtshmO
X4Kza9Sp2qxUHAyYaZJhcrlZQ2tmh5gngUb2Fv2WhoazoHu8IAYtDcOC+UVMoA==
ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1738583515; a=rsa-sha256; cv=none;
b=P4CMD5cr3wGi9hvpqvw05wzggcvBMtLdFPdYfpvzTD6ZSCtTJdNxf28yZFRwj08Y1iULib
pt6ZAgxIc7xH13y5DvmyPT/0gNIgXZGycg0TvUrkbCOI6tlWJBrIqsyaUMKb31ILyzQzD8
JLk6tjxelqlqRWfxAmOeg4c6Fykcyu+uOAM3ufdrZLjf19XgS9tAc5dinmyrra4o32Q7v6
XfgWPjyCkUO6u1JR1pZ6Xv7g1PpjigTHP6sC355YyL6p+orp6uJSaSQBNww3IkogXYC7Ri
wuFkPg6KYVoY0nGgpMje4jAwQPZSFjZAHC2V2v242VgH2p5dxQA1AF8sR651bQ==
ARC-Authentication-Results: i=1;
mx1.freebsd.org;
none
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
(Client did not present a certificate)
by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4YmlGL56HGzbXf;
Mon, 03 Feb 2025 11:51:54 +0000 (UTC)
(envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 513BpsSN040459;
Mon, 3 Feb 2025 11:51:54 GMT
(envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 513Bpsrj040456;
Mon, 3 Feb 2025 11:51:54 GMT
(envelope-from git)
Date: Mon, 3 Feb 2025 11:51:54 GMT
Message-Id: <202502031151.513Bpsrj040456@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
dev-commits-src-main@FreeBSD.org
From: Ruslan Bukin
Subject: git: 7ac65902d8ba - main - bhyve/riscv: fix interrupts-extended
property.
List-Id: Commit messages for the main branch of the src repository
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main
List-Help:
List-Post:
List-Subscribe:
List-Unsubscribe:
X-BeenThere: dev-commits-src-main@freebsd.org
Sender: owner-dev-commits-src-main@FreeBSD.org
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: br
X-Git-Repository: src
X-Git-Refname: refs/heads/main
X-Git-Reftype: branch
X-Git-Commit: 7ac65902d8ba0a85e5fe95d097f7fbd52cbda12a
Auto-Submitted: auto-generated
The branch main has been updated by br:
URL: https://cgit.FreeBSD.org/src/commit/?id=7ac65902d8ba0a85e5fe95d097f7fbd52cbda12a
commit 7ac65902d8ba0a85e5fe95d097f7fbd52cbda12a
Author: Ruslan Bukin
AuthorDate: 2025-02-03 11:44:15 +0000
Commit: Ruslan Bukin
CommitDate: 2025-02-03 11:44:18 +0000
bhyve/riscv: fix interrupts-extended property.
Construct interrupts-extended (property of APLIC) properly.
Reviewed by: markj
Differential Revision: https://reviews.freebsd.org/D48713
---
usr.sbin/bhyve/riscv/bhyverun_machdep.c | 2 +-
usr.sbin/bhyve/riscv/fdt.c | 27 ++++++++++++++++++---------
usr.sbin/bhyve/riscv/fdt.h | 2 +-
3 files changed, 20 insertions(+), 11 deletions(-)
diff --git a/usr.sbin/bhyve/riscv/bhyverun_machdep.c b/usr.sbin/bhyve/riscv/bhyverun_machdep.c
index d06b517a6624..8ee505e86679 100644
--- a/usr.sbin/bhyve/riscv/bhyverun_machdep.c
+++ b/usr.sbin/bhyve/riscv/bhyverun_machdep.c
@@ -337,7 +337,7 @@ bhyve_init_platform(struct vmctx *ctx, struct vcpu *bsp)
error = vm_set_register(bsp, VM_REG_GUEST_A1, fdt_gpa);
assert(error == 0);
- fdt_add_aplic(APLIC_MEM_BASE, APLIC_MEM_SIZE);
+ fdt_add_aplic(APLIC_MEM_BASE, APLIC_MEM_SIZE, guest_ncpus);
error = vm_attach_aplic(ctx, APLIC_MEM_BASE, APLIC_MEM_SIZE);
if (error != 0) {
warn("vm_attach_aplic()");
diff --git a/usr.sbin/bhyve/riscv/fdt.c b/usr.sbin/bhyve/riscv/fdt.c
index bf5ec114cda0..3ccd7ae5dc79 100644
--- a/usr.sbin/bhyve/riscv/fdt.c
+++ b/usr.sbin/bhyve/riscv/fdt.c
@@ -2,7 +2,7 @@
* SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (c) 2022 The FreeBSD Foundation
- * Copyright (c) 2024 Ruslan Bukin
+ * Copyright (c) 2024-2025 Ruslan Bukin
*
* This software was developed by Andrew Turner under sponsorship from
* the FreeBSD Foundation.
@@ -44,6 +44,8 @@
#include
#include
+#include
+
#include "config.h"
#include "bhyverun.h"
#include "fdt.h"
@@ -58,7 +60,7 @@
static void *fdtroot;
static uint32_t aplic_phandle = 0;
-static uint32_t intc0_phandle = 0;
+static uint32_t *intc_phandles = NULL;
static uint32_t
assign_phandle(void *fdt)
@@ -84,7 +86,7 @@ set_single_reg(void *fdt, uint64_t start, uint64_t len)
}
static void
-add_cpu(void *fdt, int cpuid, const char *isa)
+add_cpu(void *fdt, int cpuid, const char *isa, uint32_t *intc_phandle)
{
char node_name[16];
@@ -98,7 +100,7 @@ add_cpu(void *fdt, int cpuid, const char *isa)
fdt_property_string(fdt, "mmu-type", "riscv,sv39");
fdt_begin_node(fdt, "interrupt-controller");
- intc0_phandle = assign_phandle(fdt);
+ *intc_phandle = assign_phandle(fdt);
fdt_property_u32(fdt, "#address-cells", 2);
fdt_property_u32(fdt, "#interrupt-cells", 1);
fdt_property(fdt, "interrupt-controller", NULL, 0);
@@ -120,8 +122,9 @@ add_cpus(void *fdt, int ncpu, const char *isa)
/* TODO: take timebase from kernel? */
fdt_property_u32(fdt, "timebase-frequency", 1000000);
+ intc_phandles = malloc(sizeof(uint32_t) * ncpu);
for (cpuid = 0; cpuid < ncpu; cpuid++)
- add_cpu(fdt, cpuid, isa);
+ add_cpu(fdt, cpuid, isa, &intc_phandles[cpuid]);
fdt_end_node(fdt);
}
@@ -172,10 +175,11 @@ fdt_init(struct vmctx *ctx, int ncpu, vm_paddr_t fdtaddr, vm_size_t fdtsize,
}
void
-fdt_add_aplic(uint64_t mem_base, uint64_t mem_size)
+fdt_add_aplic(uint64_t mem_base, uint64_t mem_size, int ncpu)
{
char node_name[32];
void *fdt, *prop;
+ int i;
fdt = fdtroot;
@@ -196,10 +200,13 @@ fdt_add_aplic(uint64_t mem_base, uint64_t mem_size)
SET_PROP_U64(prop, 0, mem_base);
SET_PROP_U64(prop, 1, mem_size);
+ assert(intc_phandles != NULL);
fdt_property_placeholder(fdt, "interrupts-extended",
- 2 * sizeof(uint32_t), &prop);
- SET_PROP_U32(prop, 0, intc0_phandle);
- SET_PROP_U32(prop, 1, 9);
+ 2 * ncpu * sizeof(uint32_t), &prop);
+ for (i = 0; i < ncpu; i++) {
+ SET_PROP_U32(prop, i * 2 + 0, intc_phandles[i]);
+ SET_PROP_U32(prop, i * 2 + 1, IRQ_EXTERNAL_SUPERVISOR);
+ }
fdt_property_u32(fdt, "riscv,num-sources", 63);
fdt_end_node(fdt);
@@ -325,4 +332,6 @@ fdt_finalize(void)
fdt_end_node(fdtroot);
fdt_finish(fdtroot);
+
+ free(intc_phandles);
}
diff --git a/usr.sbin/bhyve/riscv/fdt.h b/usr.sbin/bhyve/riscv/fdt.h
index 60140a82a211..21453e363c3c 100644
--- a/usr.sbin/bhyve/riscv/fdt.h
+++ b/usr.sbin/bhyve/riscv/fdt.h
@@ -37,7 +37,7 @@ struct vmctx;
int fdt_init(struct vmctx *ctx, int ncpu, vm_paddr_t addrp,
vm_size_t size, const char *isa);
-void fdt_add_aplic(uint64_t dist_base, uint64_t dist_size);
+void fdt_add_aplic(uint64_t dist_base, uint64_t dist_size, int ncpu);
void fdt_add_pcie(int intrs[static 4]);
void fdt_add_uart(uint64_t uart_base, uint64_t uart_size, int intr);
void fdt_finalize(void);