From nobody Sat Sep 26 21:37:16 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1787869630; cv=none; d=zohomail.com; s=zohoarc; b=M/D8oMqOaTG7eEWOiLWLerp2NVFbVOLY8hcarnyujwRpRPh7zaEIo3rkoR3Bqq3I5vxl0slmVf4h1Ae6DsAPEklszRDV2cKf3dr2W9+UykhBpOhYA8d8u7uGhlcSiOLyeb7hR+eEygJa9jtBaSH+wKXM3PE0KV+NDIhxpGGXy0k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787869630; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=2ZN5PLDobhRL1Z2v985oziLe2ccwD7fJVrv2UJhuWB0=; b=lR1+MUr8FrzVtp40gK72zX4nQyVC84xuBeToB8egAYD8ARUVsjfathwv6Pz2328MHth8LhKhvdqTVrAg1wRsyWODh+W30BDMXfiOl1VgWOdmhAwSne7fJjT+dg8szF4dU7IChfvy4pFzLYU+OIluOe+iU1r3K2YHyn2VM5b+nl8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178786963068693.95420810775613; Thu, 27 Aug 2026 15:27:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wziYM-0005EH-St; Thu, 27 Aug 2026 18:26:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYG-0005C1-GW for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:26:28 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYD-0001A8-S4 for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:26:28 -0400 Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67RJMTqf655550 for ; Thu, 27 Aug 2026 22:26:25 GMT Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gagjfum4d-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 27 Aug 2026 22:26:24 +0000 (GMT) Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-930edb4362dso14457385a.3 for ; Thu, 27 Aug 2026 15:26:24 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([189.38.141.232]) by smtp.gmail.com with ESMTPSA id af79cd13be357-939173a734dsm8924985a.26.2026.08.27.15.26.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 15:26:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 2ZN5PLDobhRL1Z2v985oziLe2ccwD7fJVrv2UJhuWB0=; b=TiSX9GvWz2q5V9ZL 6Bsw+d2vuAhzy0JDHAtxB7MBnYl1pbWseIMNw9NMedtL4hLxZ5MpUXGlgg4IeE5F 71lZqlNi20V7mYlynzDMKvimIVLTPC/nfhJTZj4l6+O5tWk8NQzxmMyjx+WAXySg gHs/aBbZEyTlDGMt4mjUqd0Md1ymz1cdtveQ7nesBt1t6r0DZd6mlJ36xdJJ1bln FsaKK01el+QwWge9v0Rqvr1w+DtNDOCpv2wdw9UI8fc5H4DBDC3I/so+E3L3BG9P tfRf4+rSb8/+W0blSr19PfRJmle9EFQ9JkJom2FX60B0DxUrFtn677n/QpvwzVzD 5jZ5Tw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787869584; x=1788474384; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=2ZN5PLDobhRL1Z2v985oziLe2ccwD7fJVrv2UJhuWB0=; b=GwYbKESX+0Ja444KGrorvSqUMSpd90eNHsCP6wxYueTd9JF0Z8wXmvHe9lcdVZmeUV PHUMfLCTFn4ZYpikA2qmiN1XeUwfNvL7TFJJlm1HQa+42elAP3l0t5lwirHgijkIvsTK acKOmnOqPzVgDkJ3gzb+vICeNF15eloSNPlHb0/s/dUBdQTNWZmVyrjQlb+2c+O06qc3 j1Otjn6IaYElkqQrxLUxnLumujcWCir6kkyEepx/Kspli0irPtV3KSlRLK9IT6JUlay/ 0Y32jmFqqvdyoRz2Lxl1ZxLqWy7EL2iHQrMuDmpRBlHP6U0jB2w5tuMTmdySUNrcX9KR +VdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787869584; x=1788474384; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=2ZN5PLDobhRL1Z2v985oziLe2ccwD7fJVrv2UJhuWB0=; b=dyA46pwg2guU1/CXlZJd96auYr/Go3lUpvyMiN0QUIdz38Ln9u1EQBWWnafAjjSH+Z jtRfrDszXHrNGKtmyJuiqvZi2Wr0NPGE7CPR+DVRa6yDAYeFddCAVy/CX+Wu3tQnhjrZ nr8gqV+lLYJXxpnZCZf1+jAleZmssj6IW8aXih3atrS071WP4rSgZYP+97VFnnb8Z6Ql xHeSzWF8N8b8GQu111Cmt4wn5/2+efIF3Stm7HTM8o0UAwZyBLw8H+V1O5C1hIZCfOD4 Z5JUgDUyw5sys6gWaI5MkkBAUIoJlr98R624ZDyix5jFfmTl8iQbgSIDQvMZ/dmypwi/ x51Q== X-Gm-Message-State: AFuF++mEczOgk0iFilQgV+3j9u9sCvgJdSlnrwofsVLEHhdxjB6L40Mf MUn8tLMcE5WLqzhTyjwZZNnNbK5IH1koq0iQsgLA6MSP2uemn6PkFKgMQrglTQcckIr7d9P2HXj 0GUgSMsARFbWL6Tfb6wih6Laoj0Tvtkoen+wg+ZpRBPjRbbA6kvd5wAXQwccD+9gz2Q== X-Gm-Gg: AR+sD130ISsG30LHw3a7VJCyHdax1RbOGTkvgo8mwdtyKoHpyxCU15Hu8Gk9U1o+e54 q6VBWG4ePGi7z17t7uFGzo0zVNjHg+r9DwGwMTbAgjkXIZxyRiiI7nXCJxevINsptezphgSrfBu LTmG0QBTHh09pfUG2TNV/4d9oiV679xDA80QhXvi6n1gNV4kq9KH9CwXRTbQV1W5LUwJ6kxjzrg Ei1TkZPga3OUnjp5yVj28WFO7X/DOnBGum/J+3EpvG9LCrJ2pvboxGBxQ7/osQcomuatKatMAzC v/5Mub4KwtUrKF9+YE7iq6Lwpg6ks17D1KO/d+CnEBtIucKn7cnycBAb3oXQNU5PAOZtHxqt7i6 Td/nKV2vhjpkuFdAyUXsRdTlIjQLaHRQTBdlXYw== X-Received: by 2002:a05:620a:44c5:b0:939:990:c943 with SMTP id af79cd13be357-939138df236mr216652785a.32.1787869583943; Thu, 27 Aug 2026 15:26:23 -0700 (PDT) X-Received: by 2002:a05:620a:44c5:b0:939:990:c943 with SMTP id af79cd13be357-939138df236mr216646685a.32.1787869583318; Thu, 27 Aug 2026 15:26:23 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Daniel Henrique Barboza , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Palmer Dabbelt , Joel Stanley , Nicholas Piggin , Anirudh Srinivasan , Michael Ellerman , Portia Stephens Subject: [PATCH v4 01/14] hw/riscv/fdt-common: prepend helpers with "riscv_" Date: Thu, 27 Aug 2026 19:25:54 -0300 Message-ID: <20260827222608.329788-2-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> References: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: YA9WwFKTrXKjpx-zvh5rYinPENk-rt8B X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX1juseXMJjaEm FVFCJbCeAjhZq4VaYr/37lZB4Ls/dtHGTudeLhfAsFWdYFxMVb5rZkDdfK68QdCqRKb5RDvTR64 AnUrSZr9Ded267Ljy4SQYAG49OQf52YnfJ3SWmRDIICisMbwUMPMNAIA+3ka7UP3p/eDbR6pCXc 6FrYcD7c5SSVAk3ckyNXnybHlySGw0qz5VD4Rw4OhaXahMNUE3g8JWQLqOf63tISIOQNJhbcfmo UcbsnpPtgxKaMZg13NRkUPtHQs2LQ5w9fFTqlIHOFVAPa3zHJGXSe4gI9MXfrr26MI7mxduMSRa BKwpdRtH+yAdGIVCoNYPoATMPd9f4Lz8mndJPx2aFBjNEvxIaVE2fLuSDOH+tqzki2BDNe7XhmQ RtG8IL+QJYc9LcCpGoDMfVVijws7NtVGBQVU9jFsE4cwyLvUKQD1JRGNzVBoinZb/M9kBdsi/hD 7N3LSUQMIDjxspD4NbA== X-Proofpoint-Spam-Info: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX7UOKgiCxKCXV kbDe8hTQlFpzhN9H7evxP4lBaNjkfRs9kZ6sQlspIIJUgCB3LKc3lrWMhwgyVvexksEkUM3NiGJ CszSvVYiJXvMX0HY0fWz2DNEsPDNE4Q= X-Proofpoint-GUID: YA9WwFKTrXKjpx-zvh5rYinPENk-rt8B X-Authority-Analysis: v=2.4 cv=dd+wG3Xe c=1 sm=1 tr=0 ts=6a90b990 cx=c_pps a=50t2pK5VMbmlHzFWWp8p/g==:117 a=MCIxunHWmQOg/5OnbzXZaw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=SG9m4Rbq3iqSK_q1YnQA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=IoWCM6iH3mJn3m4BftBB:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-27_08,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 priorityscore=1501 lowpriorityscore=0 clxscore=1015 bulkscore=0 adultscore=0 suspectscore=0 impostorscore=0 malwarescore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608270190 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1787869633135158500 Given that the helpers are public API we should prefix them with "riscv_" to avoid conflicts when linking with different targets in the future, i.e. we should not use generic names like "create_fdt_socket_memory". Despite the amount of lines this is a mechanical change and no real FDT changes are intended. Suggested-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Daniel Henrique Barboza Reviewed-by: Chao Liu Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/riscv/fdt-common.c | 45 ++++++++++++++++---------------- hw/riscv/sifive_u.c | 34 +++++++++++++------------ hw/riscv/spike.c | 30 ++++++++++++---------- hw/riscv/tt_atlantis.c | 22 ++++++++-------- hw/riscv/virt.c | 42 +++++++++++++++--------------- include/hw/riscv/fdt-common.h | 48 ++++++++++++++++++----------------- 6 files changed, 117 insertions(+), 104 deletions(-) diff --git a/hw/riscv/fdt-common.c b/hw/riscv/fdt-common.c index aa143a618b..3a8da03cfb 100644 --- a/hw/riscv/fdt-common.c +++ b/hw/riscv/fdt-common.c @@ -14,8 +14,8 @@ #include "hw/riscv/fdt-common.h" #include "target/riscv/cpu_bits.h" =20 -void *create_board_device_tree(const char *model, const char *compatible, - int *fdt_size) +void *riscv_create_board_device_tree(const char *model, const char *compat= ible, + int *fdt_size) { void *fdt =3D create_device_tree(fdt_size); =20 @@ -38,8 +38,8 @@ void *create_board_device_tree(const char *model, const c= har *compatible, return fdt; } =20 -void create_fdt_socket_memory(void *fdt, hwaddr addr, uint64_t size, - int socket_id, bool numa_enabled) +void riscv_create_fdt_socket_memory(void *fdt, hwaddr addr, uint64_t size, + int socket_id, bool numa_enabled) { g_autofree char *mem_name =3D g_strdup_printf("/memory@%"HWADDR_PRIx, = addr); =20 @@ -52,9 +52,9 @@ void create_fdt_socket_memory(void *fdt, hwaddr addr, uin= t64_t size, } } =20 -void create_fdt_socket_clint(void *fdt, hwaddr addr, uint64_t size, - int socket_id, uint32_t *intc_phandles, - int num_harts, bool numa_enabled) +void riscv_create_fdt_socket_clint(void *fdt, hwaddr addr, uint64_t size, + int socket_id, uint32_t *intc_phandles, + int num_harts, bool numa_enabled) { g_autofree uint32_t *clint_cells =3D g_new0(uint32_t, num_harts * 4); g_autofree char *clint_name =3D NULL; @@ -84,7 +84,8 @@ void create_fdt_socket_clint(void *fdt, hwaddr addr, uint= 64_t size, } } =20 -void fdt_create_cpu_socket_subnode(void *fdt, uint64_t timebase_frequency) +void riscv_fdt_create_cpu_socket_subnode(void *fdt, + uint64_t timebase_frequency) { qemu_fdt_add_subnode(fdt, "/cpus"); qemu_fdt_setprop_cell(fdt, "/cpus", "timebase-frequency", @@ -169,11 +170,11 @@ create_fdt_socket_cpu_internal(void *fdt, char *clust= _name, RISCVCPU *cpu_ptr, qemu_fdt_setprop_cell(fdt, core_name, "cpu", cpu_phandle); } =20 -void create_fdt_socket_cpus(void *fdt, RISCVCPU *socket_harts, - int socket_id, int num_harts_socket, - int socket_hartid_base, uint32_t *phandle, - uint32_t *intc_phandles, bool numa_enabled, - bool is_32_bit) +void riscv_create_fdt_socket_cpus(void *fdt, RISCVCPU *socket_harts, + int socket_id, int num_harts_socket, + int socket_hartid_base, uint32_t *phandl= e, + uint32_t *intc_phandles, bool numa_enabl= ed, + bool is_32_bit) { g_autofree char *clust_name =3D NULL; =20 @@ -191,21 +192,21 @@ void create_fdt_socket_cpus(void *fdt, RISCVCPU *sock= et_harts, } =20 void -create_fdt_socket_cpu_sifive(void *fdt, char *clust_name, - int cpu_id, int socket_id, - int socket_hartid_base, uint32_t *phandle, - uint32_t *intc_phandles) +riscv_create_fdt_socket_cpu_sifive(void *fdt, char *clust_name, + int cpu_id, int socket_id, + int socket_hartid_base, uint32_t *phand= le, + uint32_t *intc_phandles) { create_fdt_socket_cpu_internal(fdt, clust_name, NULL, cpu_id, socket_id, socket_hartid_base, phandle, intc_phandles, false, false); } =20 -void create_fdt_plic(void *fdt, hwaddr addr, uint64_t size, - uint32_t plic_phandle, uint32_t int_cells, - uint32_t addr_cells, uint32_t *plic_cells, - uint32_t cells_size, uint32_t ndev_sources, - bool numa_enabled, int socket_id) +void riscv_create_fdt_plic(void *fdt, hwaddr addr, uint64_t size, + uint32_t plic_phandle, uint32_t int_cells, + uint32_t addr_cells, uint32_t *plic_cells, + uint32_t cells_size, uint32_t ndev_sources, + bool numa_enabled, int socket_id) { g_autofree char *nodename =3D NULL; static const char * const plic_compat[2] =3D { diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c index 57a57c96e1..852c48c056 100644 --- a/hw/riscv/sifive_u.c +++ b/hw/riscv/sifive_u.c @@ -108,8 +108,10 @@ static void create_fdt(SiFiveUState *s, const MemMapEn= try *memmap, g_autofree uint32_t *intc_phandles =3D g_new0(uint32_t, ms->smp.cpus); g_autofree char *clust_name =3D NULL; =20 - fdt =3D ms->fdt =3D create_board_device_tree("SiFive HiFive Unleashed = A00", - "sifive,hifive-unleashed-a00", &s->fdt_size); + fdt =3D ms->fdt =3D riscv_create_board_device_tree( + "SiFive HiFive Unleashed A00", + "sifive,hifive-unleashed-a00", + &s->fdt_size); =20 hfclk_phandle =3D phandle++; nodename =3D g_strdup_printf("/hfclk"); @@ -133,10 +135,10 @@ static void create_fdt(SiFiveUState *s, const MemMapE= ntry *memmap, qemu_fdt_setprop_cell(fdt, nodename, "#clock-cells", 0x0); g_free(nodename); =20 - create_fdt_socket_memory(fdt, memmap[SIFIVE_U_DEV_DRAM].base, - ms->ram_size, 0, false); + riscv_create_fdt_socket_memory(fdt, memmap[SIFIVE_U_DEV_DRAM].base, + ms->ram_size, 0, false); =20 - fdt_create_cpu_socket_subnode(fdt, CLINT_TIMEBASE_FREQ); + riscv_fdt_create_cpu_socket_subnode(fdt, CLINT_TIMEBASE_FREQ); =20 clust_name =3D g_strdup_printf("/cpus/cpu-map/cluster%d", 0); qemu_fdt_add_subnode(fdt, clust_name); @@ -157,15 +159,15 @@ static void create_fdt(SiFiveUState *s, const MemMapE= ntry *memmap, riscv_isa_write_fdt(&s->soc.e_cpus.harts[0], fdt, nodename); } =20 - create_fdt_socket_cpu_sifive(fdt, clust_name, cpu, 0, 0, - &phandle, intc_phandles); + riscv_create_fdt_socket_cpu_sifive(fdt, clust_name, cpu, 0, 0, + &phandle, intc_phandles); =20 g_free(nodename); } =20 - create_fdt_socket_clint(fdt, memmap[SIFIVE_U_DEV_CLINT].base, - memmap[SIFIVE_U_DEV_CLINT].size, 0, - intc_phandles, ms->smp.cpus, false); + riscv_create_fdt_socket_clint(fdt, memmap[SIFIVE_U_DEV_CLINT].base, + memmap[SIFIVE_U_DEV_CLINT].size, 0, + intc_phandles, ms->smp.cpus, false); =20 nodename =3D g_strdup_printf("/soc/otp@%lx", (long)memmap[SIFIVE_U_DEV_OTP].base); @@ -209,12 +211,12 @@ static void create_fdt(SiFiveUState *s, const MemMapE= ntry *memmap, } } =20 - create_fdt_plic(fdt, memmap[SIFIVE_U_DEV_PLIC].base, - memmap[SIFIVE_U_DEV_PLIC].size, - plic_phandle, SIFIVE_U_PLIC_INT_CELLS, - SIFIVE_U_PLIC_ADDR_CELLS, cells, - cells_length * sizeof(uint32_t), - SIFIVE_U_PLIC_NUM_SOURCES - 1, false, 0); + riscv_create_fdt_plic(fdt, memmap[SIFIVE_U_DEV_PLIC].base, + memmap[SIFIVE_U_DEV_PLIC].size, + plic_phandle, SIFIVE_U_PLIC_INT_CELLS, + SIFIVE_U_PLIC_ADDR_CELLS, cells, + cells_length * sizeof(uint32_t), + SIFIVE_U_PLIC_NUM_SOURCES - 1, false, 0); g_free(cells); =20 gpio_phandle =3D phandle++; diff --git a/hw/riscv/spike.c b/hw/riscv/spike.c index 630b65f569..8d7e93807c 100644 --- a/hw/riscv/spike.c +++ b/hw/riscv/spike.c @@ -61,8 +61,10 @@ static void create_fdt(SpikeState *s, const MemMapEntry = *memmap, uint32_t phandle =3D 1; bool numa_enabled =3D riscv_numa_enabled(ms); =20 - fdt =3D ms->fdt =3D create_board_device_tree("ucbbar,spike-bare,qemu", - "ucbbar,spike-bare-dev", &fdt_size); + fdt =3D ms->fdt =3D riscv_create_board_device_tree( + "ucbbar,spike-bare,qemu", + "ucbbar,spike-bare-dev", + &fdt_size); =20 qemu_fdt_add_subnode(fdt, "/htif"); qemu_fdt_setprop_string(fdt, "/htif", "compatible", "ucb,htif0"); @@ -71,7 +73,8 @@ static void create_fdt(SpikeState *s, const MemMapEntry *= memmap, 0x0, memmap[SPIKE_HTIF].base, 0x0, memmap[SPIKE_HTIF].size); } =20 - fdt_create_cpu_socket_subnode(fdt, RISCV_ACLINT_DEFAULT_TIMEBASE_FREQ); + riscv_fdt_create_cpu_socket_subnode(fdt, + RISCV_ACLINT_DEFAULT_TIMEBASE_FREQ= ); =20 for (socket =3D (riscv_socket_count(ms) - 1); socket >=3D 0; socket--)= { g_autofree uint32_t *intc_phandles =3D g_new0(uint32_t, @@ -80,20 +83,21 @@ static void create_fdt(SpikeState *s, const MemMapEntry= *memmap, riscv_socket_mem_offset(ms, socket); uint64_t memsize =3D riscv_socket_mem_size(ms, socket); =20 - create_fdt_socket_cpus(fdt, (&s->soc[socket])->harts, socket, - s->soc[socket].num_harts, - s->soc[socket].hartid_base, - &phandle, intc_phandles, numa_enabled, - is_32_bit); + riscv_create_fdt_socket_cpus(fdt, (&s->soc[socket])->harts, socket, + s->soc[socket].num_harts, + s->soc[socket].hartid_base, + &phandle, intc_phandles, numa_enabled, + is_32_bit); =20 - create_fdt_socket_memory(fdt, memaddr, memsize, socket, - riscv_numa_enabled(ms)); + riscv_create_fdt_socket_memory(fdt, memaddr, memsize, socket, + riscv_numa_enabled(ms)); =20 clint_addr =3D memmap[SPIKE_CLINT].base + (memmap[SPIKE_CLINT].size * socket); - create_fdt_socket_clint(fdt, clint_addr, memmap[SPIKE_CLINT].size, - socket, intc_phandles, - s->soc[socket].num_harts, numa_enabled); + riscv_create_fdt_socket_clint(fdt, clint_addr, + memmap[SPIKE_CLINT].size, socket, + intc_phandles, s->soc[socket].num_ha= rts, + numa_enabled); } =20 riscv_socket_fdt_write_distance_matrix(ms); diff --git a/hw/riscv/tt_atlantis.c b/hw/riscv/tt_atlantis.c index babce2b680..812051a11f 100644 --- a/hw/riscv/tt_atlantis.c +++ b/hw/riscv/tt_atlantis.c @@ -91,16 +91,17 @@ static void create_fdt_memory(TTAtlantisState *s) size_hi =3D MACHINE(s)->ram_size - size_lo; } =20 - create_fdt_socket_memory(fdt, s->memmap[TT_ATL_DDR_LO].base, size_lo, - 0, false); + riscv_create_fdt_socket_memory(fdt, s->memmap[TT_ATL_DDR_LO].base, + size_lo, 0, false); if (size_hi) { /* * The first part of the HI address is aliased at the LO address * so do not include that as usable memory. Is there any way * (or good reason) to describe that aliasing 2GB with DT? */ - create_fdt_socket_memory(fdt, s->memmap[TT_ATL_DDR_HI].base + size= _lo, - size_hi, 0, false); + riscv_create_fdt_socket_memory(fdt, + s->memmap[TT_ATL_DDR_HI].base + siz= e_lo, + size_hi, 0, false); } } =20 @@ -225,11 +226,11 @@ static void create_fdt_cpu(TTAtlantisState *s, const = MemMapEntry *memmap, void *fdt =3D MACHINE(s)->fdt; g_autofree uint32_t *intc_phandles =3D g_new0(uint32_t, ms->smp.cpus); =20 - fdt_create_cpu_socket_subnode(fdt, TT_ACLINT_TIMEBASE_FREQ); + riscv_fdt_create_cpu_socket_subnode(fdt, TT_ACLINT_TIMEBASE_FREQ); =20 - create_fdt_socket_cpus(fdt, s->soc.harts, 0, s->soc.num_harts, - s->soc.hartid_base, &fdt_phandle, intc_phandles, - false, false); + riscv_create_fdt_socket_cpus(fdt, s->soc.harts, 0, s->soc.num_harts, + s->soc.hartid_base, &fdt_phandle, + intc_phandles, false, false); =20 create_fdt_memory(s); =20 @@ -367,8 +368,9 @@ static void create_fdt(TTAtlantisState *s) { MachineState *ms =3D MACHINE(s); =20 - ms->fdt =3D create_board_device_tree("Tenstorrent Atlantis RISC-V Mach= ine", - "tenstorrent,atlantis", &s->fdt_siz= e); + ms->fdt =3D riscv_create_board_device_tree( + "Tenstorrent Atlantis RISC-V Machine", + "tenstorrent,atlantis", &s->fdt_size); =20 qemu_fdt_add_subnode(ms->fdt, "/chosen"); =20 diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 329ccdb5a7..b796220fc2 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -360,12 +360,12 @@ static void create_fdt_socket_plic(RISCVVirtState *s, =20 plic_phandles[socket] =3D (*phandle)++; =20 - create_fdt_plic(ms->fdt, plic_addr, s->memmap[VIRT_PLIC].size, - plic_phandles[socket], FDT_PLIC_INT_CELLS, - FDT_PLIC_ADDR_CELLS, plic_cells, - cells_length * sizeof(uint32_t), - VIRT_IRQCHIP_NUM_SOURCES - 1, - numa_enabled, socket); + riscv_create_fdt_plic(ms->fdt, plic_addr, s->memmap[VIRT_PLIC].size, + plic_phandles[socket], FDT_PLIC_INT_CELLS, + FDT_PLIC_ADDR_CELLS, plic_cells, + cells_length * sizeof(uint32_t), + VIRT_IRQCHIP_NUM_SOURCES - 1, + numa_enabled, socket); =20 if (!socket) { platform_bus_add_all_fdt_nodes(ms->fdt, plic_name, @@ -601,7 +601,7 @@ static void create_fdt_sockets(RISCVVirtState *s, bool numa_enabled =3D riscv_numa_enabled(ms); bool is_32_bit =3D riscv_is_32bit(&s->soc[0]); =20 - fdt_create_cpu_socket_subnode(ms->fdt, + riscv_fdt_create_cpu_socket_subnode(ms->fdt, kvm_enabled() ? kvm_riscv_get_timebase_frequency(&s->soc->harts[0]= ) : RISCV_ACLINT_DEFAULT_TIMEBASE_FREQ); =20 @@ -615,14 +615,14 @@ static void create_fdt_sockets(RISCVVirtState *s, =20 phandle_pos -=3D s->soc[socket].num_harts; =20 - create_fdt_socket_cpus(ms->fdt, (&s->soc[socket])->harts, socket, - s->soc[socket].num_harts, - s->soc[socket].hartid_base, - phandle, &intc_phandles[phandle_pos], - numa_enabled, is_32_bit); + riscv_create_fdt_socket_cpus(ms->fdt, (&s->soc[socket])->harts, so= cket, + s->soc[socket].num_harts, + s->soc[socket].hartid_base, + phandle, &intc_phandles[phandle_pos], + numa_enabled, is_32_bit); =20 - create_fdt_socket_memory(ms->fdt, memaddr, memsize, - socket, riscv_numa_enabled(ms)); + riscv_create_fdt_socket_memory(ms->fdt, memaddr, memsize, + socket, riscv_numa_enabled(ms)); =20 if (virt_aclint_allowed() && s->have_aclint) { create_fdt_socket_aclint(s, socket, @@ -631,10 +631,11 @@ static void create_fdt_sockets(RISCVVirtState *s, hwaddr clintaddr =3D s->memmap[VIRT_CLINT].base + s->memmap[VIRT_CLINT].size * socket; =20 - create_fdt_socket_clint(ms->fdt, clintaddr, - s->memmap[VIRT_CLINT].size, - socket, &intc_phandles[phandle_pos], - s->soc[socket].num_harts, numa_enabled= ); + riscv_create_fdt_socket_clint(ms->fdt, clintaddr, + s->memmap[VIRT_CLINT].size, + socket, &intc_phandles[phandle_p= os], + s->soc[socket].num_harts, + numa_enabled); } } =20 @@ -1021,8 +1022,9 @@ static void create_fdt(RISCVVirtState *s) uint8_t rng_seed[32]; g_autofree char *name =3D NULL; =20 - ms->fdt =3D create_board_device_tree("riscv-virtio,qemu", "riscv-virti= o", - &s->fdt_size); + ms->fdt =3D riscv_create_board_device_tree("riscv-virtio,qemu", + "riscv-virtio", + &s->fdt_size); =20 /* * The "/soc/pci@..." node is needed for PCIE hotplugs diff --git a/include/hw/riscv/fdt-common.h b/include/hw/riscv/fdt-common.h index 1729a6abc6..371971d79d 100644 --- a/include/hw/riscv/fdt-common.h +++ b/include/hw/riscv/fdt-common.h @@ -11,29 +11,31 @@ =20 #include "target/riscv/cpu.h" =20 -void *create_board_device_tree(const char *model, const char *compatible, - int *fdt_size); -void create_fdt_socket_memory(void *fdt, hwaddr addr, uint64_t size, - int socket_id, bool numa_enabled); -void create_fdt_clint(void *fdt, hwaddr addr, uint64_t size, - uint32_t *intc_phandles, int num_harts); -void create_fdt_socket_clint(void *fdt, hwaddr addr, uint64_t size, - int socket_id, uint32_t *intc_phandles, - int num_harts, bool numa_enabled); -void fdt_create_cpu_socket_subnode(void *fdt, uint64_t timebase_frequency); -void create_fdt_socket_cpus(void *fdt, RISCVCPU *socket_harts, - int socket_id, int num_harts_socket, - int socket_hartid_base, uint32_t *phandle, - uint32_t *intc_phandles, bool numa_enabled, - bool is_32_bit); -void create_fdt_socket_cpu_sifive(void *fdt, char *clust_name, - int cpu_id, int socket_id, +void *riscv_create_board_device_tree(const char *model, const char *compat= ible, + int *fdt_size); +void riscv_create_fdt_socket_memory(void *fdt, hwaddr addr, uint64_t size, + int socket_id, bool numa_enabled); +void riscv_create_fdt_clint(void *fdt, hwaddr addr, uint64_t size, + uint32_t *intc_phandles, int num_harts); +void riscv_create_fdt_socket_clint(void *fdt, hwaddr addr, uint64_t size, + int socket_id, uint32_t *intc_phandles, + int num_harts, bool numa_enabled); +void riscv_fdt_create_cpu_socket_subnode(void *fdt, + uint64_t timebase_frequency); +void riscv_create_fdt_socket_cpus(void *fdt, RISCVCPU *socket_harts, + int socket_id, int num_harts_socket, int socket_hartid_base, uint32_t *phandl= e, - uint32_t *intc_phandles); -void create_fdt_plic(void *fdt, hwaddr addr, uint64_t size, - uint32_t plic_phandle, uint32_t int_cells, - uint32_t addr_cells, uint32_t *plic_cells, - uint32_t cells_size, uint32_t ndev_sources, - bool numa_enabled, int socket); + uint32_t *intc_phandles, bool numa_enabl= ed, + bool is_32_bit); +void riscv_create_fdt_socket_cpu_sifive(void *fdt, char *clust_name, + int cpu_id, int socket_id, + int socket_hartid_base, + uint32_t *phandle, + uint32_t *intc_phandles); +void riscv_create_fdt_plic(void *fdt, hwaddr addr, uint64_t size, + uint32_t plic_phandle, uint32_t int_cells, + uint32_t addr_cells, uint32_t *plic_cells, + uint32_t cells_size, uint32_t ndev_sources, + bool numa_enabled, int socket); void riscv_pmu_generate_fdt_node(void *fdt, uint32_t cmask, char *pmu_name= ); #endif --=20 2.43.0 From nobody Sat Sep 26 21:37:16 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1787869766; cv=none; d=zohomail.com; s=zohoarc; b=YkPJDUrLKOOC8o9JLAAIvW05eYCBW2KMeHI4NCN7Tfr85MpAimrkR2NsgrsyEQAilnto8/HwuRcSeYNRLuyv0LoCrHuIfcTK5c/tSGsfnI4jgmy2D56UcBJVUEFb6KSJGOLIturFaHCxCmJDmPdK7t4jlk2fR6MIRRzIoaj7b1U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787869766; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=N2OSowAW61ArPpCDoPFuyUhUfujPc6kA+zxGuTvZsiE=; b=JvOWG+LVxtqbChxB5Yhb2FesBjD1jnpeKrs2E23j7RuhcgpoPXNsdWgpV1eWMvnwkqubLKBYfOZTat2wotroTg9ajCfWyFuYFuI6lg85gm8Z3pcYEi5K1y9Vg0aOkfs3lQ6EI0HF1E8NSh4/g/7o3ObOZJr26VJGfsMvJ500GE4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787869766254412.0947838932151; Thu, 27 Aug 2026 15:29:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wziYN-0005FD-RM; Thu, 27 Aug 2026 18:26:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYM-0005Dy-CM for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:26:34 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYI-0001Ax-J3 for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:26:34 -0400 Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67RJLss3848961 for ; Thu, 27 Aug 2026 22:26:27 GMT Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ganr6a81v-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 27 Aug 2026 22:26:27 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-93494cce712so45235485a.3 for ; Thu, 27 Aug 2026 15:26:27 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([189.38.141.232]) by smtp.gmail.com with ESMTPSA id af79cd13be357-939173a734dsm8924985a.26.2026.08.27.15.26.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 15:26:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= N2OSowAW61ArPpCDoPFuyUhUfujPc6kA+zxGuTvZsiE=; b=alnJtb1gYz1jPToQ da/YAhSd1hqQRV5yyxHPsE1pbZMbj+tULPd+VcOIwK6sKnAK70N/QaHxwpGwE1VP KU9SidQp0lmpx6rpzORHzUnH6SNvVXK+8wbmk6677ur9R/ITafY2UOt+H5eLKm6y 6MhuPXnSTwuWdoNanvWVGHF1K5hreBMkrYb+pTHN6IxG21kiYNtxiqqMZ1e3fms4 Omrrp2viiybwPffZR2jRBZL2bd8FuHx0r1QH2GQzoMaPzfeKOWejt/W0TkVKg8vg JZONk5z7dd11WCDKH8UXo8qWnuk377T07S6RqHAzhn0kwDEPcyw/GeQ8s6zImaM6 b+KjuQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787869587; x=1788474387; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=N2OSowAW61ArPpCDoPFuyUhUfujPc6kA+zxGuTvZsiE=; b=BzFKQ754O7spdThjnF8IBX/UaBKhLXOn40gZwC0LIxwSXTAWfsUjYC1nm3wnyeOePp 1S8F0FlxLQBKVWv0s2yIxhHBpv0IvjjoY2HTvgBPQti3AHJ0DDvV1WiPDy5CasnY5P8o VweMh+oRpLvS4ffhWjKbHYhVBUIIXJX8+1wx5yeBlAUBZ+km0mMZt90HMaRQ2YP5JYyf k3zjXteE0q9jcuCUWZSG1r2OHn7ezSEeU1z250ApLHqu0JCqb/1F6Ijl/dEdMdlL9rit S32xujeFnqGHlai2gS0/m4X4MNfKbjci9ACVJnhzUEbiiHVZZhmavKNjJx2VXRaJkyh5 uvJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787869587; x=1788474387; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=N2OSowAW61ArPpCDoPFuyUhUfujPc6kA+zxGuTvZsiE=; b=iJBUpkpXEeTTdbRhYLlaRlF6UE+EJzKczzOfE2AWxTs6xDAjakHeySjbzFgrWPxoLP P4tNAvuUNOmKZ4CQb1g0b/g5LV4IuQsei68inh7KLPOd8s04LitcIG6qbQuU694811kS tJQcxqS5pxfyykveCgxiEbGTg0lBTwo80QhWI0vhprNN2BX0HxEeVORIh07oiWj1AgGI RhLpSN9dCTBZNdZeGjgmuViYbldPiZMQKcPtLkFr+lCX7AGiMHt9qTppAKVhdmgBH5HT OrxOUupsI7Vrqexyo7BBGXyRqXU023pvG1mZCiQvIFPj3rxQlsT4bjpbT1lTgxJVmlUx 7VYg== X-Gm-Message-State: AFuF++kgjfgdL22eXgtCoen3IsyjJOFFHpiDsZfC77j2QjsTOBsILulV S/xBN+wDs+53QQHVxZUUscss2hYdDcq1fePiKVP6G/W4k31Wa8wYGobbXs/rEXbiMs1BlArKLTB hh4jVnVG4MTCQOE1he+bdBZbLlsIY4kK3XfZxDVM4RfQOFPx6PqhaoKtbkx2aYpmTZg== X-Gm-Gg: AR+sD12fXLxjDi1NBdnjjNeGdi7/K8QQEHvUmEHJDHb3WDL1tw4V3gflrgNXAYyPiCt vPlk/galL68omCIjnzMnQto3gMhC+S251E0ix/qrTlfJo0k4IdzfN8rBtWbjzzz5Z8mPu221wzR UX1BcIGFuzgNPz5J/ExKRg/m4pIZjcO02u1pqMGPj2wm3us+xgbrTFGGFDN88r8QWMXydpZ4shC jKaQZ23KsdIvHC0pVBbh1IF3k/7NBgVhAXmIesOEKSQV2VamG68uAHmfbKdHtLRjnR+xPNCjBkM Z0cE0gGzgjqdnb0ptMuYoqadmYH2mwDzf74dVOPJII5oV5TcRlFeADAd11b7i0hKkVE7QlEplyt t0DJa2exNn8O4RIxevhvFWO/AaqLHbVwRFSt4Bg== X-Received: by 2002:a05:620a:9de:b0:939:3c0:7520 with SMTP id af79cd13be357-939137e2d4fmr217742485a.18.1787869586898; Thu, 27 Aug 2026 15:26:26 -0700 (PDT) X-Received: by 2002:a05:620a:9de:b0:939:3c0:7520 with SMTP id af79cd13be357-939137e2d4fmr217737985a.18.1787869586295; Thu, 27 Aug 2026 15:26:26 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Daniel Henrique Barboza , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Palmer Dabbelt Subject: [PATCH v4 02/14] hw/riscv/fdt-common, virt.c: add riscv_create_fdt_flash() Date: Thu, 27 Aug 2026 19:25:55 -0300 Message-ID: <20260827222608.329788-3-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> References: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX0JoPsfiAG52O SC6ZP4qr6mXXKHODVit0+vS/0qBYXwz6m/e45sV1zEdfgFbVQMPJt1OrGF1x+244HJ9psdNy7I6 piuppXoKSqWCLQMDen71q5ji1r8PULA90HBw2s++yJr2FRkdpB9ys64UYfrUDzwiVW59BP6ozfc iUZJdSOM5C5uEgAg+aBGUeLFtO9IMugNHq/SWj8BQgGhoI7wsVI25IRNGLl0o0J173/+jd1jSoz G50Ec5UeBncoZ8GeLtqB0QyRfg+H4L+UvY3GTVKTDutPQ1R4O3fz0OyQ1r9sp8CCXPu+hjNP2i6 lGlEuZa6lRDaWgDSxpwmlRgjGKKn+3GmS1z+SLwISNk6EQ1U28aGyUHQ60LBmylC+crXMjNt1Fz FiHxanVRMnDWMddWMMf7imeAM0N+EIbyP9hK/kbwXFe7w5mxJon9yhLnmOFZ00ThDyfHd4cztkb j47N1b+N+pW9zDNyO9w== X-Authority-Analysis: v=2.4 cv=d5DFDxjE c=1 sm=1 tr=0 ts=6a90b993 cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=MCIxunHWmQOg/5OnbzXZaw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=plQfXIS7czum7OicmoMA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 X-Proofpoint-GUID: zISzCKsF9Uh3NDvxjxHzmI5Awm3am2GR X-Proofpoint-ORIG-GUID: zISzCKsF9Uh3NDvxjxHzmI5Awm3am2GR X-Proofpoint-Spam-Info: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX6KqYj6f7UJHU CWQzCCgrPx1eh5Jz4Icd9JTluXhGxSrYsamEixQJFUxZyzLoJTacR36x4pjtY3Vf6G3Y4zCQgav PLtG+Aly5QI/CuTNzMS57Hvgs+SKNdA= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-27_08,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 malwarescore=0 lowpriorityscore=0 impostorscore=0 clxscore=1015 priorityscore=1501 spamscore=0 adultscore=0 suspectscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608270190 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1787869768825154100 Add a common helper to create a cfi-flash compatible flash subnode. This change only affects the existing 'virt' board for now but it will be used by the future 'riscv-server-ref' board in the future. No FDT changes intended. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Chao Liu --- hw/riscv/fdt-common.c | 12 ++++++++++++ hw/riscv/virt.c | 18 ++---------------- include/hw/riscv/fdt-common.h | 1 + 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/hw/riscv/fdt-common.c b/hw/riscv/fdt-common.c index 3a8da03cfb..6fcc1ce21f 100644 --- a/hw/riscv/fdt-common.c +++ b/hw/riscv/fdt-common.c @@ -283,3 +283,15 @@ void riscv_pmu_generate_fdt_node(void *fdt, uint32_t c= mask, char *pmu_name) qemu_fdt_setprop(fdt, pmu_name, "riscv,event-to-mhpmcounters", fdt_event_ctr_map, sizeof(fdt_event_ctr_map)); } + +void riscv_create_fdt_flash(void *fdt, hwaddr flashbase, hwaddr flashsize) +{ + g_autofree char *name =3D g_strdup_printf("/flash@%" PRIx64, flashbase= ); + + qemu_fdt_add_subnode(fdt, name); + qemu_fdt_setprop_string(fdt, name, "compatible", "cfi-flash"); + qemu_fdt_setprop_sized_cells(fdt, name, "reg", + 2, flashbase, 2, flashsize, + 2, flashbase + flashsize, 2, flashsize); + qemu_fdt_setprop_cell(fdt, name, "bank-width", 4); +} diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index b796220fc2..e48337dfd9 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -867,21 +867,6 @@ static void create_fdt_rtc(RISCVVirtState *s, } } =20 -static void create_fdt_flash(RISCVVirtState *s) -{ - MachineState *ms =3D MACHINE(s); - hwaddr flashsize =3D s->memmap[VIRT_FLASH].size / 2; - hwaddr flashbase =3D s->memmap[VIRT_FLASH].base; - g_autofree char *name =3D g_strdup_printf("/flash@%" PRIx64, flashbase= ); - - qemu_fdt_add_subnode(ms->fdt, name); - qemu_fdt_setprop_string(ms->fdt, name, "compatible", "cfi-flash"); - qemu_fdt_setprop_sized_cells(ms->fdt, name, "reg", - 2, flashbase, 2, flashsize, - 2, flashbase + flashsize, 2, flashsize); - qemu_fdt_setprop_cell(ms->fdt, name, "bank-width", 4); -} - static void create_fdt_fw_cfg(RISCVVirtState *s) { MachineState *ms =3D MACHINE(s); @@ -1043,7 +1028,8 @@ static void create_fdt(RISCVVirtState *s) =20 qemu_fdt_add_subnode(ms->fdt, "/aliases"); =20 - create_fdt_flash(s); + riscv_create_fdt_flash(ms->fdt, s->memmap[VIRT_FLASH].base, + s->memmap[VIRT_FLASH].size / 2); create_fdt_fw_cfg(s); create_fdt_pmu(s); } diff --git a/include/hw/riscv/fdt-common.h b/include/hw/riscv/fdt-common.h index 371971d79d..b422da6aef 100644 --- a/include/hw/riscv/fdt-common.h +++ b/include/hw/riscv/fdt-common.h @@ -38,4 +38,5 @@ void riscv_create_fdt_plic(void *fdt, hwaddr addr, uint64= _t size, uint32_t cells_size, uint32_t ndev_sources, bool numa_enabled, int socket); void riscv_pmu_generate_fdt_node(void *fdt, uint32_t cmask, char *pmu_name= ); +void riscv_create_fdt_flash(void *fdt, hwaddr flashbase, hwaddr flashsize); #endif --=20 2.43.0 From nobody Sat Sep 26 21:37:16 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1787869655; cv=none; d=zohomail.com; s=zohoarc; b=O32NZBj6AMSRZ9vm9EH4+r1IrUHjC0JmCwSx/n1Y4FtY8OoSaGXrZ5XGNiVy3nnxGvEVGg6mSMt7Bg69msKmxOxX6hxE+LsZ5JzZgvCyyOLxHKtP7vyzCGefjA65l2f+bn7jVzZJLcxzX3V8Ve0V+7pXWyLbTQ4R7Fx2yPUx7bU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787869655; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=mglMR9sepCnq/72agFm/d/CeSPJGeqMbwg073MKOW7c=; b=D/PoO/bp0kjX6OLQCx2Wlw1OVgsQzHdF6CxJD26GUkShSQ/9Pm9hw7Ed9LtmEsKkfR9+w5MdhpIPeq7V+K0fvrCJybJdV62uQgULoQqpiM78PGH7Tgo3ZPhcgOEUr3wEr4TCZp5I7JbjbI3MnkAXFitgveiBmTgs7svnRYUvgig= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787869655448132.81369405023872; Thu, 27 Aug 2026 15:27:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wziYR-0005Hh-Rm; Thu, 27 Aug 2026 18:26:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYP-0005G8-CU for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:26:37 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYK-0001Bj-R8 for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:26:37 -0400 Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67RJM7au795471 for ; Thu, 27 Aug 2026 22:26:30 GMT Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gam6fjp4j-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 27 Aug 2026 22:26:29 +0000 (GMT) Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-93909014c85so45012285a.0 for ; Thu, 27 Aug 2026 15:26:29 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([189.38.141.232]) by smtp.gmail.com with ESMTPSA id af79cd13be357-939173a734dsm8924985a.26.2026.08.27.15.26.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 15:26:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= mglMR9sepCnq/72agFm/d/CeSPJGeqMbwg073MKOW7c=; b=PEqsjnHSzA2MJ5c9 9ZR9Wbv/aYZEN8WSASmRtCcX2jxL74QY58XA1+1M8JOzPB/ASTDiDDGM4K4L9XQw bRsUqlyXzgpNITzzw21Dhk8j/9zPpcBdEaPFhrJp9+gcLnphERlpxMj7cjrlx1YB UpRAGwd+ZsIt/OjLQ1QTczl/vqsgFL8GWjod4ju2AYvVHWxKj8n+Ye/Mo+oOeYMQ brjlB0tQ7wt+dPDpWrYEct0xboL2rFZ1y3Bm7Wvk5PZiF8eG9yS7PR+yH99IYSAP MLfZYTSu29Jd1aVdQFFJU5t3WJ5S2yjLrEtpbJBqY+MoMF51CNTXOWrZMcETtO5c L3hSeA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787869589; x=1788474389; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=mglMR9sepCnq/72agFm/d/CeSPJGeqMbwg073MKOW7c=; b=GuhIY9Wt5vmo7ddaDDwzml0odu2yIoLuu5dKodgquQ89mZqYlRNGMhJhMi09OIpkug blEncyhcWoICmSpB3NbLznhpd6dnVQqy5KQ10MM8VsGmrpmyVHoX8uvm6WJnYxCZwyVY L3IiCuf7OweDI5om1xgtKs3Nu6UsR8Cjq6z0KUXP4/BIttfK0ODedJ+iJ7qn2K22DIdV qojlrA1oz6kKrVrdhQFi9y1eDnYe1cGg2IP4D+JMytHcR9f5Fmhiw0WZL/iREb+OMZyc YANffBOL0bQMkfDFtr/7/Eviwy+fHSR4hB6gScL0Cy2tItvM4KwxYQAPxe3DyWld0Q5v uuUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787869589; x=1788474389; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=mglMR9sepCnq/72agFm/d/CeSPJGeqMbwg073MKOW7c=; b=obDi3MWNbLCl9nA5jHgPO6HWrulVqEacLY61zmFWB0Qbf+zyx5HxXYhh1dDpwier87 7HvoHv8WNrAeaCmqY5Sw6Np9YQrrxLZvOYsxQcuxNLMpevI+YJmRmdDWLpJYPVJ8TTtz ygy9L/zngfwOsparjpVrGpUmZ9tVts/SwRdTbcecaSfJnnxMRdwySNNqvOcx6G43nrmC rv0Ye6VGdBBPuuTLls5H3j/sFoOiI5AJWJ4kzQvlvGI5dMFkJVaeW1pX9efnICOma6o0 vTMADwI4eMdOgeSkqc1FQc5LN3XRygjS52f7KbCA6E8ZXMg0B3RcbuxY3FeXIFSzg67q t1LA== X-Gm-Message-State: AFuF++kl9buGna0dQNSYREVJqSkUouv5UgN7n/OnoJvETN+WRXMlFbvD 6g07CcfPSdxNXFMVjNK43d1QulKYoJyNBIBxS3QNz1b75Q5Odhm4Z65amZhfiLLLicf1g/HzEQs J/EK3jh+hDDy3004MF25pB3CJBDeg/rzH9clNZlgMShkk/IhYUZ0jTQHHj42b+ivBVg== X-Gm-Gg: AR+sD13Pk6vMWVu2HZVj3ibQvXv80bdDBGWFTCp5WUJRCIkOc8kpkI3Lix6lz6hob1m tRq8/BYQ5XUFIjVp1jJ2HvyHHFxvRRTzBvtIKotHvgIc7PEztZKoWbSJUlP4gg+mNJxMOFGaYrp kssklKD0BmHAH8m+j1zHm4L5UxzWAYv/VOPXLExJaJS/VTstG6ZNwy19ub5sNRzTNrtMHKNM533 nn9yNjp2C6OkOYWJvrQlFIvWDGfYsiJP4KpIVSUNf3WHBrKJz3BeBT9cnFvo1VjDLX3Qyc3xbSg COcqJ530L0Z6PqLtsSWC44o637XSAL0yjDECfEGiMkiiEux/6dnM7puOndlUlqr8024RrkLpSFR f+EZn97uw3NgP7GMaVLvZhmZZbndziPWxIMEoYw== X-Received: by 2002:a05:620a:2101:b0:916:14f5:8866 with SMTP id af79cd13be357-939137df729mr192611785a.16.1787869589276; Thu, 27 Aug 2026 15:26:29 -0700 (PDT) X-Received: by 2002:a05:620a:2101:b0:916:14f5:8866 with SMTP id af79cd13be357-939137df729mr192608785a.16.1787869588777; Thu, 27 Aug 2026 15:26:28 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Daniel Henrique Barboza , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Palmer Dabbelt Subject: [PATCH v4 03/14] hw/riscv/fdt-common, virt.c: add riscv_create_fdt_syscon() Date: Thu, 27 Aug 2026 19:25:56 -0300 Message-ID: <20260827222608.329788-4-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> References: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX2r/NkuOtS5QH R/bOGVrvkjgWPequQqlItHADcbwjls3J9XfGhvXErKH4S7G3mQFdSIOltI8Yyu46zySkmrc1QkV mrNeuhwnzIA4/jsiawTTbeTc0bhrt2E= X-Proofpoint-GUID: QyFuapIiJIVyicNEo5IgNoddfFKKV72i X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX2e6wA28dDNkC 6kRsEeSJRjqdx7VKLayE1tlnBu4aa+PY58JNWGyW5RJDCz0kYiLQfVHghuwD8sR5MylfEscLhRw 8ymGgFgR91F63Cqgv7mooiDi7QvQa0tUVo3OSrXMxsiZrJmPJ6MX4VG2RFulMvUro01fxel74VS nXGjFuLfpu4BPvkPne7dphQIybbuGt9RozjUgQmHVtseLlPnfxLL1X3bGbmcTkNayjzjX9jRXEX azynzNuLpdLGiqJxJMDNIU6Q2yw+hPxomVIYFwH3soSoyWLJQEs1vPnUokqCKpMquNsoiI3yvNr c6Vnzz+FrDM8LE69oreBPY1J8pAa/cTBFitCMALfii544CSOdKA4tTduSNTJBh5VQSM1t5n9Ueg 1xXJ013Khg0U9LZ4oH0rU0hHHWWnd5Cei+0ySZKbbxMwV8W0DVepEbqk+0XPEqWHKS8GihxQtVk 3gAarxhYa2MNT3FY3Ug== X-Authority-Analysis: v=2.4 cv=eIgjSnp1 c=1 sm=1 tr=0 ts=6a90b996 cx=c_pps a=qKBjSQ1v91RyAK45QCPf5w==:117 a=MCIxunHWmQOg/5OnbzXZaw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=AqYGxfEHplewfouIbmYA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=NFOGd7dJGGMPyQGDc5-O:22 X-Proofpoint-ORIG-GUID: QyFuapIiJIVyicNEo5IgNoddfFKKV72i X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-27_08,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 clxscore=1015 impostorscore=0 malwarescore=0 bulkscore=0 phishscore=0 spamscore=0 priorityscore=1501 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608270190 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1787869657323154100 The soon to be added riscv-server-ref board will declare a syscon FDT similar to what the 'virt' board already does. It won't have a 'sifive,test0' and 'sifive,test1' compat string though, hence we'll add a flag to enable/disable these additional properties. The FDT is slightly changed: the subnode is now named 'soc/syscon' instead of 'soc/test' to be compatible with the latest device-tree docs. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Chao Liu --- hw/riscv/fdt-common.c | 54 +++++++++++++++++++++++++++++++++++ hw/riscv/virt.c | 46 +++-------------------------- include/hw/riscv/fdt-common.h | 4 +++ 3 files changed, 62 insertions(+), 42 deletions(-) diff --git a/hw/riscv/fdt-common.c b/hw/riscv/fdt-common.c index 6fcc1ce21f..eac5ca9322 100644 --- a/hw/riscv/fdt-common.c +++ b/hw/riscv/fdt-common.c @@ -295,3 +295,57 @@ void riscv_create_fdt_flash(void *fdt, hwaddr flashbas= e, hwaddr flashsize) 2, flashbase + flashsize, 2, flashsize); qemu_fdt_setprop_cell(fdt, name, "bank-width", 4); } + +/* + * @sifive_test_compat is used to create a FDT that declares + * compat with "sifive,test1" and "sifive,test0". This happens + * to be the case for the 'virt' machine that also creates a + * 'sifive_test' syscon device. + */ +void riscv_create_fdt_syscon(void *fdt, uint32_t *next_phandle, + hwaddr addr, hwaddr size, + uint32_t reboot, uint32_t poweroff, + bool sifive_test_compat) +{ + uint32_t syscon_phandle; + char *name; + + name =3D g_strdup_printf("/soc/syscon@%"HWADDR_PRIx, addr); + qemu_fdt_add_subnode(fdt, name); + + if (sifive_test_compat) { + static const char * const compat[3] =3D { + "sifive,test1", "sifive,test0", "syscon" + }; + + qemu_fdt_setprop_string_array(fdt, name, "compatible", + (char **)&compat, ARRAY_SIZE(compat)= ); + } else { + qemu_fdt_setprop_string(fdt, name, "compatible", "syscon"); + } + + qemu_fdt_setprop_sized_cells(fdt, name, "reg", + 2, addr, + 2, size); + + syscon_phandle =3D next_phandle ? (*next_phandle)++ : qemu_fdt_alloc_p= handle(fdt); + qemu_fdt_setprop_cell(fdt, name, "phandle", syscon_phandle); + + g_free(name); + + name =3D g_strdup_printf("/reboot"); + qemu_fdt_add_subnode(fdt, name); + qemu_fdt_setprop_string(fdt, name, "compatible", "syscon-reboot"); + qemu_fdt_setprop_cell(fdt, name, "regmap", syscon_phandle); + qemu_fdt_setprop_cell(fdt, name, "offset", 0x0); + qemu_fdt_setprop_cell(fdt, name, "value", reboot); + g_free(name); + + name =3D g_strdup_printf("/poweroff"); + qemu_fdt_add_subnode(fdt, name); + qemu_fdt_setprop_string(fdt, name, "compatible", "syscon-poweroff"); + qemu_fdt_setprop_cell(fdt, name, "regmap", syscon_phandle); + qemu_fdt_setprop_cell(fdt, name, "offset", 0x0); + qemu_fdt_setprop_cell(fdt, name, "value", poweroff); + g_free(name); +} diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index e48337dfd9..ab6c53c78a 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -768,47 +768,6 @@ static void create_fdt_pcie(RISCVVirtState *s, create_pcie_irq_map(s, ms->fdt, name, irq_pcie_phandle); } =20 -static void create_fdt_reset(RISCVVirtState *s, uint32_t *phandle) -{ - char *name; - uint32_t test_phandle; - MachineState *ms =3D MACHINE(s); - - test_phandle =3D (*phandle)++; - name =3D g_strdup_printf("/soc/test@%"HWADDR_PRIx, - s->memmap[VIRT_TEST].base); - qemu_fdt_add_subnode(ms->fdt, name); - { - static const char * const compat[3] =3D { - "sifive,test1", "sifive,test0", "syscon" - }; - qemu_fdt_setprop_string_array(ms->fdt, name, "compatible", - (char **)&compat, ARRAY_SIZE(compat)= ); - } - qemu_fdt_setprop_sized_cells(ms->fdt, name, "reg", - 2, s->memmap[VIRT_TEST].base, - 2, s->memmap[VIRT_TEST].size); - qemu_fdt_setprop_cell(ms->fdt, name, "phandle", test_phandle); - test_phandle =3D qemu_fdt_get_phandle(ms->fdt, name); - g_free(name); - - name =3D g_strdup_printf("/reboot"); - qemu_fdt_add_subnode(ms->fdt, name); - qemu_fdt_setprop_string(ms->fdt, name, "compatible", "syscon-reboot"); - qemu_fdt_setprop_cell(ms->fdt, name, "regmap", test_phandle); - qemu_fdt_setprop_cell(ms->fdt, name, "offset", 0x0); - qemu_fdt_setprop_cell(ms->fdt, name, "value", FINISHER_RESET); - g_free(name); - - name =3D g_strdup_printf("/poweroff"); - qemu_fdt_add_subnode(ms->fdt, name); - qemu_fdt_setprop_string(ms->fdt, name, "compatible", "syscon-poweroff"= ); - qemu_fdt_setprop_cell(ms->fdt, name, "regmap", test_phandle); - qemu_fdt_setprop_cell(ms->fdt, name, "offset", 0x0); - qemu_fdt_setprop_cell(ms->fdt, name, "value", FINISHER_PASS); - g_free(name); -} - static void create_fdt_uart(RISCVVirtState *s, uint32_t irq_mmio_phandle, int memId, int irqN= o) { @@ -994,7 +953,10 @@ static void finalize_fdt(RISCVVirtState *s) create_fdt_pcie(s, irq_pcie_phandle, msi_pcie_phandle, iommu_sys_phandle); =20 - create_fdt_reset(s, &phandle); + riscv_create_fdt_syscon(MACHINE(s)->fdt, &phandle, + s->memmap[VIRT_TEST].base, + s->memmap[VIRT_TEST].size, + FINISHER_RESET, FINISHER_PASS, true); =20 create_fdt_uarts(s, irq_mmio_phandle); =20 diff --git a/include/hw/riscv/fdt-common.h b/include/hw/riscv/fdt-common.h index b422da6aef..e377682b32 100644 --- a/include/hw/riscv/fdt-common.h +++ b/include/hw/riscv/fdt-common.h @@ -39,4 +39,8 @@ void riscv_create_fdt_plic(void *fdt, hwaddr addr, uint64= _t size, bool numa_enabled, int socket); void riscv_pmu_generate_fdt_node(void *fdt, uint32_t cmask, char *pmu_name= ); void riscv_create_fdt_flash(void *fdt, hwaddr flashbase, hwaddr flashsize); +void riscv_create_fdt_syscon(void *fdt, uint32_t *next_phandle, + hwaddr addr, hwaddr size, + uint32_t reboot, uint32_t poweroff, + bool sifive_test_compat); #endif --=20 2.43.0 From nobody Sat Sep 26 21:37:16 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1787869641; cv=none; d=zohomail.com; s=zohoarc; b=a31MC9TJYcTGAcRvoGTGxvtIn1z9xYXldbyAGu/jiNZBTzPn/gi8FsmE1Hi3VqfYRFDL6ItoQ3QBk/WKhoOR88GS67klJlRQzhlKeSbMSy17oloQVoiieE/BUAmy5ovDU92jpbU4pjF86D9x49jRc8UtYgbN0pDYL9lSLrpykRU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787869641; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=0CX/dyij1ROObEc9qiBrVy7iE1ABhLIjMFnCxbweU4Q=; b=dyw/dECYheX1UHnn5+9DH8OM1SbbRGVyn9ZA1zg4PR1xhXyGWTK7MCDLUlfTObqQnjFRFJKwbJFirYm2vU3+n9BeLSneYt3kREeQeQvV2zkts1D5zCLfP05EI4RHLZ61EhE8zsa+8ZUzuDKgvsJ8nLABEVp7Pa3JeCAbVhE1/dM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787869641055902.2621966663011; Thu, 27 Aug 2026 15:27:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wziYR-0005HQ-NH; Thu, 27 Aug 2026 18:26:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYP-0005GL-GU for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:26:37 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYL-0001CR-Og for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:26:37 -0400 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67RJMEp8548246 for ; Thu, 27 Aug 2026 22:26:33 GMT Received: from mail-qv1-f69.google.com (mail-qv1-f69.google.com [209.85.219.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gak562uqv-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 27 Aug 2026 22:26:32 +0000 (GMT) Received: by mail-qv1-f69.google.com with SMTP id 6a1803df08f44-90cc2b97f8fso7653706d6.0 for ; Thu, 27 Aug 2026 15:26:32 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([189.38.141.232]) by smtp.gmail.com with ESMTPSA id af79cd13be357-939173a734dsm8924985a.26.2026.08.27.15.26.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 15:26:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 0CX/dyij1ROObEc9qiBrVy7iE1ABhLIjMFnCxbweU4Q=; b=KyJ2hJ3LoCJsgFD3 HLgxGtQjlMWKK+0CVeqahJ56ZdtNOhInAv+5lDgPpQoBmvZAAH2cfkScfBbBsmG3 YNkOdqaHKAaVX1rhvktUCrt3qFq965XZGrlRe9aC1LKdXXV1CY9Fi2RfXmeVT9/h Aul5QWob+1MlpWYR4J4ShQqBzdFQam48NFOmiE11dev5ImqNraqovBr7aj4GOy3d YnD2it56u6ukWYedojtWB52lw56INeXIRRRk1x+A7mFRl1/yPRPAHuvePROIc6SM IOoNXzAny1XHEvfAPEbizzMy2o8CUTUTUmvi4sSL5CgIaHtG6uItov+zPbBycUZF zUP1+g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787869592; x=1788474392; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=0CX/dyij1ROObEc9qiBrVy7iE1ABhLIjMFnCxbweU4Q=; b=NmS6DVOB7OnbuHLAU/G1xctYM/3oef7rvnT26g4ufK2LxQyqSeg6RCxHR1LwQQ16Vf sLRjcNxgX18NaASWO2J2Sh8xnsM8d9cFvmi60p8JhovTSzdiYDFpFE7Wt2zIr1NvFMAB mTo2iDAigkKTG3M9rjDuwGppLU42IICl3be+qF7Ojo+Yw2XvoitwwPk3gHQb9X2MB1Lb uy4YlYeLe2TNpv/Dd/kVeRMr667YsUMNQOpU6X/u5JJM7qDCIThRE9Bgxx4GwALhNEAl ljEdgTyUuJyJlFCPcGTl8XJkKUpvVuBxip6lmohSQ4G22VVkKu1vnrQXLnLKgM/x4US+ yc+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787869592; x=1788474392; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=0CX/dyij1ROObEc9qiBrVy7iE1ABhLIjMFnCxbweU4Q=; b=JayCBvktTPRhqcxAlWBdC6wQ0Jgss7VKA6lY/auL0p+bgw5nTecBvOw4zCgK+6u+bM f+CyeEZvth4Xhl+7BILf4sZW3LkeuYIOfcxNk81kU00xl5Mri0g2rJvUSS6dQ12916w2 vGzv0xp5POwQugVxiszr7rrhCLuuNdxeZb/BQ+CqNLOF/vEadQQpAxaiR4LdR7UftowE WndPj58PgTyVwQw+PzDMD0xNIA5a3EtA3/RssdE2PiHYmSKpcv9W4hP7mAE4nLvbNRlr svh4CiUd1e/NyWlzBNnQ3gKpeMe0TjH8gNGTPAMhxhWjEYXYb0bbe73WXnd66LTb8a9X xR8w== X-Gm-Message-State: AFuF++kmCbQrsTTV0jmeE5e5D2ALBKEyK9dbU8O9JRQLjOfZY6dkhuOl YndV7nnieOhaHWXN9mkwKiWIErn+lyoVFUCG+4LPjGu8z4FX6NxrTmTknj0xLSAZIoxkMUrDAmz RP92NNPy4ZqcHN2lEKpupPa7rU+PhdqlaXKxB+j8xl+M+lgYHpiyur+ZGBsdo2CYJ7A== X-Gm-Gg: AR+sD124RBQEqQdRVqQ/hpx7bYcHQHRaCuyCnf0d6e7rm5RWzgTKKlV5FrQTD61bfR0 iDhpsoax6hweYek8Wwz4qVRBZVglGv6feZjh6PznPr479dILSBdSa9jDf9K/Oqa3qaH5tGy1db8 cow7/z5H/KjktKBVR6Lzk1ZN0kjz2XudJgdF6FNsAM+gWKPGyrp7Mh53vCrHDpDerMT8wJotWIv +a5V0ievj0WH6geWO3geLmLj/DhgkJ+CILYCdM1to8u8FeQcieN2tD5FXRAtaOYs4X7GKdAGr6Q /1+Hmoe0/Jy1pduW/z56+A/EtV7WQ8dOQCVH9nq+7Gp2AQj5fUyZhOJ+FTTnDeYhBN+tvDfzrNE K3szFxkNoDgobeUlcxPe5XFJvjntB4stdC3GVpQ== X-Received: by 2002:a05:620a:622a:b0:916:10f6:780f with SMTP id af79cd13be357-9391390443fmr230020585a.27.1787869592111; Thu, 27 Aug 2026 15:26:32 -0700 (PDT) X-Received: by 2002:a05:620a:622a:b0:916:10f6:780f with SMTP id af79cd13be357-9391390443fmr230017485a.27.1787869591716; Thu, 27 Aug 2026 15:26:31 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Daniel Henrique Barboza , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Palmer Dabbelt Subject: [PATCH v4 04/14] hw/riscv/fdt-common, virt.c: add riscv_create_fdt_riscv_iommu_sys() Date: Thu, 27 Aug 2026 19:25:57 -0300 Message-ID: <20260827222608.329788-5-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> References: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfXzCr+IO8ad8Ua iC3N2OjizijQHvhf/3I/uN5NeqapcQYNMdnfr/bE00czPuM+oJHRiyedipD+lrVHuA4lUfByVpi RVMCZchRER7NUPFR289Pl+agjlUz8Nk= X-Proofpoint-ORIG-GUID: WMuktm0WMXiDZjHT_wtBnx9cNM9KaHGE X-Proofpoint-GUID: WMuktm0WMXiDZjHT_wtBnx9cNM9KaHGE X-Authority-Analysis: v=2.4 cv=G+Ms1dk5 c=1 sm=1 tr=0 ts=6a90b998 cx=c_pps a=wEM5vcRIz55oU/E2lInRtA==:117 a=MCIxunHWmQOg/5OnbzXZaw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=AqYGxfEHplewfouIbmYA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=OIgjcC2v60KrkQgK7BGD:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX+j7kYytIuGU+ cMqUedcgO45/4kO2C+0vmokGhb3hfG+SW9mzNJ9r4WvourozWP1yA0o2RBZO4WHyIEWWX0VTMgf BzCGcD/qmf44+9pDeh9IHUhlH2tz85N8XyngXfF27ruMzLX7Bbng5AhFlxw6NlE/ZLSn2fam48q J4ZHWplOlmO59Ker2QgE/f7aPDtzBlfL4mOVzSuMumJ4CQiljTDjUpeEXZNHfZst+ZD8vrFr9RP eM62d1qi+lnie7IyMVBFTiVz0G5/dELfsoydjFBNR0Ap/QXUlvLRfKskPv4I16VMP08YiINTvHA qvfKM8c/7pZVkS+I9U98Dhk6ymk/K1Bguzr5JcyazA/3cxcswmMHmLl+v66d2UMoWctG3Eb2rta 8Fd2z72N42bWqyxmKEG4ShrZSJDfK+R2w4Er5w2JbfoCu9uo+Fi5lFu/nclkU7WQcT4xAD+azdo irV4+kUCpHsEQSRRuJg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-27_08,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 lowpriorityscore=0 adultscore=0 clxscore=1015 bulkscore=0 phishscore=0 spamscore=0 impostorscore=0 malwarescore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608270190 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1787869643715158500 Both the 'virt' board and the future 'riscv-server-ref' boards uses an iommu-sys device that is declared in the DT. Create a helper to encapsulate the logic and avoid copy/pasting stuff between boards. The helper will return the iommu phandle value instead of returning void and writing the used phandle in an extra argument. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Chao Liu --- hw/riscv/fdt-common.c | 35 ++++++++++++++++++++++++ hw/riscv/virt.c | 50 ++++++----------------------------- include/hw/riscv/fdt-common.h | 5 ++++ 3 files changed, 48 insertions(+), 42 deletions(-) diff --git a/hw/riscv/fdt-common.c b/hw/riscv/fdt-common.c index eac5ca9322..88589330fb 100644 --- a/hw/riscv/fdt-common.c +++ b/hw/riscv/fdt-common.c @@ -13,6 +13,8 @@ #include "hw/core/boards.h" #include "hw/riscv/fdt-common.h" #include "target/riscv/cpu_bits.h" +#include "hw/riscv/riscv-iommu-bits.h" +#include "hw/riscv/iommu.h" =20 void *riscv_create_board_device_tree(const char *model, const char *compat= ible, int *fdt_size) @@ -349,3 +351,36 @@ void riscv_create_fdt_syscon(void *fdt, uint32_t *next= _phandle, qemu_fdt_setprop_cell(fdt, name, "value", poweroff); g_free(name); } + +uint32_t riscv_create_fdt_riscv_iommu_sys(void *fdt, hwaddr addr, hwaddr s= ize, + uint32_t *next_phandle, + uint32_t irq_chip, + uint32_t msi_phandle, + uint32_t iommu_sys_irq) +{ + const char comp[] =3D "riscv,iommu"; + g_autofree char *iommu_node =3D NULL; + uint32_t iommu_phandle; + + iommu_node =3D g_strdup_printf("/soc/iommu@%"HWADDR_PRIx, addr); + qemu_fdt_add_subnode(fdt, iommu_node); + + qemu_fdt_setprop(fdt, iommu_node, "compatible", comp, sizeof(comp)); + qemu_fdt_setprop_cell(fdt, iommu_node, "#iommu-cells", 1); + + iommu_phandle =3D next_phandle ? (*next_phandle)++ : qemu_fdt_alloc_ph= andle(fdt); + qemu_fdt_setprop_cell(fdt, iommu_node, "phandle", iommu_phandle); + + qemu_fdt_setprop_sized_cells(fdt, iommu_node, "reg", 2, addr, 2, size); + qemu_fdt_setprop_cell(fdt, iommu_node, "interrupt-parent", irq_chip); + + qemu_fdt_setprop_cells(fdt, iommu_node, "interrupts", + iommu_sys_irq + RISCV_IOMMU_INTR_CQ, FDT_IRQ_TYPE_EDGE_LOW, + iommu_sys_irq + RISCV_IOMMU_INTR_FQ, FDT_IRQ_TYPE_EDGE_LOW, + iommu_sys_irq + RISCV_IOMMU_INTR_PM, FDT_IRQ_TYPE_EDGE_LOW, + iommu_sys_irq + RISCV_IOMMU_INTR_PQ, FDT_IRQ_TYPE_EDGE_LOW); + + qemu_fdt_setprop_cell(fdt, iommu_node, "msi-parent", msi_phandle); + + return iommu_phandle; +} diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index ab6c53c78a..8a165f4d9e 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -869,46 +869,6 @@ static void create_fdt_virtio_iommu(RISCVVirtState *s,= uint16_t bdf) bdf + 1, iommu_phandle, bdf + 1, 0xffff - bdf); } =20 -static void create_fdt_iommu_sys(RISCVVirtState *s, uint32_t irq_chip, - uint32_t msi_phandle, - uint32_t *iommu_sys_phandle) -{ - const char comp[] =3D "riscv,iommu"; - void *fdt =3D MACHINE(s)->fdt; - uint32_t iommu_phandle; - g_autofree char *iommu_node =3D NULL; - hwaddr addr =3D s->memmap[VIRT_IOMMU_SYS].base; - hwaddr size =3D s->memmap[VIRT_IOMMU_SYS].size; - uint32_t iommu_irq_map[RISCV_IOMMU_INTR_COUNT] =3D { - IOMMU_SYS_IRQ + RISCV_IOMMU_INTR_CQ, - IOMMU_SYS_IRQ + RISCV_IOMMU_INTR_FQ, - IOMMU_SYS_IRQ + RISCV_IOMMU_INTR_PM, - IOMMU_SYS_IRQ + RISCV_IOMMU_INTR_PQ, - }; - - iommu_node =3D g_strdup_printf("/soc/iommu@%x", - (unsigned int) s->memmap[VIRT_IOMMU_SYS].ba= se); - iommu_phandle =3D qemu_fdt_alloc_phandle(fdt); - qemu_fdt_add_subnode(fdt, iommu_node); - - qemu_fdt_setprop(fdt, iommu_node, "compatible", comp, sizeof(comp)); - qemu_fdt_setprop_cell(fdt, iommu_node, "#iommu-cells", 1); - qemu_fdt_setprop_cell(fdt, iommu_node, "phandle", iommu_phandle); - - qemu_fdt_setprop_sized_cells(fdt, iommu_node, "reg", 2, addr, 2, size); - qemu_fdt_setprop_cell(fdt, iommu_node, "interrupt-parent", irq_chip); - - qemu_fdt_setprop_cells(fdt, iommu_node, "interrupts", - iommu_irq_map[0], FDT_IRQ_TYPE_EDGE_LOW, - iommu_irq_map[1], FDT_IRQ_TYPE_EDGE_LOW, - iommu_irq_map[2], FDT_IRQ_TYPE_EDGE_LOW, - iommu_irq_map[3], FDT_IRQ_TYPE_EDGE_LOW); - - qemu_fdt_setprop_cell(fdt, iommu_node, "msi-parent", msi_phandle); - - *iommu_sys_phandle =3D iommu_phandle; -} - static void create_fdt_iommu(RISCVVirtState *s, uint16_t bdf) { const char comp[] =3D "riscv,pci-iommu"; @@ -947,8 +907,14 @@ static void finalize_fdt(RISCVVirtState *s) create_fdt_virtio(s, irq_virtio_phandle); =20 if (virt_is_iommu_sys_enabled(s)) { - create_fdt_iommu_sys(s, irq_mmio_phandle, msi_pcie_phandle, - &iommu_sys_phandle); + iommu_sys_phandle =3D + riscv_create_fdt_riscv_iommu_sys(MACHINE(s)->fdt, + s->memmap[VIRT_IOMMU_SYS].bas= e, + s->memmap[VIRT_IOMMU_SYS].siz= e, + &phandle, + irq_mmio_phandle, + msi_pcie_phandle, + IOMMU_SYS_IRQ); } create_fdt_pcie(s, irq_pcie_phandle, msi_pcie_phandle, iommu_sys_phandle); diff --git a/include/hw/riscv/fdt-common.h b/include/hw/riscv/fdt-common.h index e377682b32..65711468b8 100644 --- a/include/hw/riscv/fdt-common.h +++ b/include/hw/riscv/fdt-common.h @@ -43,4 +43,9 @@ void riscv_create_fdt_syscon(void *fdt, uint32_t *next_ph= andle, hwaddr addr, hwaddr size, uint32_t reboot, uint32_t poweroff, bool sifive_test_compat); +uint32_t riscv_create_fdt_riscv_iommu_sys(void *fdt, hwaddr addr, hwaddr s= ize, + uint32_t *next_phandle, + uint32_t irq_chip, + uint32_t msi_phandle, + uint32_t iommu_sys_irq); #endif --=20 2.43.0 From nobody Sat Sep 26 21:37:16 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1787869723; cv=none; d=zohomail.com; s=zohoarc; b=AEGsufc7sYDP6YX1S5XEFfSOh7Y7gX9xjfVzeidbsqQEPJPxdggsUd5mniL35OMXlVNsz7fDy58X3h7UBRxYl9H4ROvtlL6+lTJm71ds8jGy0sZWscOPzMR+pnCqfaWjDa9IXW/8oTG7uDI9yYM2LEcpdIWsRf/38Wop8JwkYCg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787869723; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=lmRRjl4/oHeX76B0w+4rgO8G5wwFPYRuA5NTYJ4X2h0=; b=ewTSVaVU6niw3+RQv3HoqjJNVbSomD5KncARq5t4lvENp0mAGHlC205qbfMn3+KoAlvQiCaPl+Lf0PVWcL/0xkKC/gFIalLkt+ZOua2UhHCTbDvmx3CgFnZbyLmmOxMX7mqYMBeg5JSqdvMovn8CHhey+MGdws7sNz1kwtUEKSY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787869723472197.44730277895792; Thu, 27 Aug 2026 15:28:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wziYh-0005Yf-U0; Thu, 27 Aug 2026 18:26:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYf-0005UG-Re for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:26:53 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYd-0001Fe-GF for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:26:53 -0400 Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67RJLtcE848970 for ; Thu, 27 Aug 2026 22:26:40 GMT Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ganr6a82d-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 27 Aug 2026 22:26:40 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-92e52306621so40734585a.1 for ; Thu, 27 Aug 2026 15:26:40 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([189.38.141.232]) by smtp.gmail.com with ESMTPSA id af79cd13be357-939173a734dsm8924985a.26.2026.08.27.15.26.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 15:26:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= lmRRjl4/oHeX76B0w+4rgO8G5wwFPYRuA5NTYJ4X2h0=; b=BMIogK9l/50/qzaw R275zC/0FLMvNgWOmolnrpF35b5WioZrNFOxxyKAGzejlSPnfWVIA03VtoGpfapG Qfhpw3/RrXVpYajBiaBCQ4H8f3DT9nprwk0jzlEGK7HRW8PiRbY+WM4nP5REo6Oy kH+C0ippRZNZx4YgPj3WCHhn+oxZZmoiXVfMqIBjXonfJuAq1IZrARFrLH59Mak0 KCrFlB6cxxh9NbB5FQladbJpdPUmn0d7gYIRmPhwVZDhdxVthOmLppWtXYWPjCqi lC7AjW1mgjY9JVUyREKRFX9zjjy4aWaqv768Xwp9QfEbUHLdix/4IU40Y1PR07pn Qs1Gzg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787869600; x=1788474400; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=lmRRjl4/oHeX76B0w+4rgO8G5wwFPYRuA5NTYJ4X2h0=; b=VPEGI7dFekcBLOnvR9MY25DCCrPOR2T5PaCj7NY0s49AwddufJDqwysXQtJ9ExaXmW 5NinJw3dsZXQZzxZC/6C+tsDeUy3uxty0pqd7up2T9SQKAwOZz6Yml41wBCLfx11TA27 fozwHpiNZAj36fg/lF6UTX+tR8bz1nZOwD0954hQq6mOZLv/09iFttmtK7F68o77Q/b6 KxlGxR9hvxrFgyW7lXw3kPBInlaegSbO7wdU+d+zB46HmP6G++dlXyRy3LdDgWC5HE6I HSOVWjNkuMf2QFvcXswZ8b6eWXhlR2BpRkG1iRkt/GCZ95Ja3w+FWsyaP9dDo1LDydoE KaXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787869600; x=1788474400; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=lmRRjl4/oHeX76B0w+4rgO8G5wwFPYRuA5NTYJ4X2h0=; b=HgUptnikhXb0/kBllRB112J/aSxgqCRndYdcqAcCRUGa29lG6pL//fC1mpX/sdKa9k m+25e4gFqXPN8TxdwBMR6yexTV2S9C5U7WrZlrWsK31RL2429wjA9cY1O2ytpNUUJ6Hm reRDx7UHkRxg0jytPUXpT7bxph8/tkUPr2D8/eGVqK0M1PfnPKZ1UT7hTevgaZKKk5W+ 6t/hDGI1SKRe0jIDRgxJuMVITz0mRb+Bgfq8//Xd4YJg7R9OIh3Lg0UBcCX9ZK78hfFM mXHHybeTbcw2XQg13m6j5Iyh7eKilmBFRiK+t3BL2y5LjewvFq7EXxyierZNPjJtWZ5D Ff/A== X-Gm-Message-State: AFuF++l74P6REI+VVYwdKcoBbBryKVOXxMnU9bNlzRs3AKNHBJQy9TNQ ibLY0SnyD0Mtt0eb3EBDNMUVy3Y2PATLKqdTkfTn4gNGTWwE9J+RIG1gEOmdmLVAvcDJeFSqVdS zCDWL188ZGIB7JtUhI2xKMpV73H0qW+w5oysG6D8MEDQOs8VCK1w8yGHZ+ytIw1pvLA== X-Gm-Gg: AR+sD11g5hNU1acRxbo1OyAac8qXNm7wEmVTueO/YZCslnaWkr5SJyo9YfEXVe8oYkB cWGZpfES08T6zLdEqn6aGtv9owPk0dpBQrLavZCSqkw/VN/amfu9k7CiRL7WmmRNYAdSP9pqoiw 77JbAG9mTIBCM/lc5WHXUoDDmhRdCT/3SpmFQ+OBdXL5idWDL8f3gOQD9t914GRB2XpjkhmSXTc Ec7rh4giLgwlgkJsOALEkjhVMAI7mTF+ORE4pX1TmLzhbZaTHklf4cLvkStaoLGrsDENQXoLrp/ WKneCfoLI25tO9vKFUt1DWaf0RidiyIbD6m2hZNJgOzrItCEVIVThy7WlONgWJN9fOOqcoydxFt kv/xS6W2XpSuLlGltzADqj8ZFAJdn5Ub3Dq1ZJA== X-Received: by 2002:a05:620a:4506:b0:936:2fa5:387a with SMTP id af79cd13be357-93913990a9bmr226856985a.43.1787869594804; Thu, 27 Aug 2026 15:26:34 -0700 (PDT) X-Received: by 2002:a05:620a:4506:b0:936:2fa5:387a with SMTP id af79cd13be357-93913990a9bmr226850385a.43.1787869594147; Thu, 27 Aug 2026 15:26:34 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Daniel Henrique Barboza , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Palmer Dabbelt Subject: [PATCH v4 05/14] hw/riscv/fdt_common, virt.c: add riscv_create_fdt_pcie() Date: Thu, 27 Aug 2026 19:25:58 -0300 Message-ID: <20260827222608.329788-6-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> References: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX7BydiIOXfWE1 88meq74X4mr7SGuz6wWHtNf3qVuq+Q/QrW1/0DsYeUsST4lyYgoOEybhdnPLPGabNAKoxrtdUJt xUurIdCKx6Kf8l83BecI1q+v6yMpMHWKU8pAeDyOMuGANl+He+ZkDlZOXFQEb1gU/YKt3DGHAeg OhGQ5qD2EizotQ4utRvRT2DQRDIIpmlieC+63vGQWLGINAiGq8Pkd5ua7HooMkVuEQxGPyONPJC 2u05RsE/cB2wQGDhLNLJneBTgCYZKlS9/cubxgP02haR9ZYmlLt5yWnmObw84Q6ZqsVCQuGlSqc n2Yy5yyjP9GoNoP9/hqNfduMfyFN10UKYv2Ziq+yKjWROT0//CQyqnWbct9GZYrb2A918dLL59+ pCM5+CLguT1tDoWdoNH8feWfUXV9dOGyuyxOJ1LK2lVVyAr3DBxC57doULLc+14VazhVx+1mB1f DojeCFOx90SDn9ZnpHA== X-Authority-Analysis: v=2.4 cv=d5DFDxjE c=1 sm=1 tr=0 ts=6a90b9a0 cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=MCIxunHWmQOg/5OnbzXZaw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=nzCZRCZgkTuinHKBC8cA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 X-Proofpoint-GUID: FXIvdzEWDIjtzFI2Kk1YNc_T2c2fhYGG X-Proofpoint-ORIG-GUID: FXIvdzEWDIjtzFI2Kk1YNc_T2c2fhYGG X-Proofpoint-Spam-Info: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX12q72zvAHNTY mq4snWfsy6lR2fM5A0LGuUqMEtmCaH5PEg58rA+U6eAREJQ6Gk3j3xyGkW1FMLOQKw42h2VlsBE FLwhHXF9eAppEZD3bUOo5oL+Vj6sBx8= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-27_08,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 malwarescore=0 lowpriorityscore=0 impostorscore=0 clxscore=1015 priorityscore=1501 spamscore=0 adultscore=0 suspectscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608270190 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1787869726455154100 The pcie FDT is quite tedious but can be parametrized into a helper. This is going to benefit only the 'virt' board for now but it will be used by the 'riscv-server-ref' board in the near future too. Some other changes made: - FDT related macros are moved to fdt-common.h. Only a couple are being used by the helper ATM but more will be added in the next patches; - an RISCVAIAType enum is created. There are several FDTs that depends on the active AIA type being used, and we want a way to represent the different AIA modes that doesn't re-use the 'virt' specific VIRT_AIA_* macros. The enum vals are equivalent by design - we want "s->aia_type" to be used by 'virt' when calling the fdt helpers, and other boards will use "AIA_*" macros in their code. No FDT changes made. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/riscv/fdt-common.c | 111 ++++++++++++++++++++++++++++++++++ hw/riscv/virt.c | 111 +++------------------------------- include/hw/riscv/fdt-common.h | 29 +++++++++ include/hw/riscv/virt.h | 15 ----- 4 files changed, 149 insertions(+), 117 deletions(-) diff --git a/hw/riscv/fdt-common.c b/hw/riscv/fdt-common.c index 88589330fb..38813b6aa7 100644 --- a/hw/riscv/fdt-common.c +++ b/hw/riscv/fdt-common.c @@ -15,6 +15,8 @@ #include "target/riscv/cpu_bits.h" #include "hw/riscv/riscv-iommu-bits.h" #include "hw/riscv/iommu.h" +#include "hw/pci/pci.h" +#include "hw/pci/pcie_host.h" =20 void *riscv_create_board_device_tree(const char *model, const char *compat= ible, int *fdt_size) @@ -384,3 +386,112 @@ uint32_t riscv_create_fdt_riscv_iommu_sys(void *fdt, = hwaddr addr, hwaddr size, =20 return iommu_phandle; } + +static void create_pcie_irq_map(void *fdt, char *nodename, + uint32_t irqchip_phandle, + RISCVAIAType aia_type, uint32_t pcie_irq) +{ + int pin, dev; + uint32_t irq_map_stride =3D 0; + uint32_t full_irq_map[PCI_NUM_PINS * PCI_NUM_PINS * + FDT_MAX_INT_MAP_WIDTH] =3D {}; + uint32_t *irq_map =3D full_irq_map; + + /* + * This code creates a standard swizzle of interrupts such that + * each device's first interrupt is based on it's PCI_SLOT number. + * (See pci_swizzle_map_irq_fn()) + * + * We only need one entry per interrupt in the table (not one per + * possible slot) seeing the interrupt-map-mask will allow the table + * to wrap to any number of devices. + */ + for (dev =3D 0; dev < PCI_NUM_PINS; dev++) { + int devfn =3D dev * 0x8; + + for (pin =3D 0; pin < PCI_NUM_PINS; pin++) { + int irq_nr =3D pcie_irq + ((pin + PCI_SLOT(devfn)) % PCI_NUM_P= INS); + int i =3D 0; + + /* Fill PCI address cells */ + irq_map[i] =3D cpu_to_be32(devfn << 8); + i +=3D FDT_PCI_ADDR_CELLS; + + /* Fill PCI Interrupt cells */ + irq_map[i] =3D cpu_to_be32(pin + 1); + i +=3D FDT_PCI_INT_CELLS; + + /* Fill interrupt controller phandle and cells */ + irq_map[i++] =3D cpu_to_be32(irqchip_phandle); + irq_map[i++] =3D cpu_to_be32(irq_nr); + + if (aia_type !=3D AIA_TYPE_NONE) { + irq_map[i++] =3D cpu_to_be32(0x4); + } + + if (!irq_map_stride) { + irq_map_stride =3D i; + } + irq_map +=3D irq_map_stride; + } + } + + qemu_fdt_setprop(fdt, nodename, "interrupt-map", full_irq_map, + PCI_NUM_PINS * PCI_NUM_PINS * + irq_map_stride * sizeof(uint32_t)); + + qemu_fdt_setprop_cells(fdt, nodename, "interrupt-map-mask", + 0x1800, 0, 0, 0x7); +} + +/* + * NOTE: this function uses a "/soc/pci@..." FDT subnode that + * should be created beforehand. + */ +void riscv_create_fdt_pcie(void *fdt, int aia_type, bool has_iommu_sys, + const MemMapEntry *pcie_ecam, + const MemMapEntry *pcie_pio, + const MemMapEntry *pcie_mmio, + const MemMapEntry *high_pcie, + uint32_t irq_pcie_phandle, + uint32_t msi_pcie_phandle, + uint32_t iommu_sys_phandle, uint32_t pcie_irq) +{ + g_autofree char *name =3D NULL; + + name =3D g_strdup_printf("/soc/pci@%"HWADDR_PRIx, pcie_ecam->base); + qemu_fdt_setprop_cell(fdt, name, "#address-cells", FDT_PCI_ADDR_CELLS); + qemu_fdt_setprop_cell(fdt, name, "#interrupt-cells", FDT_PCI_INT_CELLS= ); + qemu_fdt_setprop_cell(fdt, name, "#size-cells", 0x2); + qemu_fdt_setprop_string(fdt, name, "compatible", "pci-host-ecam-generi= c"); + qemu_fdt_setprop_string(fdt, name, "device_type", "pci"); + qemu_fdt_setprop_cell(fdt, name, "linux,pci-domain", 0); + + qemu_fdt_setprop_cells(fdt, name, "bus-range", 0, + pcie_ecam->size / PCIE_MMCFG_SIZE_MIN - 1); + qemu_fdt_setprop(fdt, name, "dma-coherent", NULL, 0); + + if (aia_type =3D=3D AIA_TYPE_APLIC_IMSIC) { + qemu_fdt_setprop_cell(fdt, name, "msi-parent", msi_pcie_phandle); + } + + qemu_fdt_setprop_sized_cells(fdt, name, "reg", 2, + pcie_ecam->base, 2, pcie_ecam->size); + + qemu_fdt_setprop_sized_cells(fdt, name, "ranges", + 1, FDT_PCI_RANGE_IOPORT, 2, 0, + 2, pcie_pio->base, 2, pcie_pio->size, + 1, FDT_PCI_RANGE_MMIO, + 2, pcie_mmio->base, + 2, pcie_mmio->base, 2, pcie_mmio->size, + 1, FDT_PCI_RANGE_MMIO_64BIT, + 2, high_pcie->base, + 2, high_pcie->base, 2, high_pcie->size); + + if (has_iommu_sys) { + qemu_fdt_setprop_cells(fdt, name, "iommu-map", + 0, iommu_sys_phandle, 0, 0x10000); + } + + create_pcie_irq_map(fdt, name, irq_pcie_phandle, aia_type, pcie_irq); +} diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 8a165f4d9e..a28e6d200a 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -180,61 +180,6 @@ static void virt_flash_map(RISCVVirtState *s, sysmem); } =20 -static void create_pcie_irq_map(RISCVVirtState *s, void *fdt, char *nodena= me, - uint32_t irqchip_phandle) -{ - int pin, dev; - uint32_t irq_map_stride =3D 0; - uint32_t full_irq_map[PCI_NUM_PINS * PCI_NUM_PINS * - FDT_MAX_INT_MAP_WIDTH] =3D {}; - uint32_t *irq_map =3D full_irq_map; - - /* - * This code creates a standard swizzle of interrupts such that - * each device's first interrupt is based on it's PCI_SLOT number. - * (See pci_swizzle_map_irq_fn()) - * - * We only need one entry per interrupt in the table (not one per - * possible slot) seeing the interrupt-map-mask will allow the table - * to wrap to any number of devices. - */ - for (dev =3D 0; dev < PCI_NUM_PINS; dev++) { - int devfn =3D dev * 0x8; - - for (pin =3D 0; pin < PCI_NUM_PINS; pin++) { - int irq_nr =3D PCIE_IRQ + ((pin + PCI_SLOT(devfn)) % PCI_NUM_P= INS); - int i =3D 0; - - /* Fill PCI address cells */ - irq_map[i] =3D cpu_to_be32(devfn << 8); - i +=3D FDT_PCI_ADDR_CELLS; - - /* Fill PCI Interrupt cells */ - irq_map[i] =3D cpu_to_be32(pin + 1); - i +=3D FDT_PCI_INT_CELLS; - - /* Fill interrupt controller phandle and cells */ - irq_map[i++] =3D cpu_to_be32(irqchip_phandle); - irq_map[i++] =3D cpu_to_be32(irq_nr); - if (s->aia_type !=3D VIRT_AIA_TYPE_NONE) { - irq_map[i++] =3D cpu_to_be32(0x4); - } - - if (!irq_map_stride) { - irq_map_stride =3D i; - } - irq_map +=3D irq_map_stride; - } - } - - qemu_fdt_setprop(fdt, nodename, "interrupt-map", full_irq_map, - PCI_NUM_PINS * PCI_NUM_PINS * - irq_map_stride * sizeof(uint32_t)); - - qemu_fdt_setprop_cells(fdt, nodename, "interrupt-map-mask", - 0x1800, 0, 0, 0x7); -} - static void create_fdt_socket_aclint(RISCVVirtState *s, int socket, uint32_t *intc_phandles) @@ -723,51 +668,6 @@ static void create_fdt_virtio(RISCVVirtState *s, uint3= 2_t irq_virtio_phandle) } } =20 -static void create_fdt_pcie(RISCVVirtState *s, - uint32_t irq_pcie_phandle, - uint32_t msi_pcie_phandle, - uint32_t iommu_sys_phandle) -{ - g_autofree char *name =3D NULL; - MachineState *ms =3D MACHINE(s); - - name =3D g_strdup_printf("/soc/pci@%"HWADDR_PRIx, - s->memmap[VIRT_PCIE_ECAM].base); - qemu_fdt_setprop_cell(ms->fdt, name, "#address-cells", - FDT_PCI_ADDR_CELLS); - qemu_fdt_setprop_cell(ms->fdt, name, "#interrupt-cells", - FDT_PCI_INT_CELLS); - qemu_fdt_setprop_cell(ms->fdt, name, "#size-cells", 0x2); - qemu_fdt_setprop_string(ms->fdt, name, "compatible", - "pci-host-ecam-generic"); - qemu_fdt_setprop_string(ms->fdt, name, "device_type", "pci"); - qemu_fdt_setprop_cell(ms->fdt, name, "linux,pci-domain", 0); - qemu_fdt_setprop_cells(ms->fdt, name, "bus-range", 0, - s->memmap[VIRT_PCIE_ECAM].size / PCIE_MMCFG_SIZE_MIN - 1); - qemu_fdt_setprop(ms->fdt, name, "dma-coherent", NULL, 0); - if (s->aia_type =3D=3D VIRT_AIA_TYPE_APLIC_IMSIC) { - qemu_fdt_setprop_cell(ms->fdt, name, "msi-parent", msi_pcie_phandl= e); - } - qemu_fdt_setprop_sized_cells(ms->fdt, name, "reg", 2, - s->memmap[VIRT_PCIE_ECAM].base, 2, s->memmap[VIRT_PCIE_ECAM].size); - qemu_fdt_setprop_sized_cells(ms->fdt, name, "ranges", - 1, FDT_PCI_RANGE_IOPORT, 2, 0, - 2, s->memmap[VIRT_PCIE_PIO].base, 2, s->memmap[VIRT_PCIE_PIO].size, - 1, FDT_PCI_RANGE_MMIO, - 2, s->memmap[VIRT_PCIE_MMIO].base, - 2, s->memmap[VIRT_PCIE_MMIO].base, 2, s->memmap[VIRT_PCIE_MMIO].si= ze, - 1, FDT_PCI_RANGE_MMIO_64BIT, - 2, virt_high_pcie_memmap.base, - 2, virt_high_pcie_memmap.base, 2, virt_high_pcie_memmap.size); - - if (virt_is_iommu_sys_enabled(s)) { - qemu_fdt_setprop_cells(ms->fdt, name, "iommu-map", - 0, iommu_sys_phandle, 0, 0x10000); - } - - create_pcie_irq_map(s, ms->fdt, name, irq_pcie_phandle); -} - static void create_fdt_uart(RISCVVirtState *s, uint32_t irq_mmio_phandle, int memId, int irqN= o) { @@ -916,8 +816,15 @@ static void finalize_fdt(RISCVVirtState *s) msi_pcie_phandle, IOMMU_SYS_IRQ); } - create_fdt_pcie(s, irq_pcie_phandle, msi_pcie_phandle, - iommu_sys_phandle); + + riscv_create_fdt_pcie(MACHINE(s)->fdt, s->aia_type, + virt_is_iommu_sys_enabled(s), + &s->memmap[VIRT_PCIE_ECAM], + &s->memmap[VIRT_PCIE_PIO], + &s->memmap[VIRT_PCIE_MMIO], + &virt_high_pcie_memmap, + irq_pcie_phandle, msi_pcie_phandle, + iommu_sys_phandle, PCIE_IRQ); =20 riscv_create_fdt_syscon(MACHINE(s)->fdt, &phandle, s->memmap[VIRT_TEST].base, diff --git a/include/hw/riscv/fdt-common.h b/include/hw/riscv/fdt-common.h index 65711468b8..3750230865 100644 --- a/include/hw/riscv/fdt-common.h +++ b/include/hw/riscv/fdt-common.h @@ -11,6 +11,27 @@ =20 #include "target/riscv/cpu.h" =20 +#define FDT_PCI_ADDR_CELLS 3 +#define FDT_PCI_INT_CELLS 1 +#define FDT_PLIC_ADDR_CELLS 0 +#define FDT_PLIC_INT_CELLS 1 +#define FDT_APLIC_INT_CELLS 2 +#define FDT_APLIC_ADDR_CELLS 0 +#define FDT_IMSIC_INT_CELLS 0 +#define FDT_MAX_INT_CELLS 2 +#define FDT_MAX_INT_MAP_WIDTH (FDT_PCI_ADDR_CELLS + FDT_PCI_INT_CELLS + \ + 1 + FDT_MAX_INT_CELLS) +#define FDT_PLIC_INT_MAP_WIDTH (FDT_PCI_ADDR_CELLS + FDT_PCI_INT_CELLS + \ + 1 + FDT_PLIC_INT_CELLS) +#define FDT_APLIC_INT_MAP_WIDTH (FDT_PCI_ADDR_CELLS + FDT_PCI_INT_CELLS + \ + 1 + FDT_APLIC_INT_CELLS) + +typedef enum RISCVAIAType { + AIA_TYPE_NONE =3D 0, + AIA_TYPE_APLIC, + AIA_TYPE_APLIC_IMSIC, +} RISCVAIAType; + void *riscv_create_board_device_tree(const char *model, const char *compat= ible, int *fdt_size); void riscv_create_fdt_socket_memory(void *fdt, hwaddr addr, uint64_t size, @@ -48,4 +69,12 @@ uint32_t riscv_create_fdt_riscv_iommu_sys(void *fdt, hwa= ddr addr, hwaddr size, uint32_t irq_chip, uint32_t msi_phandle, uint32_t iommu_sys_irq); +void riscv_create_fdt_pcie(void *fdt, int aia_type, bool has_iommu_sys, + const MemMapEntry *pcie_ecam, + const MemMapEntry *pcie_pio, + const MemMapEntry *pcie_mmio, + const MemMapEntry *high_pcie, + uint32_t irq_pcie_phandle, + uint32_t msi_pcie_phandle, + uint32_t iommu_sys_phandle, uint32_t pcie_irq); #endif diff --git a/include/hw/riscv/virt.h b/include/hw/riscv/virt.h index 7c862b0da2..e516898f9a 100644 --- a/include/hw/riscv/virt.h +++ b/include/hw/riscv/virt.h @@ -121,21 +121,6 @@ enum { #define VIRT_PLIC_SIZE(__num_context) \ (VIRT_PLIC_CONTEXT_BASE + (__num_context) * VIRT_PLIC_CONTEXT_STRIDE) =20 -#define FDT_PCI_ADDR_CELLS 3 -#define FDT_PCI_INT_CELLS 1 -#define FDT_PLIC_ADDR_CELLS 0 -#define FDT_PLIC_INT_CELLS 1 -#define FDT_APLIC_INT_CELLS 2 -#define FDT_APLIC_ADDR_CELLS 0 -#define FDT_IMSIC_INT_CELLS 0 -#define FDT_MAX_INT_CELLS 2 -#define FDT_MAX_INT_MAP_WIDTH (FDT_PCI_ADDR_CELLS + FDT_PCI_INT_CELLS + \ - 1 + FDT_MAX_INT_CELLS) -#define FDT_PLIC_INT_MAP_WIDTH (FDT_PCI_ADDR_CELLS + FDT_PCI_INT_CELLS + \ - 1 + FDT_PLIC_INT_CELLS) -#define FDT_APLIC_INT_MAP_WIDTH (FDT_PCI_ADDR_CELLS + FDT_PCI_INT_CELLS + \ - 1 + FDT_APLIC_INT_CELLS) - bool virt_is_acpi_enabled(RISCVVirtState *s); bool virt_is_iommu_sys_enabled(RISCVVirtState *s); void virt_acpi_setup(RISCVVirtState *vms); --=20 2.43.0 From nobody Sat Sep 26 21:37:17 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1787869725; cv=none; d=zohomail.com; s=zohoarc; b=Y7l3dyX35Nh19K1q6ersv6fpeb/PLoIS3ucSmKosl65o9cCPev/RwI9nsPHiNxAUZsvTZ6dpaTFo4GkhAYTMRkRPuvnwu38afQPFYNNOQFbkAELUNJhUtkCgkTN6tnO2woBdv7NTeARBu9emQHFmVOP4wqQLddNTEhmnwKmdDMk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787869725; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ZT0iUTBK1UrFvANmHeHLvRYs2Xq1Vmxpjn3bhaymUBg=; b=dbh+CZ0pllztmhEjVZl+6Jho5ItVwep05GM2i3QFnq0d2UrXXEGtrZNTXbnE3Pvd2KdlV+DjKMNZItCyfPdT0zc6J4vGDRfmWOiMGxovrJoLbd965MLdXyN3WTlnJ+aIxmoLbN9iUY8neJ2KRfVE4qeOp4f0luZjWZDlMEQ/3Z8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787869725841956.1696828654524; Thu, 27 Aug 2026 15:28:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wziYf-0005T2-Ma; Thu, 27 Aug 2026 18:26:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYd-0005KW-N1 for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:26:51 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYb-0001Eo-EV for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:26:51 -0400 Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67RJLxhi218898 for ; Thu, 27 Aug 2026 22:26:38 GMT Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gaphw23aj-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 27 Aug 2026 22:26:38 +0000 (GMT) Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-9390ca1a9abso53706185a.2 for ; Thu, 27 Aug 2026 15:26:38 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([189.38.141.232]) by smtp.gmail.com with ESMTPSA id af79cd13be357-939173a734dsm8924985a.26.2026.08.27.15.26.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 15:26:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= ZT0iUTBK1UrFvANmHeHLvRYs2Xq1Vmxpjn3bhaymUBg=; b=keYcs7J/y5BfemBG YmwQ4tQ9H7wfPiMeqoTJ4sxZxR3U7pNGpoTNgwovNkWjc49JbTqJc3GMhgqOebvc 5fDJ3N8+RcucPVneL1h1DfhTe7CXcV2cLO+esO/BJNPA4xn2c61+Cr6VmYfzTONB pkY+TP204ZjraAUCHub6wS4WxDJLDo2+GdscAgkKf4Tcym7h+FQVrHLP28lWWfFf hiyLFrPeSS4v+LXhSnfBg6CbsOShj/JGE4JInFb3Vrl3Yqv34QqpGardDhsYctgI bhlcmHOItgnaz05s3He528zc3VLshK9SMGu9oXs71VURCJo/R9sNI8z+raFrzzUN I6ivdQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787869597; x=1788474397; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=ZT0iUTBK1UrFvANmHeHLvRYs2Xq1Vmxpjn3bhaymUBg=; b=TT0cj3X41DDVEAZVKM26GrI+3ZfPpseCkuunkqhnGdvK5uokdvHETs/kK86RArIu4/ qZiDpj7nnKjWdVifK6I/aSUFJnP1915AdgpXrlBRlPHWEkhL6mRRBwcb2sTkM7zfdxes BY7RghAPqDEzOPBYRWCr+ZQaddLexIujpPCqm7iBGiVWQUDIOJnvdNkojxFvVbqneUgz mPI974KmCio7BcK7XRwcDpycuKPiJhsujX3D23YDRnE253nCFti975uzs1zxe7+reC5J JOjvBC85nmNtSKDP8lmMy9jZmaYyvb06w9MCGSSYvpBn73WRaGDciaPewGkfUT8IoNbV HuSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787869597; x=1788474397; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ZT0iUTBK1UrFvANmHeHLvRYs2Xq1Vmxpjn3bhaymUBg=; b=beQun7poF8AdYR7MFiWAhc/SoewvTH708shv0UAWS6RiyUcVsDhYjlp5uYvBm9nav5 zhuyP2AJ4nxU99+58TOhCoQKg6BmOXsSZkoBefn43hsqWqsM5MwTa6CmnXvfB6oqXd0K +Ihnjqzp58tBJasVXa6KzmGYakGb0cKjkWgqlg4hbrzYnlZbzfJzOpkDwdCMDc8LA8FY /9xge/zeIPDaDdH/QfIL3ygtYuZjGBToSD+G1l+m84m/hix8+2mIMD82DpR6oXbqfXha YqmNGhF615vaANCPrcgAXv0bl2lKge4TeRDEYCKdno+m2HUlgP+xTM3VmK7heV046L6g NpVg== X-Gm-Message-State: AFuF++ky06DMqIRpcP4FV/Ni/OjQfAhH7pGf8z5yhw2whpU6fio/eOdE RViBL6aws/fdv+k5p+F7J6L3zBIvI31g8lrSYRRekU0WU6ZIqcFCYMgBqM18OpNL/b8J4RPsWDu LHNbSAGFIwWygMJi00fvlGxJSiIwXHE3YPs9IqysAQSFF+Hpu7qlYdJo3Pc8TBMgSiA== X-Gm-Gg: AR+sD11bA8/uztULlCnvw45avsS+7mQG7jhf2jR2EV8dP2Hb5bHj2PrMp3GlOJc8AjG /ifCcvWNqoqZxhTJtSEP4U11Xo1iQx2kGrNC/PbwiPbdXw1M690tHNAOoEWc3vgm4DuHU/p4iIH nFUiru9ClgJezSoFzC5Xxtm/mXBUN9H9AxQs+JRywKrgdohUo5mw0QsPOLdU7mmHmiAS1vwFjwK 4zEVRKy3z5iInIb7NLSDfzO0J5wmlBmeSbMjfiw9TE42RAsscT5t6tLLipMudQzbbLZUeB5GqlS R8FlIIQwBIC0yUdrIBaGOAc6xQYVjLPF03iG9HUA0dDUW0OODc7sbPENiU1cpWTBlN2yniYDR/w SPRociuyobwTQuBnAEOzdiu6kZ+Aayy1qBt+Ltg== X-Received: by 2002:a05:620a:1b92:b0:937:356d:eec with SMTP id af79cd13be357-93913816194mr284199385a.16.1787869597352; Thu, 27 Aug 2026 15:26:37 -0700 (PDT) X-Received: by 2002:a05:620a:1b92:b0:937:356d:eec with SMTP id af79cd13be357-93913816194mr284193685a.16.1787869596733; Thu, 27 Aug 2026 15:26:36 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Daniel Henrique Barboza , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Palmer Dabbelt Subject: [PATCH v4 06/14] hw/riscv/fdt_common, virt.c: add riscv_create_fdt_imsic() Date: Thu, 27 Aug 2026 19:25:59 -0300 Message-ID: <20260827222608.329788-7-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> References: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: 996qHy9aMIsZLSH8EgW0W4OzbVYr1fz5 X-Proofpoint-Spam-Info: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX+uD4YC1jYVtv PP28jAyz4KFAp3N9dYQeMTXtKTvVwWI1F2nf7SR9fn6o9WaUvu5Bf7dKkn4h8APjm+KkEkl45c/ DGfZvgcvrFN/NxIIauaf1flCei9ddnU= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX1juAedXR6nm1 vDYd99o59XOZh2RagotVhqKIDJqXOLhJ92GFxRklYkc78Z1m116v9smtApOAIehNkwSOHNWfDED 4NI+LN6DmF8eRhPIsRDbfjwYrVwGcWdJhCVvQ7r2qowVOkx1dYZp7N25lkyF04jeHBkhT3+DQEv kwk2VGkLsBQJ7iEih+cX7BOZUYxl4rOIXwqR9WblQIbJ0PsnocDe4Ig7Wa2S/uBMj0r+QzbO+OC KZ+K7Sqi7ZmH3aPiaRpSVT36UNTbU8jTf90pM7jbaQE5Rp5CYcTRxsniF1E3l9VGWfRWH8V85w4 MbGaGb7kzkWj3pZUuZVqcHQ+TIP4aBd1tXVcfXorcy/prj3FRO9TwLWwWVd2NUkZX9WDju2Kuzy L+mGxt0v0ko9Vdsza4OdRMEx/lx8/KyWGoACXeus5opICDlkRnjryjXnD1DlQ2OwZiVtG7fL3ZV wyjiVHx+NmbkJ+dpPLA== X-Proofpoint-ORIG-GUID: 996qHy9aMIsZLSH8EgW0W4OzbVYr1fz5 X-Authority-Analysis: v=2.4 cv=E8b9Y6dl c=1 sm=1 tr=0 ts=6a90b99e cx=c_pps a=qKBjSQ1v91RyAK45QCPf5w==:117 a=MCIxunHWmQOg/5OnbzXZaw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=JygOcCPXwz5LZr-bGiwA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=NFOGd7dJGGMPyQGDc5-O:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-27_08,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 spamscore=0 adultscore=0 phishscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 malwarescore=0 bulkscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608270190 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1787869727450158500 The FDT related to interrupt controllers should definitely be put into helpers, even if only 'virt' benefits from it, due to the amount of code that is relieved from the board alone. We'll start with 'imsic'. For this endeavor we're going to use a helper struct that will carry all the extra FDT arguments in a human format. The alternative would be to add 8 more function arguments, on top of 4 phandle arguments that we're passing around in all these controllers, and that's not only a poor reading experience but it's quite error prone too. We do not want to crowd the fdt-helper with non-FDT logic, hence we're handling the !kvm_enabled() cond in virt.c using the imsic_m_base argument. This is a pattern that we'll fall back on in the next patches too. No FDT changes made. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/riscv/fdt-common.c | 98 ++++++++++++++++++++++++++++++ hw/riscv/virt.c | 108 +++++----------------------------- include/hw/riscv/fdt-common.h | 21 +++++++ 3 files changed, 133 insertions(+), 94 deletions(-) diff --git a/hw/riscv/fdt-common.c b/hw/riscv/fdt-common.c index 38813b6aa7..ae24ad0011 100644 --- a/hw/riscv/fdt-common.c +++ b/hw/riscv/fdt-common.c @@ -15,8 +15,10 @@ #include "target/riscv/cpu_bits.h" #include "hw/riscv/riscv-iommu-bits.h" #include "hw/riscv/iommu.h" +#include "hw/intc/riscv_imsic.h" #include "hw/pci/pci.h" #include "hw/pci/pcie_host.h" +#include "hw/riscv/aia.h" =20 void *riscv_create_board_device_tree(const char *model, const char *compat= ible, int *fdt_size) @@ -495,3 +497,99 @@ void riscv_create_fdt_pcie(void *fdt, int aia_type, bo= ol has_iommu_sys, =20 create_pcie_irq_map(fdt, name, irq_pcie_phandle, aia_type, pcie_irq); } + +static void create_fdt_one_imsic(void *fdt, IMSICFdtProps *props, + hwaddr base_addr, + uint32_t *intc_phandles, uint32_t msi_pha= ndle, + bool m_mode, uint32_t imsic_guest_bits) +{ + RISCVHartArrayState *soc =3D (RISCVHartArrayState *)props->soc; + g_autofree char *imsic_name =3D NULL; + g_autofree uint32_t *imsic_cells =3D NULL; + g_autofree uint32_t *imsic_regs =3D NULL; + uint32_t imsic_max_hart_per_socket =3D 0; + static const char * const imsic_compat[2] =3D { + "qemu,imsics", "riscv,imsics" + }; + + imsic_cells =3D g_new0(uint32_t, props->smp_cpus * 2); + imsic_regs =3D g_new0(uint32_t, props->socket_count * 4); + + for (int cpu =3D 0; cpu < props->smp_cpus; cpu++) { + imsic_cells[cpu * 2 + 0] =3D cpu_to_be32(intc_phandles[cpu]); + imsic_cells[cpu * 2 + 1] =3D cpu_to_be32(m_mode ? IRQ_M_EXT : IRQ_= S_EXT); + } + + for (int socket =3D 0; socket < props->socket_count; socket++) { + hwaddr imsic_addr =3D base_addr + socket * props->imsic_group_max_= size; + uint32_t imsic_size =3D IMSIC_HART_SIZE(imsic_guest_bits) * + soc[socket].num_harts; + + imsic_regs[socket * 4 + 0] =3D cpu_to_be32(imsic_addr >> 32); + imsic_regs[socket * 4 + 1] =3D cpu_to_be32(imsic_addr); + imsic_regs[socket * 4 + 2] =3D 0; + imsic_regs[socket * 4 + 3] =3D cpu_to_be32(imsic_size); + if (imsic_max_hart_per_socket < soc[socket].num_harts) { + imsic_max_hart_per_socket =3D soc[socket].num_harts; + } + } + + imsic_name =3D g_strdup_printf("/soc/interrupt-controller@%"HWADDR_PRI= x, + base_addr); + qemu_fdt_add_subnode(fdt, imsic_name); + + qemu_fdt_setprop_string_array(fdt, imsic_name, "compatible", + (char **)&imsic_compat, + ARRAY_SIZE(imsic_compat)); + + qemu_fdt_setprop_cell(fdt, imsic_name, "#interrupt-cells", + FDT_IMSIC_INT_CELLS); + qemu_fdt_setprop(fdt, imsic_name, "interrupt-controller", NULL, 0); + qemu_fdt_setprop(fdt, imsic_name, "msi-controller", NULL, 0); + qemu_fdt_setprop(fdt, imsic_name, "interrupts-extended", + imsic_cells, props->smp_cpus * sizeof(uint32_t) * 2); + qemu_fdt_setprop(fdt, imsic_name, "reg", imsic_regs, + props->socket_count * sizeof(uint32_t) * 4); + qemu_fdt_setprop_cell(fdt, imsic_name, "riscv,num-ids", + props->irqchip_num_msis); + + if (imsic_guest_bits) { + qemu_fdt_setprop_cell(fdt, imsic_name, "riscv,guest-index-bits", + imsic_guest_bits); + } + + if (props->socket_count > 1) { + qemu_fdt_setprop_cell(fdt, imsic_name, "riscv,hart-index-bits", + imsic_num_bits(imsic_max_hart_per_socket)); + qemu_fdt_setprop_cell(fdt, imsic_name, "riscv,group-index-bits", + imsic_num_bits(props->socket_count)); + qemu_fdt_setprop_cell(fdt, imsic_name, "riscv,group-index-shift", + IMSIC_MMIO_GROUP_MIN_SHIFT); + } + qemu_fdt_setprop_cell(fdt, imsic_name, "phandle", msi_phandle); +} + +void riscv_create_fdt_imsic(void *fdt, IMSICFdtProps *props, + uint32_t *next_phandle, uint32_t *intc_phandle= s, + uint32_t *msi_m_phandle, uint32_t *msi_s_phand= le) +{ + if (next_phandle) { + *msi_m_phandle =3D (*next_phandle)++; + *msi_s_phandle =3D (*next_phandle)++; + } else { + *msi_m_phandle =3D qemu_fdt_alloc_phandle(fdt); + *msi_s_phandle =3D qemu_fdt_alloc_phandle(fdt); + } + + if (props->imsic_m_base) { + /* M-level IMSIC node */ + create_fdt_one_imsic(fdt, props, props->imsic_m_base, + intc_phandles, *msi_m_phandle, true, 0); + } + + /* S-level IMSIC node */ + create_fdt_one_imsic(fdt, props, props->imsic_s_base, + intc_phandles, *msi_s_phandle, false, + imsic_num_bits(props->aia_guests + 1)); + +} diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index a28e6d200a..468ec90696 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -320,98 +320,6 @@ static void create_fdt_socket_plic(RISCVVirtState *s, } } =20 -static void create_fdt_one_imsic(RISCVVirtState *s, hwaddr base_addr, - uint32_t *intc_phandles, uint32_t msi_pha= ndle, - bool m_mode, uint32_t imsic_guest_bits) -{ - int cpu, socket; - g_autofree char *imsic_name =3D NULL; - MachineState *ms =3D MACHINE(s); - int socket_count =3D riscv_socket_count(ms); - uint32_t imsic_max_hart_per_socket, imsic_size; - hwaddr imsic_addr; - g_autofree uint32_t *imsic_cells =3D NULL; - g_autofree uint32_t *imsic_regs =3D NULL; - static const char * const imsic_compat[2] =3D { - "qemu,imsics", "riscv,imsics" - }; - - imsic_cells =3D g_new0(uint32_t, ms->smp.cpus * 2); - imsic_regs =3D g_new0(uint32_t, socket_count * 4); - - for (cpu =3D 0; cpu < ms->smp.cpus; cpu++) { - imsic_cells[cpu * 2 + 0] =3D cpu_to_be32(intc_phandles[cpu]); - imsic_cells[cpu * 2 + 1] =3D cpu_to_be32(m_mode ? IRQ_M_EXT : IRQ_= S_EXT); - } - - imsic_max_hart_per_socket =3D 0; - for (socket =3D 0; socket < socket_count; socket++) { - imsic_addr =3D base_addr + socket * VIRT_IMSIC_GROUP_MAX_SIZE; - imsic_size =3D IMSIC_HART_SIZE(imsic_guest_bits) * - s->soc[socket].num_harts; - imsic_regs[socket * 4 + 0] =3D cpu_to_be32(imsic_addr >> 32); - imsic_regs[socket * 4 + 1] =3D cpu_to_be32(imsic_addr); - imsic_regs[socket * 4 + 2] =3D 0; - imsic_regs[socket * 4 + 3] =3D cpu_to_be32(imsic_size); - if (imsic_max_hart_per_socket < s->soc[socket].num_harts) { - imsic_max_hart_per_socket =3D s->soc[socket].num_harts; - } - } - - imsic_name =3D g_strdup_printf("/soc/interrupt-controller@%lx", - (unsigned long)base_addr); - qemu_fdt_add_subnode(ms->fdt, imsic_name); - qemu_fdt_setprop_string_array(ms->fdt, imsic_name, "compatible", - (char **)&imsic_compat, - ARRAY_SIZE(imsic_compat)); - - qemu_fdt_setprop_cell(ms->fdt, imsic_name, "#interrupt-cells", - FDT_IMSIC_INT_CELLS); - qemu_fdt_setprop(ms->fdt, imsic_name, "interrupt-controller", NULL, 0); - qemu_fdt_setprop(ms->fdt, imsic_name, "msi-controller", NULL, 0); - qemu_fdt_setprop(ms->fdt, imsic_name, "interrupts-extended", - imsic_cells, ms->smp.cpus * sizeof(uint32_t) * 2); - qemu_fdt_setprop(ms->fdt, imsic_name, "reg", imsic_regs, - socket_count * sizeof(uint32_t) * 4); - qemu_fdt_setprop_cell(ms->fdt, imsic_name, "riscv,num-ids", - VIRT_IRQCHIP_NUM_MSIS); - - if (imsic_guest_bits) { - qemu_fdt_setprop_cell(ms->fdt, imsic_name, "riscv,guest-index-bits= ", - imsic_guest_bits); - } - - if (socket_count > 1) { - qemu_fdt_setprop_cell(ms->fdt, imsic_name, "riscv,hart-index-bits", - imsic_num_bits(imsic_max_hart_per_socket)); - qemu_fdt_setprop_cell(ms->fdt, imsic_name, "riscv,group-index-bits= ", - imsic_num_bits(socket_count)); - qemu_fdt_setprop_cell(ms->fdt, imsic_name, "riscv,group-index-shif= t", - IMSIC_MMIO_GROUP_MIN_SHIFT); - } - qemu_fdt_setprop_cell(ms->fdt, imsic_name, "phandle", msi_phandle); -} - -static void create_fdt_imsic(RISCVVirtState *s, - uint32_t *phandle, uint32_t *intc_phandles, - uint32_t *msi_m_phandle, uint32_t *msi_s_phan= dle) -{ - *msi_m_phandle =3D (*phandle)++; - *msi_s_phandle =3D (*phandle)++; - - if (!kvm_enabled()) { - /* M-level IMSIC node */ - create_fdt_one_imsic(s, s->memmap[VIRT_IMSIC_M].base, intc_phandle= s, - *msi_m_phandle, true, 0); - } - - /* S-level IMSIC node */ - create_fdt_one_imsic(s, s->memmap[VIRT_IMSIC_S].base, intc_phandles, - *msi_s_phandle, false, - imsic_num_bits(s->aia_guests + 1)); - -} - /* Caller must free string after use */ static char *fdt_get_aplic_nodename(unsigned long aplic_addr) { @@ -585,8 +493,20 @@ static void create_fdt_sockets(RISCVVirtState *s, } =20 if (s->aia_type =3D=3D VIRT_AIA_TYPE_APLIC_IMSIC) { - create_fdt_imsic(s, phandle, intc_phandles, - &msi_m_phandle, &msi_s_phandle); + IMSICFdtProps props =3D { + .soc =3D &s->soc, + .socket_count =3D riscv_socket_count(ms), + .smp_cpus =3D ms->smp.cpus, + .imsic_m_base =3D !kvm_enabled() ? s->memmap[VIRT_IMSIC_M].bas= e : 0, + .imsic_s_base =3D s->memmap[VIRT_IMSIC_S].base, + .imsic_group_max_size =3D VIRT_IMSIC_GROUP_MAX_SIZE, + .irqchip_num_msis =3D VIRT_IRQCHIP_NUM_MSIS, + .aia_guests =3D s->aia_guests + }; + + riscv_create_fdt_imsic(ms->fdt, &props, phandle, intc_phandles, + &msi_m_phandle, &msi_s_phandle); + *msi_pcie_phandle =3D msi_s_phandle; } =20 diff --git a/include/hw/riscv/fdt-common.h b/include/hw/riscv/fdt-common.h index 3750230865..182c03d8ce 100644 --- a/include/hw/riscv/fdt-common.h +++ b/include/hw/riscv/fdt-common.h @@ -10,6 +10,8 @@ #define RISCV_VIRT_FDT_H =20 #include "target/riscv/cpu.h" +#include "hw/core/boards.h" +#include "hw/riscv/riscv_hart.h" =20 #define FDT_PCI_ADDR_CELLS 3 #define FDT_PCI_INT_CELLS 1 @@ -32,6 +34,22 @@ typedef enum RISCVAIAType { AIA_TYPE_APLIC_IMSIC, } RISCVAIAType; =20 +typedef struct IMSICFdtProps { + /* + * Machines will statically allocate RISCVHartArrayState[] pointer, + * e.g. "RISCVHartArrayState soc[VIRT_SOCKETS_MAX]". We'll have + * to use a void* pointer to handle a soc with variable sizes. + */ + void *soc; + hwaddr imsic_m_base; + hwaddr imsic_s_base; + int socket_count; + int smp_cpus; + int imsic_group_max_size; + int irqchip_num_msis; + int aia_guests; +} IMSICFdtProps; + void *riscv_create_board_device_tree(const char *model, const char *compat= ible, int *fdt_size); void riscv_create_fdt_socket_memory(void *fdt, hwaddr addr, uint64_t size, @@ -77,4 +95,7 @@ void riscv_create_fdt_pcie(void *fdt, int aia_type, bool = has_iommu_sys, uint32_t irq_pcie_phandle, uint32_t msi_pcie_phandle, uint32_t iommu_sys_phandle, uint32_t pcie_irq); +void riscv_create_fdt_imsic(void *fdt, IMSICFdtProps *fdt_props, + uint32_t *next_phandle, uint32_t *intc_phandle= s, + uint32_t *msi_m_phandle, uint32_t *msi_s_phand= le); #endif --=20 2.43.0 From nobody Sat Sep 26 21:37:17 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1787869706; cv=none; d=zohomail.com; s=zohoarc; b=aObEpIv/DIsMcWCGIrlniDL3WEu3rkwDDVUVYb1boyq7Tp25FQFxqQ/p9+FkqYEozn68cXBs3Bqu+hD4MjldmMA7A+ymdxcG/PtFjFVvLezR5ncEeYJYwvWZWfiJmBZGsPCIt0dwcJxL2se8lsUZQ4qAtJPYrJmoQ3fe+lDLNrk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787869706; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Ke9R/58Ze4h23ka0mdbmmjtY8J7DdKS77JkFVpG43AI=; b=CVMqRQ89Rf5nymUtpR2S8QClTBFrKgQkOh9mbn97nXjNKHIVgxHPX/46J+1dGQwqQ8f2nmMaEnR/1eGROcjxIr6WG63+A5xkMXXk0jeFtPOuzC8Cg+lpVv3gRnYqbUUewIaTbrO5NwXfXx3qTpwqBK7UzINa0Xvw8LTj8hhdhKA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787869706379859.9415022397221; Thu, 27 Aug 2026 15:28:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wziYn-0005c4-97; Thu, 27 Aug 2026 18:27:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYl-0005bC-24 for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:26:59 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYi-0001HE-U9 for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:26:58 -0400 Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67RJLuKH795149 for ; Thu, 27 Aug 2026 22:26:46 GMT Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gam6fjp5b-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 27 Aug 2026 22:26:45 +0000 (GMT) Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-93771aa0379so77148285a.1 for ; Thu, 27 Aug 2026 15:26:45 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([189.38.141.232]) by smtp.gmail.com with ESMTPSA id af79cd13be357-939173a734dsm8924985a.26.2026.08.27.15.26.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 15:26:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= Ke9R/58Ze4h23ka0mdbmmjtY8J7DdKS77JkFVpG43AI=; b=YSl9ps2YZ2dkToRW /QQlQ6LWXZqIbf+G1VibVgv/EiWEW4DXiJXaYnNGrWsirMes+S6orQJxAWU4azhY 2eUQ+Brgx343V5D2Nz90zESkSZ+4D0AhRS9WBq9Tz1xAkW8DCqSVGoffwhi6leuG N24rK4ea8/7MJNUKnaQ12IHD5DyJK5Ox7vuZ27ioyyI7n0ZeiF7Y2xy+p85ZG9pJ IysWHoveN17sANx0o5nEPAcMgMGz54D3bX1B5hjQP3J7L9X5h8Y6fU3Rdo8WM0TM YhjFhWDU/0gAIr5BbEhF2uisnXlMaRrSB+uW10fjkYQfCOs15GbMURYjCtlb2I+F j6GdXA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787869605; x=1788474405; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=Ke9R/58Ze4h23ka0mdbmmjtY8J7DdKS77JkFVpG43AI=; b=gxO9u51f80OeTXgoCxCWP6wqspXD/JPhvC1qjSeRD4NeqIV8bdLxtjMMIJxuqkR3Fl r21tkAZS3a0m/AVAmUQPndT9uYLm8vkZGP4JW8J3HmKhk0ZkJA5uOqgtdW5ZrCEjfb27 hL1jmsIreGH6eaY8J0X7JymzlDMJlMAHAsFWiynSP7la39uIjRrP+BgaEHJxID5SzHZV Z8xitGSNl8hNZNr2AYq4YFuAJb4WZutcGyjkHD3XMpdBTUALYJaI3ZxN0o2ejmaHbW1g fWM4VocCz4E+SdP9sQVI1yWt73qGwf6FNJpk9gvFMsdk2Mk6PUU/67roNqJ2LS8j1HZk CAxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787869605; x=1788474405; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Ke9R/58Ze4h23ka0mdbmmjtY8J7DdKS77JkFVpG43AI=; b=QWReXic1+2fKaww6uLS8jOz5D4n52W1lnewS/lPE8BIbPGLSexeY0n1eSOmW1Nbo+j AC8pl9X5SpaQ5F0+AWgZqcUUCbR/0hskvSDdxyTPTs3BNWUVtfouNC4nLTg6Z7jmX47M f2EykNV4+lLX3OJp7KlNVbA00ndPOkrl1LIYAmuXQRHGbhdF/DeQwFXU80qgRTfL7rQO E0AXQH1wP9JkodaQFFnEO09WH64qim/hJYqaz1TMGJrzjfW0I8t1HOiOye85UPjlQAfd kawC7NpvlSj2twEbnZD+S1+E/qux5RqjF+Dmgk7QNXDZqdscw3fdvNXsDboBx2+1Jnx9 N5Og== X-Gm-Message-State: AFuF++nqP4eoNcuL8KkZ2n+QBV8jnjXPk+B8XEXxq25TyHyUqMpplW4n o5vxkcq1wSEZU6ZnEnd5ECRkXSA0BJlXZW33L6QvSMBAoXwxtDR7iYy72jyHuaafCbTRRnxXsFc Is6OCuc0ikCEhSPLQ8ihBhhLqA3BYvJjRQMiLgV6HDhdWhT1aqEauinK9i3IUQwYY5A== X-Gm-Gg: AR+sD12i2pYJgUCwpZru40X9E2y71PFuAKsQpyKkk+6p7yYLum7/oMHg3I+FenfiX2U t5UmTTPT7mBWZjVTFByrQqY3d4g6P4ScSAv1sEUPNTDL7t+dPRc+7CqdOCNA5N6tUsNj+aul+hh mibBwFlcdmVR3qbVjDoM5pj2W7qGqvAasR1kRNw3hoOrnjFd1HUp53kYIT9p3ZWZvFWLfX3eefU 0XF5ymJuA/C0g7+JyWILe2JU8BmnUBiuoeAu2BUk86d4eImIJTcI3CDJTcDZe/hvkpDbHOyS66q /JvZIFpIoLGJwFOGMJADDs3p8Z6Icj7rfQQTr1kKqmXiuyzna38Pd6se569WOAzBA2prYF6M0la k33r0FPiAnTXPnFR8A/YJdqAvuWPjy920aTfW/w== X-Received: by 2002:a05:620a:43a6:b0:936:eb7f:d2c7 with SMTP id af79cd13be357-9391385e865mr274966485a.27.1787869600349; Thu, 27 Aug 2026 15:26:40 -0700 (PDT) X-Received: by 2002:a05:620a:43a6:b0:936:eb7f:d2c7 with SMTP id af79cd13be357-9391385e865mr274958185a.27.1787869599658; Thu, 27 Aug 2026 15:26:39 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Daniel Henrique Barboza , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Palmer Dabbelt Subject: [PATCH v4 07/14] hw/riscv/fdt_common, virt.c: add riscv_create_fdt_socket_aplic() Date: Thu, 27 Aug 2026 19:26:00 -0300 Message-ID: <20260827222608.329788-8-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> References: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX5YfLrLQVWfXg 5/EHqgr2MlnOoFa7EQlDOd2yXDIdE+nQ0IHjQN+TvCUGLKM2UI5tIi0auDaMlomikWGUpMHnyt1 qFvArxmg4x0dzq2sG/LGdRETF2C3no4= X-Proofpoint-GUID: rIkDNXyxNbtH5V09ypG_I4LqJlbETt9A X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX0FHCWydI3dSB 6w0a5HRv/gCfPLRmMMrR4pxqeHQ5jskDjDI8TOar/7n7E6NnsaePC73kEHP0fwIv06YxfudIswV vC0tvdGDIDd2Hjqbu+GOqEcoFIg/Z+o8jwkukuul3fI9OqgJzJ+SMcAfjFFO8hv+O4nZria7BGL 1A9JCxZol/Ts6DgoJoBo2/BghNSnm9eYCCW96U+g35/Ypzp7b0yzgaG751REoMej780RLdw3nPr t7GLON8QXM63B8Xt0sO+QrWr6GS4Cb2D8Iwz/KKyGClD9JvxGGkzcHHg3KL8nzSKplV2LItejUj wnnZb/aHIRHtMsLQAa9fhv/xCsHV92n/to9wkULYRJHP2bGEd+JOFr7Xo79gVqv6JSAWJuDkwVH 5hX8uyIj6th7lqqKD07KUetErX/sSj2JhV42rDXw3dnSqwd8A+u8/sXxIqtJdpQ1LvruPIAv1ww iJxXcuGLvEJ6fgfuzcA== X-Authority-Analysis: v=2.4 cv=eIgjSnp1 c=1 sm=1 tr=0 ts=6a90b9a5 cx=c_pps a=qKBjSQ1v91RyAK45QCPf5w==:117 a=MCIxunHWmQOg/5OnbzXZaw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=n_9SJqc2hf8O7kRhLXIA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=NFOGd7dJGGMPyQGDc5-O:22 X-Proofpoint-ORIG-GUID: rIkDNXyxNbtH5V09ypG_I4LqJlbETt9A X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-27_08,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 clxscore=1015 impostorscore=0 malwarescore=0 bulkscore=0 phishscore=0 spamscore=0 priorityscore=1501 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608270190 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1787869708147154100 Similar to what we did with 'imsic' in the previous patch, including creating a helper struct to encapsulate the extra arguments required to create the FDT. TODO: I believe the tt-atlantis board can use this same helper too. We just need to verify how to map the phandles used by it and what the helper is using (which was inherited by the 'virt' board). No FDT changes intended. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/riscv/fdt-common.c | 109 ++++++++++++++++++++++++++ hw/riscv/virt.c | 139 ++++++---------------------------- include/hw/riscv/fdt-common.h | 19 +++++ 3 files changed, 151 insertions(+), 116 deletions(-) diff --git a/hw/riscv/fdt-common.c b/hw/riscv/fdt-common.c index ae24ad0011..d815c5adff 100644 --- a/hw/riscv/fdt-common.c +++ b/hw/riscv/fdt-common.c @@ -11,6 +11,7 @@ #include "qemu/error-report.h" #include "system/device_tree.h" #include "hw/core/boards.h" +#include "hw/core/sysbus-fdt.h" #include "hw/riscv/fdt-common.h" #include "target/riscv/cpu_bits.h" #include "hw/riscv/riscv-iommu-bits.h" @@ -593,3 +594,111 @@ void riscv_create_fdt_imsic(void *fdt, IMSICFdtProps = *props, imsic_num_bits(props->aia_guests + 1)); =20 } + +/* Caller must free string after use */ +static char *fdt_get_aplic_nodename(hwaddr aplic_addr) +{ + return g_strdup_printf("/soc/interrupt-controller@%"HWADDR_PRIx, + aplic_addr); +} + +static void create_fdt_one_aplic(void *fdt, APLICFdtProps *props, + hwaddr aplic_addr, uint32_t aplic_size, + uint32_t msi_phandle, + uint32_t *intc_phandles, + uint32_t aplic_phandle, + uint32_t aplic_child_phandle, + bool m_mode) +{ + g_autofree char *aplic_name =3D fdt_get_aplic_nodename(aplic_addr); + g_autofree uint32_t *aplic_cells =3D g_new0(uint32_t, props->num_harts= * 2); + static const char * const aplic_compat[2] =3D { + "qemu,aplic", "riscv,aplic" + }; + + for (int cpu =3D 0; cpu < props->num_harts; cpu++) { + aplic_cells[cpu * 2 + 0] =3D cpu_to_be32(intc_phandles[cpu]); + aplic_cells[cpu * 2 + 1] =3D cpu_to_be32(m_mode ? IRQ_M_EXT : IRQ_= S_EXT); + } + + qemu_fdt_add_subnode(fdt, aplic_name); + qemu_fdt_setprop_string_array(fdt, aplic_name, "compatible", + (char **)&aplic_compat, + ARRAY_SIZE(aplic_compat)); + qemu_fdt_setprop_cell(fdt, aplic_name, "#address-cells", + FDT_APLIC_ADDR_CELLS); + qemu_fdt_setprop_cell(fdt, aplic_name, + "#interrupt-cells", FDT_APLIC_INT_CELLS); + qemu_fdt_setprop(fdt, aplic_name, "interrupt-controller", NULL, 0); + + if (props->aia_type =3D=3D AIA_TYPE_APLIC) { + qemu_fdt_setprop(fdt, aplic_name, "interrupts-extended", + aplic_cells, props->num_harts * sizeof(uint32_t) = * 2); + } else { + qemu_fdt_setprop_cell(fdt, aplic_name, "msi-parent", msi_phandle); + } + + qemu_fdt_setprop_sized_cells(fdt, aplic_name, "reg", + 2, aplic_addr, 2, aplic_size); + qemu_fdt_setprop_cell(fdt, aplic_name, "riscv,num-sources", + props->irqchip_num_sources); + + if (aplic_child_phandle) { + qemu_fdt_setprop_cell(fdt, aplic_name, "riscv,children", + aplic_child_phandle); + qemu_fdt_setprop_cells(fdt, aplic_name, "riscv,delegation", + aplic_child_phandle, 0x1, + props->irqchip_num_sources); + } + + if (props->numa_enabled) { + qemu_fdt_setprop_cell(fdt, aplic_name, "numa-node-id", props->sock= et); + } + + qemu_fdt_setprop_cell(fdt, aplic_name, "phandle", aplic_phandle); +} + +void riscv_create_fdt_socket_aplic(void *fdt, APLICFdtProps *props, + uint32_t msi_m_phandle, + uint32_t msi_s_phandle, + uint32_t *next_phandle, + uint32_t *intc_phandles, + uint32_t *aplic_phandles) +{ + uint32_t aplic_m_phandle, aplic_s_phandle; + hwaddr aplic_addr; + + if (next_phandle) { + aplic_m_phandle =3D (*next_phandle)++; + aplic_s_phandle =3D (*next_phandle)++; + } else { + aplic_m_phandle =3D qemu_fdt_alloc_phandle(fdt); + aplic_s_phandle =3D qemu_fdt_alloc_phandle(fdt); + } + + if (props->aplic_m) { + /* M-level APLIC node */ + aplic_addr =3D props->aplic_m->base + (props->aplic_m->size * prop= s->socket); + create_fdt_one_aplic(fdt, props, aplic_addr, props->aplic_m->size, + msi_m_phandle, intc_phandles, + aplic_m_phandle, aplic_s_phandle, + true); + } + + /* S-level APLIC node */ + aplic_addr =3D props->aplic_s->base + (props->aplic_s->size * props->s= ocket); + create_fdt_one_aplic(fdt, props, aplic_addr, props->aplic_s->size, + msi_s_phandle, intc_phandles, + aplic_s_phandle, 0, + false); + + if (!props->socket && props->platform_bus_irq) { + g_autofree char *aplic_name =3D fdt_get_aplic_nodename(aplic_addr); + platform_bus_add_all_fdt_nodes(fdt, aplic_name, + props->platform_bus->base, + props->platform_bus->size, + props->platform_bus_irq); + } + + aplic_phandles[props->socket] =3D aplic_s_phandle; +} diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 468ec90696..a6ec9def16 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -320,113 +320,6 @@ static void create_fdt_socket_plic(RISCVVirtState *s, } } =20 -/* Caller must free string after use */ -static char *fdt_get_aplic_nodename(unsigned long aplic_addr) -{ - return g_strdup_printf("/soc/interrupt-controller@%lx", aplic_addr); -} - -static void create_fdt_one_aplic(RISCVVirtState *s, int socket, - unsigned long aplic_addr, uint32_t aplic_= size, - uint32_t msi_phandle, - uint32_t *intc_phandles, - uint32_t aplic_phandle, - uint32_t aplic_child_phandle, - bool m_mode, int num_harts) -{ - int cpu; - g_autofree char *aplic_name =3D fdt_get_aplic_nodename(aplic_addr); - g_autofree uint32_t *aplic_cells =3D g_new0(uint32_t, num_harts * 2); - MachineState *ms =3D MACHINE(s); - static const char * const aplic_compat[2] =3D { - "qemu,aplic", "riscv,aplic" - }; - - for (cpu =3D 0; cpu < num_harts; cpu++) { - aplic_cells[cpu * 2 + 0] =3D cpu_to_be32(intc_phandles[cpu]); - aplic_cells[cpu * 2 + 1] =3D cpu_to_be32(m_mode ? IRQ_M_EXT : IRQ_= S_EXT); - } - - qemu_fdt_add_subnode(ms->fdt, aplic_name); - qemu_fdt_setprop_string_array(ms->fdt, aplic_name, "compatible", - (char **)&aplic_compat, - ARRAY_SIZE(aplic_compat)); - qemu_fdt_setprop_cell(ms->fdt, aplic_name, "#address-cells", - FDT_APLIC_ADDR_CELLS); - qemu_fdt_setprop_cell(ms->fdt, aplic_name, - "#interrupt-cells", FDT_APLIC_INT_CELLS); - qemu_fdt_setprop(ms->fdt, aplic_name, "interrupt-controller", NULL, 0); - - if (s->aia_type =3D=3D VIRT_AIA_TYPE_APLIC) { - qemu_fdt_setprop(ms->fdt, aplic_name, "interrupts-extended", - aplic_cells, num_harts * sizeof(uint32_t) * 2); - } else { - qemu_fdt_setprop_cell(ms->fdt, aplic_name, "msi-parent", msi_phand= le); - } - - qemu_fdt_setprop_sized_cells(ms->fdt, aplic_name, "reg", - 2, aplic_addr, 2, aplic_size); - qemu_fdt_setprop_cell(ms->fdt, aplic_name, "riscv,num-sources", - VIRT_IRQCHIP_NUM_SOURCES); - - if (aplic_child_phandle) { - qemu_fdt_setprop_cell(ms->fdt, aplic_name, "riscv,children", - aplic_child_phandle); - qemu_fdt_setprop_cells(ms->fdt, aplic_name, "riscv,delegation", - aplic_child_phandle, 0x1, - VIRT_IRQCHIP_NUM_SOURCES); - } - - riscv_socket_fdt_write_id(ms, aplic_name, socket); - qemu_fdt_setprop_cell(ms->fdt, aplic_name, "phandle", aplic_phandle); -} - -static void create_fdt_socket_aplic(RISCVVirtState *s, - int socket, - uint32_t msi_m_phandle, - uint32_t msi_s_phandle, - uint32_t *phandle, - uint32_t *intc_phandles, - uint32_t *aplic_phandles, - int num_harts) -{ - unsigned long aplic_addr; - MachineState *ms =3D MACHINE(s); - uint32_t aplic_m_phandle, aplic_s_phandle; - - aplic_m_phandle =3D (*phandle)++; - aplic_s_phandle =3D (*phandle)++; - - if (!kvm_enabled()) { - /* M-level APLIC node */ - aplic_addr =3D s->memmap[VIRT_APLIC_M].base + - (s->memmap[VIRT_APLIC_M].size * socket); - create_fdt_one_aplic(s, socket, aplic_addr, - s->memmap[VIRT_APLIC_M].size, - msi_m_phandle, intc_phandles, - aplic_m_phandle, aplic_s_phandle, - true, num_harts); - } - - /* S-level APLIC node */ - aplic_addr =3D s->memmap[VIRT_APLIC_S].base + - (s->memmap[VIRT_APLIC_S].size * socket); - create_fdt_one_aplic(s, socket, aplic_addr, s->memmap[VIRT_APLIC_S].si= ze, - msi_s_phandle, intc_phandles, - aplic_s_phandle, 0, - false, num_harts); - - if (!socket) { - g_autofree char *aplic_name =3D fdt_get_aplic_nodename(aplic_addr); - platform_bus_add_all_fdt_nodes(ms->fdt, aplic_name, - s->memmap[VIRT_PLATFORM_BUS].base, - s->memmap[VIRT_PLATFORM_BUS].size, - VIRT_PLATFORM_BUS_IRQ); - } - - aplic_phandles[socket] =3D aplic_s_phandle; -} - static void create_fdt_pmu(RISCVVirtState *s) { g_autofree char *pmu_name =3D g_strdup_printf("/pmu"); @@ -453,6 +346,7 @@ static void create_fdt_sockets(RISCVVirtState *s, int socket_count =3D riscv_socket_count(ms); bool numa_enabled =3D riscv_numa_enabled(ms); bool is_32_bit =3D riscv_is_32bit(&s->soc[0]); + APLICFdtProps aplic_props; =20 riscv_fdt_create_cpu_socket_subnode(ms->fdt, kvm_enabled() ? kvm_riscv_get_timebase_frequency(&s->soc->harts[0]= ) : @@ -510,15 +404,26 @@ static void create_fdt_sockets(RISCVVirtState *s, *msi_pcie_phandle =3D msi_s_phandle; } =20 + if (s->aia_type !=3D VIRT_AIA_TYPE_NONE) { + aplic_props.aplic_m =3D !kvm_enabled() ? &s->memmap[VIRT_APLIC_M] = : NULL; + aplic_props.aplic_s =3D &s->memmap[VIRT_APLIC_S]; + aplic_props.platform_bus =3D &s->memmap[VIRT_PLATFORM_BUS]; + aplic_props.platform_bus_irq =3D VIRT_PLATFORM_BUS_IRQ; + aplic_props.socket =3D 0; + aplic_props.num_harts =3D ms->smp.cpus; + aplic_props.numa_enabled =3D numa_enabled; + aplic_props.irqchip_num_sources =3D VIRT_IRQCHIP_NUM_SOURCES; + aplic_props.aia_type =3D s->aia_type; + } + /* * With KVM AIA aplic-imsic, using an irqchip without split * mode, we'll use only one APLIC instance. */ if (!virt_use_emulated_aplic(s->aia_type)) { - create_fdt_socket_aplic(s, 0, - msi_m_phandle, msi_s_phandle, phandle, - &intc_phandles[0], xplic_phandles, - ms->smp.cpus); + riscv_create_fdt_socket_aplic(ms->fdt, &aplic_props, + msi_m_phandle, msi_s_phandle, phandl= e, + &intc_phandles[0], xplic_phandles); =20 *irq_mmio_phandle =3D xplic_phandles[0]; *irq_virtio_phandle =3D xplic_phandles[0]; @@ -533,11 +438,13 @@ static void create_fdt_sockets(RISCVVirtState *s, &intc_phandles[phandle_pos], xplic_phandles); } else { - create_fdt_socket_aplic(s, socket, - msi_m_phandle, msi_s_phandle, phan= dle, - &intc_phandles[phandle_pos], - xplic_phandles, - s->soc[socket].num_harts); + aplic_props.socket =3D socket; + aplic_props.num_harts =3D s->soc[socket].num_harts; + riscv_create_fdt_socket_aplic(ms->fdt, &aplic_props, + msi_m_phandle, msi_s_phandle, + phandle, + &intc_phandles[phandle_pos], + xplic_phandles); } } =20 diff --git a/include/hw/riscv/fdt-common.h b/include/hw/riscv/fdt-common.h index 182c03d8ce..8207cfee7b 100644 --- a/include/hw/riscv/fdt-common.h +++ b/include/hw/riscv/fdt-common.h @@ -12,6 +12,7 @@ #include "target/riscv/cpu.h" #include "hw/core/boards.h" #include "hw/riscv/riscv_hart.h" +#include "exec/hwaddr.h" =20 #define FDT_PCI_ADDR_CELLS 3 #define FDT_PCI_INT_CELLS 1 @@ -50,6 +51,18 @@ typedef struct IMSICFdtProps { int aia_guests; } IMSICFdtProps; =20 +typedef struct APLICFdtProps { + const MemMapEntry *aplic_m; + const MemMapEntry *aplic_s; + const MemMapEntry *platform_bus; + int platform_bus_irq; + int socket; + int num_harts; + bool numa_enabled; + int irqchip_num_sources; + int aia_type; +} APLICFdtProps; + void *riscv_create_board_device_tree(const char *model, const char *compat= ible, int *fdt_size); void riscv_create_fdt_socket_memory(void *fdt, hwaddr addr, uint64_t size, @@ -98,4 +111,10 @@ void riscv_create_fdt_pcie(void *fdt, int aia_type, boo= l has_iommu_sys, void riscv_create_fdt_imsic(void *fdt, IMSICFdtProps *fdt_props, uint32_t *next_phandle, uint32_t *intc_phandle= s, uint32_t *msi_m_phandle, uint32_t *msi_s_phand= le); +void riscv_create_fdt_socket_aplic(void *fdt, APLICFdtProps *props, + uint32_t msi_m_phandle, + uint32_t msi_s_phandle, + uint32_t *next_phandle, + uint32_t *intc_phandles, + uint32_t *aplic_phandles); #endif --=20 2.43.0 From nobody Sat Sep 26 21:37:17 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1787869739; cv=none; d=zohomail.com; s=zohoarc; b=nn9vD51LhojGBKO93X/L6KvXl+Fd4IwSafXgBB1WED7CkDiDLbpGSeEoc0GJKYU5QbhBWKGFFhvQPr2dNQk0WrQ0t9EzXQn4i8Ea3FgdkpPm5eFPQ/BYnfDQtsYUewKxBAQ9x+39EjAjfEFSKRDYGeept1TJW40pSHabqoxbBXQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787869739; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=nLyjqO2yjNlh10KCYPm3ksDiwJqfCnNwZ2rfvB092wA=; b=lg0A8XzFIy7i45QcSJuhF2XcSom04mNA2ktSKnCVZBrH4/T0VRc4QULP7aOGQPmnr2HLojlQFRVYYGqsz9KAfvzXXhMv9TvdEwOQkeLPTa7upXpk8W5Myy0fK2n3V2atPedh8vP2KQE7iDg+XAu9051rwFf/DkPm+hOXlhkCZRw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178786973974514.381547697180736; Thu, 27 Aug 2026 15:28:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wziYj-0005aC-HC; Thu, 27 Aug 2026 18:26:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYi-0005Zm-MO for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:26:56 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYg-0001GP-Ce for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:26:56 -0400 Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67RJLv7G1117690 for ; Thu, 27 Aug 2026 22:26:43 GMT Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4garn0hgkp-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 27 Aug 2026 22:26:43 +0000 (GMT) Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-9382f9430deso48714985a.1 for ; Thu, 27 Aug 2026 15:26:43 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([189.38.141.232]) by smtp.gmail.com with ESMTPSA id af79cd13be357-939173a734dsm8924985a.26.2026.08.27.15.26.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 15:26:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= nLyjqO2yjNlh10KCYPm3ksDiwJqfCnNwZ2rfvB092wA=; b=PCuJ8pkkZeHXHzrn 1VrIQ5Ge63l+GbXTVaZquzcv3tw1ycKXDYeU/jycX3Jyn4lmHaxlfzzBwWvdVL26 OtP3eTiVnEtXbk9UPWryQhw5PuPqZnCX0kYJksNoCrCTPtYAML8Fa1KsIfw4jZCG 7frog4RyisecujrgCtHg0MqDy2rGHRlOc+qSC9hng3Xvnvq82/sBBTYdzAAdxo11 R633revaG7XON8tbJEDgfPm7PbhGHy/JNFdntbxDmyLWKs4d3Gyq5NuISC2d6sDK p3J3J3Tl0JpwBe/c7clKsPx23E4vz4aUfjNHYENj3jQqygDokQH/2qgRbuilaZa+ oKpZmw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787869603; x=1788474403; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=nLyjqO2yjNlh10KCYPm3ksDiwJqfCnNwZ2rfvB092wA=; b=UfYMp/7iAxe30n2+jt7llgw2GtlIv1RScUJdWv++ZpSbDg6GRAv+5hDqYpqYwzsCHg 0Itmtk5cqjxhbXfxRTMegG019a9x4Jo8myUJe9+itW7PiISnhF5eBQmwEC/J6GFVmYco U/KAPi+MpWgz8asKTJwNRSrylXng2ckrG5AHKgJMHUQ0OqunPSwA/hFuyWAiO63+NVqj I2C+LuFHAvarbYsuevvFEt6xJbdfsSL3ebtZvxsALXtolrv26HUaazafb5e7YdboIpVv Ow+ypnGAV2rHBik6nfQy5wYnM5vWeqxmpN6JGShjS6P3niIFh7qzhPUlyZQv7JFAxAN3 sbeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787869603; x=1788474403; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=nLyjqO2yjNlh10KCYPm3ksDiwJqfCnNwZ2rfvB092wA=; b=ZyXiFoWbo5EbTuA5nszEitiRK2noeayCL53TlMte82JKhdGvyDozKQGI9miVLcJUr2 NpwKR8bGyBjRtfWcmvYsz7U61TXEyMJDhajxDsJ5UxEalqYD7w9I/lvbzqo8oIZOtGx1 H9JvqC986RkYhFICmyVxMDUSR0LOKuA22QdVBwDY265dywPZ+uKKjiA4QTv5mxdFABWS eTmsWHH4JbgZGY0Ur2bw62SMxzq9YVM88qFHPBoaDUV8PKQ33z4+HuuJnrjRzVVcfgxN 0q5u4M7tR+kd6ioXBpTpemevb7uW6+NMtA3bsOSMhR63ot7Y+iFSphPwovrkzg/EtPC9 C73w== X-Gm-Message-State: AFuF++lMGuPiLfxf38N4o7hv8320/cOvVqB75OVIdWQld5eDrq9HV0nq 1mA/DciHZfD+6u7SbMTsRQlr3G3dC/8nku8M6Mcbxo2wpmWbJMD8Ad9cy1i06WIh8FjruNxRG/7 iZ+xV0wfOMMTphqE7L1v72p6BfopnAAxYrPQ6a/evREPy91xJ8FoneuDNckMNCQsc8Q== X-Gm-Gg: AR+sD11hTXZZwJ1c0P632bbyV3+58sRspixpmtmiI0InLwRb+n52Jtwu4D3FeRYuI2H H/+I3q/vyg1+Nga7WfRa2nr5eaiTmbLuEODAAsD+cVp9FI0sTKmQ4pV+EntkgFn9rtCosqjOZ/o bN0dPT9KRSJCTbShHof//PdubyctTO5HU5LiQW6M3+IngTcfSMACJ+pElJZbsP4Qhj6xyrU1kSh 71hLpkaauF3dYJtS6GHPYksKfpkwLcH9/VAU+nhuE2r1YWEDcP/mfyloNwD2MSK1iolQeON3L3I Ro1VvQSTbM27BtKud1NEIzdSPCNtMX5khCORogNKemCkes6kp9nZyf2DWXtYzRmu2BA4n4ZbI+f /Z3cvqj1X/XoiG206lcEu3w0jRqtj9TyHZ/80dQ== X-Received: by 2002:a05:620a:a717:b0:92e:5b45:b572 with SMTP id af79cd13be357-939137b8a4bmr249856085a.1.1787869602692; Thu, 27 Aug 2026 15:26:42 -0700 (PDT) X-Received: by 2002:a05:620a:a717:b0:92e:5b45:b572 with SMTP id af79cd13be357-939137b8a4bmr249852985a.1.1787869602242; Thu, 27 Aug 2026 15:26:42 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Daniel Henrique Barboza , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Palmer Dabbelt Subject: [PATCH v4 08/14] hw/riscv/fdt-common, virt.c: add riscv_create_fdt_socket_aclint() Date: Thu, 27 Aug 2026 19:26:01 -0300 Message-ID: <20260827222608.329788-9-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> References: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX1g4zXj3NAmb6 kswpY97dk5yfVoopYoa/iO4+xr09zqh38da8KuBwTVa/Drca8AGQd0hLHVGM58ejtsKLF2WnN2A nfGd8OB4QB2/nqfhP6eeW9T88phS0JYCIYCeBcU3AEIZpiM2kf6Gw4ptm9cKiCaUmP1T+oKg6AQ xZ03uacAyj+fMJzDEvMXQZ6ddVNcPqCuQTNTvTCVLLqkexZfAgjwVOrPq0t3It08Z0c8vF/GE3E MR8e76kRByzPaiGSv973DpXGncoSLwYQ9XewkI+xsEllktzwZHtw/i3R5mYd3LhA7h76T6+eHNa AGgEDNjRfiyJIzFO5Vh4AWyhWbF3sqEVblN3vabPuRmEP8aIKcZpD/0vV5E7RybairKZmDqS/+4 rFqbqnYqIDZzTfZu93rqoe1jXhbyxkdukmQmcSFAWJjQUAhstI+tVerVhbfE3/Z+/VK0FEQvIQ3 7eWGwJh6182+40VSzeQ== X-Proofpoint-GUID: 3iN62ia_wVmRjf2rRDHZ7U21SaUxolsS X-Authority-Analysis: v=2.4 cv=C+3ZDwP+ c=1 sm=1 tr=0 ts=6a90b9a3 cx=c_pps a=qKBjSQ1v91RyAK45QCPf5w==:117 a=MCIxunHWmQOg/5OnbzXZaw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=EUspDBNiAAAA:8 a=5MeqwQr2QVKu_SNN6D4A:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=NFOGd7dJGGMPyQGDc5-O:22 X-Proofpoint-ORIG-GUID: 3iN62ia_wVmRjf2rRDHZ7U21SaUxolsS X-Proofpoint-Spam-Info: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX7yMLc0BKUHQv NNbj83T3NRBzh/u76zI5acykPC2sbhdEWXCTmN1FH3EwhIzrqoajheMxqCku6kh0kCVIgMkakVs fZ49v+yr6kmaz/DmnQ0xMQzAp2ka6Vg= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-27_08,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 lowpriorityscore=0 suspectscore=0 adultscore=0 phishscore=0 priorityscore=1501 spamscore=0 impostorscore=0 malwarescore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608270190 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1787869741883158500 Yet another FDT that we want to move to a helper to avoid copy/pasting code to other boards that will use a mtimer. In particular the future 'riscv-server-ref' board. No FDT changes made. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/riscv/fdt-common.c | 96 ++++++++++++++++++++++++++++++++ hw/riscv/virt.c | 101 ++++------------------------------ include/hw/riscv/fdt-common.h | 11 ++++ 3 files changed, 119 insertions(+), 89 deletions(-) diff --git a/hw/riscv/fdt-common.c b/hw/riscv/fdt-common.c index d815c5adff..76a783709d 100644 --- a/hw/riscv/fdt-common.c +++ b/hw/riscv/fdt-common.c @@ -16,6 +16,7 @@ #include "target/riscv/cpu_bits.h" #include "hw/riscv/riscv-iommu-bits.h" #include "hw/riscv/iommu.h" +#include "hw/intc/riscv_aclint.h" #include "hw/intc/riscv_imsic.h" #include "hw/pci/pci.h" #include "hw/pci/pcie_host.h" @@ -702,3 +703,98 @@ void riscv_create_fdt_socket_aplic(void *fdt, APLICFdt= Props *props, =20 aplic_phandles[props->socket] =3D aplic_s_phandle; } + +void riscv_create_fdt_socket_aclint(void *fdt, ACLINTFdtProps *props, + uint32_t *intc_phandles) +{ + uint32_t aclint_cells_size =3D props->num_harts * sizeof(uint32_t) * 2; + g_autofree uint32_t *aclint_mswi_cells =3D NULL; + g_autofree uint32_t *aclint_sswi_cells =3D NULL; + g_autofree uint32_t *aclint_mtimer_cells =3D NULL; + hwaddr addr, size; + char *name; + int cpu; + + aclint_mswi_cells =3D g_new0(uint32_t, props->num_harts * 2); + aclint_mtimer_cells =3D g_new0(uint32_t, props->num_harts * 2); + aclint_sswi_cells =3D g_new0(uint32_t, props->num_harts * 2); + + for (cpu =3D 0; cpu < props->num_harts; cpu++) { + aclint_mswi_cells[cpu * 2 + 0] =3D cpu_to_be32(intc_phandles[cpu]); + aclint_mswi_cells[cpu * 2 + 1] =3D cpu_to_be32(IRQ_M_SOFT); + aclint_mtimer_cells[cpu * 2 + 0] =3D cpu_to_be32(intc_phandles[cpu= ]); + aclint_mtimer_cells[cpu * 2 + 1] =3D cpu_to_be32(IRQ_M_TIMER); + aclint_sswi_cells[cpu * 2 + 0] =3D cpu_to_be32(intc_phandles[cpu]); + aclint_sswi_cells[cpu * 2 + 1] =3D cpu_to_be32(IRQ_S_SOFT); + } + + if (props->aia_type !=3D AIA_TYPE_APLIC_IMSIC) { + addr =3D props->clint->base + (props->clint->size * props->socket); + name =3D g_strdup_printf("/soc/mswi@%"HWADDR_PRIx, addr); + + qemu_fdt_add_subnode(fdt, name); + qemu_fdt_setprop_string(fdt, name, "compatible", "riscv,aclint-msw= i"); + qemu_fdt_setprop_sized_cells(fdt, name, "reg", + 2, addr, 2, RISCV_ACLINT_SWI_SIZE); + qemu_fdt_setprop(fdt, name, "interrupts-extended", + aclint_mswi_cells, aclint_cells_size); + qemu_fdt_setprop(fdt, name, "interrupt-controller", NULL, 0); + qemu_fdt_setprop_cell(fdt, name, "#interrupt-cells", 0); + + if (props->numa_enabled) { + qemu_fdt_setprop_cell(fdt, name, "numa-node-id", props->socket= ); + } + + g_free(name); + } + + if (props->aia_type =3D=3D AIA_TYPE_APLIC_IMSIC) { + addr =3D props->clint->base + + (RISCV_ACLINT_DEFAULT_MTIMER_SIZE * props->socket); + size =3D RISCV_ACLINT_DEFAULT_MTIMER_SIZE; + } else { + addr =3D props->clint->base + RISCV_ACLINT_SWI_SIZE + + (props->clint->size * props->socket); + size =3D props->clint->size - RISCV_ACLINT_SWI_SIZE; + } + + name =3D g_strdup_printf("/soc/mtimer@%"HWADDR_PRIx, addr); + qemu_fdt_add_subnode(fdt, name); + qemu_fdt_setprop_string(fdt, name, "compatible", + "riscv,aclint-mtimer"); + qemu_fdt_setprop_sized_cells(fdt, name, "reg", + 2, addr, + 2, size - RISCV_ACLINT_DEFAULT_MTIME, + 2, addr + RISCV_ACLINT_DEFAULT_MTIMECMP, + 2, RISCV_ACLINT_DEFAULT_MTIME); + qemu_fdt_setprop(fdt, name, "interrupts-extended", + aclint_mtimer_cells, aclint_cells_size); + + if (props->numa_enabled) { + qemu_fdt_setprop_cell(fdt, name, "numa-node-id", props->socket); + } + + g_free(name); + + if (props->aia_type !=3D AIA_TYPE_APLIC_IMSIC) { + addr =3D props->aclint_sswi->base + + (props->aclint_sswi->size * props->socket); + + name =3D g_strdup_printf("/soc/sswi@%"HWADDR_PRIx, addr); + qemu_fdt_add_subnode(fdt, name); + qemu_fdt_setprop_string(fdt, name, "compatible", + "riscv,aclint-sswi"); + qemu_fdt_setprop_sized_cells(fdt, name, "reg", + 2, addr, 2, props->aclint_sswi->size); + qemu_fdt_setprop(fdt, name, "interrupts-extended", + aclint_sswi_cells, aclint_cells_size); + qemu_fdt_setprop(fdt, name, "interrupt-controller", NULL, 0); + qemu_fdt_setprop_cell(fdt, name, "#interrupt-cells", 0); + + if (props->numa_enabled) { + qemu_fdt_setprop_cell(fdt, name, "numa-node-id", props->socket= ); + } + + g_free(name); + } +} diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index a6ec9def16..717a01da8d 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -180,93 +180,6 @@ static void virt_flash_map(RISCVVirtState *s, sysmem); } =20 -static void create_fdt_socket_aclint(RISCVVirtState *s, - int socket, - uint32_t *intc_phandles) -{ - int cpu; - char *name; - unsigned long addr, size; - uint32_t aclint_cells_size; - g_autofree uint32_t *aclint_mswi_cells =3D NULL; - g_autofree uint32_t *aclint_sswi_cells =3D NULL; - g_autofree uint32_t *aclint_mtimer_cells =3D NULL; - MachineState *ms =3D MACHINE(s); - - aclint_mswi_cells =3D g_new0(uint32_t, s->soc[socket].num_harts * 2); - aclint_mtimer_cells =3D g_new0(uint32_t, s->soc[socket].num_harts * 2); - aclint_sswi_cells =3D g_new0(uint32_t, s->soc[socket].num_harts * 2); - - for (cpu =3D 0; cpu < s->soc[socket].num_harts; cpu++) { - aclint_mswi_cells[cpu * 2 + 0] =3D cpu_to_be32(intc_phandles[cpu]); - aclint_mswi_cells[cpu * 2 + 1] =3D cpu_to_be32(IRQ_M_SOFT); - aclint_mtimer_cells[cpu * 2 + 0] =3D cpu_to_be32(intc_phandles[cpu= ]); - aclint_mtimer_cells[cpu * 2 + 1] =3D cpu_to_be32(IRQ_M_TIMER); - aclint_sswi_cells[cpu * 2 + 0] =3D cpu_to_be32(intc_phandles[cpu]); - aclint_sswi_cells[cpu * 2 + 1] =3D cpu_to_be32(IRQ_S_SOFT); - } - aclint_cells_size =3D s->soc[socket].num_harts * sizeof(uint32_t) * 2; - - if (s->aia_type !=3D VIRT_AIA_TYPE_APLIC_IMSIC) { - addr =3D s->memmap[VIRT_CLINT].base + - (s->memmap[VIRT_CLINT].size * socket); - name =3D g_strdup_printf("/soc/mswi@%lx", addr); - - qemu_fdt_add_subnode(ms->fdt, name); - qemu_fdt_setprop_string(ms->fdt, name, "compatible", - "riscv,aclint-mswi"); - qemu_fdt_setprop_sized_cells(ms->fdt, name, "reg", - 2, addr, 2, RISCV_ACLINT_SWI_SIZE); - qemu_fdt_setprop(ms->fdt, name, "interrupts-extended", - aclint_mswi_cells, aclint_cells_size); - qemu_fdt_setprop(ms->fdt, name, "interrupt-controller", NULL, 0); - qemu_fdt_setprop_cell(ms->fdt, name, "#interrupt-cells", 0); - riscv_socket_fdt_write_id(ms, name, socket); - g_free(name); - } - - if (s->aia_type =3D=3D VIRT_AIA_TYPE_APLIC_IMSIC) { - addr =3D s->memmap[VIRT_CLINT].base + - (RISCV_ACLINT_DEFAULT_MTIMER_SIZE * socket); - size =3D RISCV_ACLINT_DEFAULT_MTIMER_SIZE; - } else { - addr =3D s->memmap[VIRT_CLINT].base + RISCV_ACLINT_SWI_SIZE + - (s->memmap[VIRT_CLINT].size * socket); - size =3D s->memmap[VIRT_CLINT].size - RISCV_ACLINT_SWI_SIZE; - } - name =3D g_strdup_printf("/soc/mtimer@%lx", addr); - qemu_fdt_add_subnode(ms->fdt, name); - qemu_fdt_setprop_string(ms->fdt, name, "compatible", - "riscv,aclint-mtimer"); - qemu_fdt_setprop_sized_cells(ms->fdt, name, "reg", - 2, addr + RISCV_ACLINT_DEFAULT_MTIME, - 2, size - RISCV_ACLINT_DEFAULT_MTIME, - 2, addr + RISCV_ACLINT_DEFAULT_MTIMECMP, - 2, RISCV_ACLINT_DEFAULT_MTIME); - qemu_fdt_setprop(ms->fdt, name, "interrupts-extended", - aclint_mtimer_cells, aclint_cells_size); - riscv_socket_fdt_write_id(ms, name, socket); - g_free(name); - - if (s->aia_type !=3D VIRT_AIA_TYPE_APLIC_IMSIC) { - addr =3D s->memmap[VIRT_ACLINT_SSWI].base + - (s->memmap[VIRT_ACLINT_SSWI].size * socket); - - name =3D g_strdup_printf("/soc/sswi@%lx", addr); - qemu_fdt_add_subnode(ms->fdt, name); - qemu_fdt_setprop_string(ms->fdt, name, "compatible", - "riscv,aclint-sswi"); - qemu_fdt_setprop_sized_cells(ms->fdt, name, "reg", - 2, addr, 2, s->memmap[VIRT_ACLINT_SSWI].size); - qemu_fdt_setprop(ms->fdt, name, "interrupts-extended", - aclint_sswi_cells, aclint_cells_size); - qemu_fdt_setprop(ms->fdt, name, "interrupt-controller", NULL, 0); - qemu_fdt_setprop_cell(ms->fdt, name, "#interrupt-cells", 0); - riscv_socket_fdt_write_id(ms, name, socket); - g_free(name); - } -} - static void create_fdt_socket_plic(RISCVVirtState *s, int socket, uint32_t *phandle, uint32_t *intc_phand= les, @@ -347,6 +260,7 @@ static void create_fdt_sockets(RISCVVirtState *s, bool numa_enabled =3D riscv_numa_enabled(ms); bool is_32_bit =3D riscv_is_32bit(&s->soc[0]); APLICFdtProps aplic_props; + ACLINTFdtProps aclint_props; =20 riscv_fdt_create_cpu_socket_subnode(ms->fdt, kvm_enabled() ? kvm_riscv_get_timebase_frequency(&s->soc->harts[0]= ) : @@ -354,6 +268,13 @@ static void create_fdt_sockets(RISCVVirtState *s, =20 intc_phandles =3D g_new0(uint32_t, ms->smp.cpus); =20 + if (virt_aclint_allowed() && s->have_aclint) { + aclint_props.clint =3D &s->memmap[VIRT_CLINT]; + aclint_props.aclint_sswi =3D &s->memmap[VIRT_ACLINT_SSWI]; + aclint_props.aia_type =3D s->aia_type; + aclint_props.numa_enabled =3D numa_enabled; + } + phandle_pos =3D ms->smp.cpus; for (socket =3D (socket_count - 1); socket >=3D 0; socket--) { hwaddr memaddr =3D s->memmap[VIRT_DRAM].base + @@ -372,8 +293,10 @@ static void create_fdt_sockets(RISCVVirtState *s, socket, riscv_numa_enabled(ms)); =20 if (virt_aclint_allowed() && s->have_aclint) { - create_fdt_socket_aclint(s, socket, - &intc_phandles[phandle_pos]); + aclint_props.socket =3D socket; + aclint_props.num_harts =3D s->soc[socket].num_harts; + riscv_create_fdt_socket_aclint(ms->fdt, &aclint_props, + &intc_phandles[phandle_pos]); } else if (tcg_enabled()) { hwaddr clintaddr =3D s->memmap[VIRT_CLINT].base + s->memmap[VIRT_CLINT].size * socket; diff --git a/include/hw/riscv/fdt-common.h b/include/hw/riscv/fdt-common.h index 8207cfee7b..a45b063f66 100644 --- a/include/hw/riscv/fdt-common.h +++ b/include/hw/riscv/fdt-common.h @@ -63,6 +63,15 @@ typedef struct APLICFdtProps { int aia_type; } APLICFdtProps; =20 +typedef struct ACLINTFdtProps { + const MemMapEntry *clint; + const MemMapEntry *aclint_sswi; + int socket; + int num_harts; + int aia_type; + bool numa_enabled; +} ACLINTFdtProps; + void *riscv_create_board_device_tree(const char *model, const char *compat= ible, int *fdt_size); void riscv_create_fdt_socket_memory(void *fdt, hwaddr addr, uint64_t size, @@ -117,4 +126,6 @@ void riscv_create_fdt_socket_aplic(void *fdt, APLICFdtP= rops *props, uint32_t *next_phandle, uint32_t *intc_phandles, uint32_t *aplic_phandles); +void riscv_create_fdt_socket_aclint(void *fdt, ACLINTFdtProps *props, + uint32_t *intc_phandles); #endif --=20 2.43.0 From nobody Sat Sep 26 21:37:17 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1787869735; cv=none; d=zohomail.com; s=zohoarc; b=j+14fioANPdIG/fV11Z7ywecgGcmkcNFfPfDT1uEYUa69q3Ud4dtprH9J0r9RxsgJH7/DgYbdiWYndtwCZ8lQGO3ZTAHAc5d2241ViL2WHPHEKwtSpc9W3+cI4/piPVqqlMkIN246I5Zir3tk9rHj9hpSAOhFFNNxWC6oxs1kPA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787869735; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Ww20UHCytpYfmXwQSUWXlkp90oJj802gkwqny88ex6U=; b=W2bIGfYZ63LMEaxV28Rz36tk/DjneEUKKnPl6y7Ubf6c0BJsG1js+js3w5AmUO58IopbAwjCpkNgh5qUzn7ow+fpFgqhTDWfQylZSr8Lx8TpNudX1sHeh4Q80arglkTO/fkesxrIxCZy5NQFx24ihrDbmDfnzAZN7RxILgniEzE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787869735529878.545027550739; Thu, 27 Aug 2026 15:28:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wziYn-0005cz-QO; Thu, 27 Aug 2026 18:27:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYl-0005bG-3I for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:26:59 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYj-0001HN-A3 for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:26:58 -0400 Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67RJLt0E218796 for ; Thu, 27 Aug 2026 22:26:46 GMT Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gaphw23b6-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 27 Aug 2026 22:26:46 +0000 (GMT) Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-93903622880so137905685a.0 for ; Thu, 27 Aug 2026 15:26:46 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([189.38.141.232]) by smtp.gmail.com with ESMTPSA id af79cd13be357-939173a734dsm8924985a.26.2026.08.27.15.26.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 15:26:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= Ww20UHCytpYfmXwQSUWXlkp90oJj802gkwqny88ex6U=; b=clZVBoxHDP3sBrOw GgOOUcFlZm1TxNmRMox0Qx5jzBsQI8Ur5qIdYeZpoMJaNtqDrpyn703iXYwXgauN H5gGfdQaJPE5ArCVuqf3xNGbFw1LcEG66z86HY4oIcZ+8+jNvBkpXYD3CB2Wbzxj 7I2BRwZqR0xrH2b+Go9p/x8pExorfX3KJP55/G/UUzf1mIlc1ta6+/998OBjLfeZ zp33V7h7RNtIIuN0VPZbg0vfOf1BGNkYfKKb1mG991WG03UxRNBoemEzjMBlF0Kp L/zJe6RfcHbEZrXZpCwmX0jQiYntEuACaLh6O/5tFbFix84/OrJCyktNwve5S9pT tYhpAA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787869605; x=1788474405; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=Ww20UHCytpYfmXwQSUWXlkp90oJj802gkwqny88ex6U=; b=HwYYsa+VRS+yptvQY8XbFJku9EPO07ObIezWmUV6Aa2NqPwWr4kXT/3gRvQKiLPDAy I5Iq1xINeK+ct8HbHAoab/s8C06sLn2oNMOtcoEM5Zvmtkit6BHLY2ly36O5ZydLobKj A4X/2z6cXENKj/D5pMCs8JDt5/d/33uq+KMcWkIGS25Ijf06bFI2MwoS/Dt0/v2DnCbp xbB600sNCvQHRUQ1foWldTVamIN2wLygIiUIpDA90CmtOLXxsqaMSXSUyGaMCRnX82gQ 9RP5+GEqzKYi+8ayqlpyQEPbdDmD++0+iEoBrYhRT2+5ktzzD5uToCWKTAfksT2IHZDJ 3ysQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787869605; x=1788474405; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Ww20UHCytpYfmXwQSUWXlkp90oJj802gkwqny88ex6U=; b=iqe2VSmaWYpvcVQIGtklYeIOoHWgUhHVsKquSGwkzOYQYRUlQqWMFSNX/KOWdmvf6R 7hc7k1vp7hcuNirVd4X1PzUwC8ce0ubOXYwIo+UoGrhjL17ljSPXI/sQZ5qmDfwFhiyP r3KSlcGpMtEsP1rFUM4BNzaNJqvcKnYlMB9WLT71cNQYuogfhxGU4NAUB2KSvRdyuBsi lJ5shd/0BOKjk/yIR/xVLwVFvSTTLxwTdI9B+L2jBmaLliArpmw86w8g6tR0yU/7Sedz eX/PZMfQyHbCFBl4r/xKCUuANsUM5sWD/lmOENl10pG8+Lgs9KS+tZHqiMxQCJy57b/3 8JSQ== X-Gm-Message-State: AFuF++n4qKFsw6uGBw+bRzgwwAedBZZJG3nn+IZyzd6TxYRs7yKLT3uW bE9RijJqLABIN40KzONaz6eDqCYmdDRLgL2Cv66EtjmtB7KIchoYbdZW61EWTnLEUN0E2uD1ysa 49KVP8AR4p5Zpl/IQbIJtBvwqCEp67NOBK20/ECdfrA4UQnidpaO3irkCRLRAbE0j+g== X-Gm-Gg: AR+sD11ruJUvguwLd0dRjHfOblkRZuJdgdTSFgNBrBUeWdkk6Labb+aOxj8CkrcCyuI m9lekwIaDkcYlVj5IfSQr7ReRdVmJTiroJlZ5ntbxiX045w4A+Ivr2WGE+fbD4M+UGomLpcciz3 Rci2UVaE7dOftDE7b0BiYuKqn2UCsggO0/Ec2ywAZtFDCA2mEw1Tiq/uGEA3h8dK3b98vJwdgEs f8qveifYAJZ8Q5rqVAfLn5jMTMvb6anevbedgvtVg/7g07I/rZ9oWHIfLMnnym3dTgaM91ewOe7 2eOgoMUUSe1BSz7SIufwO9YNxEPqlQplQvq2tRwxe+VyclbAd+PSHq3ox2IjupNeGIsSlEh1gj4 N+DlImoZgBAtBkZZ//8byo3EIk/1/NDBbpKiIvA== X-Received: by 2002:a05:620a:ecd:b0:937:45fb:94bf with SMTP id af79cd13be357-9391246bc74mr262885185a.0.1787869605528; Thu, 27 Aug 2026 15:26:45 -0700 (PDT) X-Received: by 2002:a05:620a:ecd:b0:937:45fb:94bf with SMTP id af79cd13be357-9391246bc74mr262881285a.0.1787869605074; Thu, 27 Aug 2026 15:26:45 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Daniel Henrique Barboza , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Palmer Dabbelt Subject: [PATCH v4 09/14] hw/riscv/fdt-common, virt.c: add riscv_create_fdt_uart() Date: Thu, 27 Aug 2026 19:26:02 -0300 Message-ID: <20260827222608.329788-10-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> References: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: Sbltf2VzzShhNZKicqg-LvkqUcHFYAya X-Proofpoint-Spam-Info: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX4TQk1AG+hx0M rPNk7dmtr/Vh2KtdIPDeW9B7J2KDC/HQhF0cFm7RlEFxHlQmAj47vmvN38063lPsNpmsquyghOy VaDarXoWJyb9XB7YoPOv6a0wdlwIZbQ= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX6p/DgYmdqzEn zJmZHmRs+wtWToumJFXSpErvmGa+tbPDVvGSjL/40Rru27IKB5YGa3Xl3SbqA7FFOFd0g82AI+x thO9t80PPXTMYpYPhCUbqg0uhsHz5Oirj+rX2hFIs/yAW6hXCRDWW9cjaSLGOOzxmfbL+yy+VUb 7Zaembr/mXNPvUvasL/fNYk5SXK3o5+W6DUqIVUEhsQl0YwKYp7uUAmg53VyEeJjHCf0aQ2uk2b fsgo/MMSUu2lWtO/XZ2rsegYXDX4lg0lytzRSDTwn0LUYfvI3/mahmprjdn6RV1XE1YCQByGFjr hcVTIVftqv3+Z2eN0t38obrNGhUwrhZ8H1hS+XEaaV+EA0q8wzok8AdNsr9hhXgDyYEYmMR6/oF 0pt8OB+PIpoXDUjD61XdlOtiwyZv0cZLJs9KWdI6/o86I02IBh8d29dW9wUUpYKd5avH6ih9UJ8 259JymA9mRvZNgko29w== X-Proofpoint-ORIG-GUID: Sbltf2VzzShhNZKicqg-LvkqUcHFYAya X-Authority-Analysis: v=2.4 cv=E8b9Y6dl c=1 sm=1 tr=0 ts=6a90b9a6 cx=c_pps a=50t2pK5VMbmlHzFWWp8p/g==:117 a=MCIxunHWmQOg/5OnbzXZaw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=Rd_eAvTXF2ongSiteCUA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=IoWCM6iH3mJn3m4BftBB:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-27_08,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 spamscore=0 adultscore=0 phishscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 malwarescore=0 bulkscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608270190 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1787869738448154100 Add a common uart FDT helper to be used by 'virt' and the future 'riscv-server-ref' board. The 'tt-atlantis' board is left out of this patch because it's going through UART related changes and its FDT might change soon, thus it's better to wait for the final DT to be determined and then we can evaluate whether it can share a common helper. The "/chosen" and "/alias" changes are UART0 only so we're keeping them out of the common helper. The board can set both manually as appropriate. No FDT changes intended. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/riscv/fdt-common.c | 29 +++++++++++++++++++++++++++++ hw/riscv/virt.c | 35 +++++++++-------------------------- include/hw/riscv/fdt-common.h | 5 +++++ 3 files changed, 43 insertions(+), 26 deletions(-) diff --git a/hw/riscv/fdt-common.c b/hw/riscv/fdt-common.c index 76a783709d..e8186230b7 100644 --- a/hw/riscv/fdt-common.c +++ b/hw/riscv/fdt-common.c @@ -22,6 +22,8 @@ #include "hw/pci/pcie_host.h" #include "hw/riscv/aia.h" =20 +#define UART_STD_CLOCK_FREQ 3686400 /* 3.6864 MHz */ + void *riscv_create_board_device_tree(const char *model, const char *compat= ible, int *fdt_size) { @@ -798,3 +800,30 @@ void riscv_create_fdt_socket_aclint(void *fdt, ACLINTF= dtProps *props, g_free(name); } } + +char *riscv_fdt_get_uart_nodename(hwaddr addr) +{ + return g_strdup_printf("/soc/serial@%"HWADDR_PRIx, addr); +} + +void riscv_create_fdt_uart(void *fdt, const MemMapEntry *uart_mem, + int uart_irq, int aia_type, + uint32_t irq_phandle) +{ + g_autofree char *name =3D riscv_fdt_get_uart_nodename(uart_mem->base); + + qemu_fdt_add_subnode(fdt, name); + qemu_fdt_setprop_string(fdt, name, "compatible", "ns16550a"); + qemu_fdt_setprop_sized_cells(fdt, name, "reg", + 2, uart_mem->base, + 2, uart_mem->size); + + qemu_fdt_setprop_cell(fdt, name, "clock-frequency", UART_STD_CLOCK_FRE= Q); + qemu_fdt_setprop_cell(fdt, name, "interrupt-parent", irq_phandle); + + if (aia_type =3D=3D AIA_TYPE_NONE) { + qemu_fdt_setprop_cell(fdt, name, "interrupts", uart_irq); + } else { + qemu_fdt_setprop_cells(fdt, name, "interrupts", uart_irq, 0x4); + } +} diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 717a01da8d..3e40513dc1 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -418,39 +418,22 @@ static void create_fdt_virtio(RISCVVirtState *s, uint= 32_t irq_virtio_phandle) } } =20 -static void create_fdt_uart(RISCVVirtState *s, - uint32_t irq_mmio_phandle, int memId, int irqN= o) +static void create_fdt_uarts(RISCVVirtState *s, uint32_t irq_mmio_phandle) { g_autofree char *name =3D NULL; MachineState *ms =3D MACHINE(s); =20 - name =3D g_strdup_printf("/soc/serial@%"HWADDR_PRIx, - s->memmap[memId].base); - qemu_fdt_add_subnode(ms->fdt, name); - qemu_fdt_setprop_string(ms->fdt, name, "compatible", "ns16550a"); - qemu_fdt_setprop_sized_cells(ms->fdt, name, "reg", - 2, s->memmap[memId].base, - 2, s->memmap[memId].size); - qemu_fdt_setprop_cell(ms->fdt, name, "clock-frequency", 3686400); - qemu_fdt_setprop_cell(ms->fdt, name, "interrupt-parent", irq_mmio_phan= dle); - if (s->aia_type =3D=3D VIRT_AIA_TYPE_NONE) { - qemu_fdt_setprop_cell(ms->fdt, name, "interrupts", irqNo); - } else { - qemu_fdt_setprop_cells(ms->fdt, name, "interrupts", irqNo, 0x4); + if (s->uart1_present) { + riscv_create_fdt_uart(ms->fdt, &s->memmap[VIRT_UART1], + UART1_IRQ, s->aia_type, irq_mmio_phandle); } =20 - if (VIRT_UART0 =3D=3D memId) { - qemu_fdt_setprop_string(ms->fdt, "/chosen", "stdout-path", name); - qemu_fdt_setprop_string(ms->fdt, "/aliases", "serial0", name); - } -} + riscv_create_fdt_uart(ms->fdt, &s->memmap[VIRT_UART0], UART0_IRQ, + s->aia_type, irq_mmio_phandle); =20 -static void create_fdt_uarts(RISCVVirtState *s, uint32_t irq_mmio_phandle) -{ - if (s->uart1_present) { - create_fdt_uart(s, irq_mmio_phandle, VIRT_UART1, UART1_IRQ); - } - create_fdt_uart(s, irq_mmio_phandle, VIRT_UART0, UART0_IRQ); + name =3D riscv_fdt_get_uart_nodename(s->memmap[VIRT_UART0].base); + qemu_fdt_setprop_string(ms->fdt, "/chosen", "stdout-path", name); + qemu_fdt_setprop_string(ms->fdt, "/aliases", "serial0", name); } =20 static void create_fdt_rtc(RISCVVirtState *s, diff --git a/include/hw/riscv/fdt-common.h b/include/hw/riscv/fdt-common.h index a45b063f66..c8b25348bd 100644 --- a/include/hw/riscv/fdt-common.h +++ b/include/hw/riscv/fdt-common.h @@ -128,4 +128,9 @@ void riscv_create_fdt_socket_aplic(void *fdt, APLICFdtP= rops *props, uint32_t *aplic_phandles); void riscv_create_fdt_socket_aclint(void *fdt, ACLINTFdtProps *props, uint32_t *intc_phandles); +/* Caller must free the returned string. */ +char *riscv_fdt_get_uart_nodename(hwaddr addr); +void riscv_create_fdt_uart(void *fdt, const MemMapEntry *uart_mem, + int uart_irq, int aia_type, + uint32_t irq_phandle); #endif --=20 2.43.0 From nobody Sat Sep 26 21:37:17 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1787869778; cv=none; d=zohomail.com; s=zohoarc; b=AWHe0PuLquINKElSSOrR8M33sLqNOhM+XxN+E7MqOPJT+r9I5plXYYGWHsqEYoJvHTWdcVJ4rCnF2bypS6AGqWkdyTohF/+E66VkH71S2cmb5UOpfeHACxbA+3gm/U/NjpoWReLwxFID8ay0IEkgTfZsxNQ55Uc925zuCHZF0Pk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787869778; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=jAX7zs5qrBAiYTsMyZRmq7o8MWdzr6coZFfTEDgDXIQ=; b=SYYSNZ+C+zo17vr4BplVix0oPuFXSDFPtHNMHIMVcd0SH7BwyMd55UPNt5el1qXXskbg+idwhTbtpQsMvESxibQGcOZri8mGo6VCdxfbmUU46TmKv6INqrHOz6/IpkSrHOLBgzzeadcV92iWuc8gjL0Y+wS+ygr+7R6mpa2sfP8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787869778259713.3838132439479; Thu, 27 Aug 2026 15:29:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wziYu-0005g7-BG; Thu, 27 Aug 2026 18:27:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYs-0005eo-Ic for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:27:06 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYq-0001JX-Fp for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:27:05 -0400 Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67RJLwIu218824 for ; Thu, 27 Aug 2026 22:26:53 GMT Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gaphw23bq-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 27 Aug 2026 22:26:53 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-9377829a759so38364885a.0 for ; Thu, 27 Aug 2026 15:26:53 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([189.38.141.232]) by smtp.gmail.com with ESMTPSA id af79cd13be357-939173a734dsm8924985a.26.2026.08.27.15.26.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 15:26:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= jAX7zs5qrBAiYTsMyZRmq7o8MWdzr6coZFfTEDgDXIQ=; b=gLB8/1JW5EyPmtPQ W2XkwAO3WOCu5YNqbp6ePDAePBamBW+OV7a9j0GUOWJTwIw8b80ElO5ts2preQCe 1/gybxF73vhaG7ZIMeFNUPjXqlVWvbM8r2XpzuPj21y0WEMzZplZs/9CSY508cEa pBqyJH6J3Y0UahDMX/Kc/6TFm0aqNjxogMMmrta5oBGYmCcDb6rgPbJZsZYhcDjz j/+8SG0j7AzuRGpt3tMjsw7gxuD+5orkV6zJk4gd5aQcUqc5y6ec8bu11/01edgX IcqLmBhLAGTPqM5u4bS23FUcPIP+gnWz9ugiLEeW2K7kRW+s5aa4+HqFzH/A5jyH UmHiPA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787869613; x=1788474413; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=jAX7zs5qrBAiYTsMyZRmq7o8MWdzr6coZFfTEDgDXIQ=; b=iCALVI/qZnyW8Dxpsk/63wpCZJtEAMLOIzhZXgjv84cQM2chpMrqco5gtphWW9L+dj sUmRy9BWrp87H6AGtw9SvuQpLTkbKQj1QHTzT2WdblnR2cbEz9AwM6bb/Iw2QNteddUf bc5ijC684NdIxo8G1EqPvyH78H5VeaiCp3IPrDtISSfBDdE9f+b6OxaFud2H+Z6TDgqY SQNH27izFsNWq01xZ42ijPlEYJbhcc9VTLQITfWcvSPEq9y0v4nko+Kr7n/dvkVjagxs nN2m/Tm4lat90dxZlwptb1GJqA+dWp3vlZBqgLlgJnyDRC0kA4Zpfm9UyXgSE6iVg/BG IqHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787869613; x=1788474413; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=jAX7zs5qrBAiYTsMyZRmq7o8MWdzr6coZFfTEDgDXIQ=; b=X9i7iIqPO5BLYkwWj6ZXmkwm+73BKO2/8TZ3F5qvuWQ/epVsKuPB7i3K4DpMf7jnI8 qRAI1OoJc1eSS8S2k5kUi1gwWikkkk+C+05HYiIJAoYNXgTEEFSEz33Y9jpTaleBR8kc O0ypcEXWSN/dSu3Yu8AImglBFzge8omoazpZ9SFR0eeq9GL1KjFk9CfINkouZA79ua+d pMTCvxVtpKluUxGapYMpD4NW9f8ueOUKKzh5PRRRKGMa/mE0MlftKg2uUQfaBG0Kf7tF b9LI2z+7f8R0cxKc0T9BSHiQnZ0HF8J5oZUzKanWB6p7j7Jh5YHgwTL8z4Y8aCAG6plG oMgw== X-Gm-Message-State: AFuF++nGeVtAkisX31R0WlZbYe8qpKR2sx5b/xubTA+isYIMFUKt42SE 0G+gmOEzEIfRkWJEC+OWv0cQqgtobfZQI99VHkW3kEzWL9/7CeAqO6nWfZIZu7Mlt7AOobC/Nn+ WBJvXo5/bQ36H8tnPHIDI54AYCIvMNGND/cGvBYwfgAIUZIL2x6FTTkxPqLhs9A2Cdg== X-Gm-Gg: AR+sD11s6weJx0CEy95zB90NBXSVfVgH21nLMzskA3ruf/42dcU6HTy6MdqhCBVkEOE aJcP3t2JxfFbmgFfWFkkmillCyiIytTEFYbTf1NTJlB76NVDPIxDN//QZseHVUMvfigWm2VPU3v I7MzPVhnbGSQOjrtonazh3cLkoAfMv7KeXkTZe6duHJ4xqSaV00sNgrC90ko2fDz/CVSpUqgQPG FqSLW3FJG4NmyUuacyU7cDaJ+EADG2kpU0m1bSGUK/3Suum+F5ixqdyxvyjSqDrRA6a1GRG5/Uf 9VtjN7UX1jELmdL9AVMQeUg99pH08DBkVuo2b8v5gLHWib7BF5RR4ChHojhL+17dZvUt/nTgxmJ qjQZXNNHohXkYPLgAkPWfhUP38MHlV2GPch2AKQ== X-Received: by 2002:a05:620a:6187:b0:934:97c1:ca5c with SMTP id af79cd13be357-939137d09eamr289042085a.16.1787869612796; Thu, 27 Aug 2026 15:26:52 -0700 (PDT) X-Received: by 2002:a05:620a:6187:b0:934:97c1:ca5c with SMTP id af79cd13be357-939137d09eamr289002885a.16.1787869607482; Thu, 27 Aug 2026 15:26:47 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Daniel Henrique Barboza , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Palmer Dabbelt Subject: [PATCH v4 10/14] hw/riscv/fdt-common, virt.c: add riscv_create_fdt_rtc() Date: Thu, 27 Aug 2026 19:26:03 -0300 Message-ID: <20260827222608.329788-11-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> References: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: uVlkr3V-DhsYpvsEc5p-r0FirVAKore6 X-Proofpoint-Spam-Info: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX3L9QjRFQ5b8s lMqIpXoAPI8ryqRK2M31OXlH6NR6fcBs/0+2A1iICaggqIttKPj4bbsH4XH+/Eb3jAPUKbTOBEF tNjugb75jWhHB2v9n4oOGdwuFEJo+44= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX09CrU+UwlOyj XXh54UTAtHkaT0G5YKsr4YoyxdYpr/CAovF+T2EQHBIMnidk5AVX1K/OohYUang9ZyU9uo0LZB9 iaopKBjTkD/heALIp9rXVH99dKRT6AHw58u9TDbMDcqFPfiF3o0wVt9R7mEnmMaC6WSHMrzfxWZ WO36R8tWNgnmm4+IMt3ae7WSY12NQZThwDVIyxJXbLX9FnZAIzxjNzXlCP4sHaoJ3Ylid24SXx5 mI6hJxPirlcRE7tD4CZyqTzeUpjN7957iCRRIbXWGtDsoVmfUb4dGT31ZDjJc6ng1wxpV4nebDj 1Qx0xzcLohS4HvfH6IZLQUR2HE4+ixMh4o3eMmC7w3g6K+MGNXIihbQQDj63bTlI2YHPMOcpSBA FZo0Itjhv3ccv3c3rU8XQJnKyF2GSd5uA4s9bqY8tROwuHjZKuDxBlOrC6im+pZxXaqlFXuXz44 eEx0jUWIvQR6yN9Y77w== X-Proofpoint-ORIG-GUID: uVlkr3V-DhsYpvsEc5p-r0FirVAKore6 X-Authority-Analysis: v=2.4 cv=E8b9Y6dl c=1 sm=1 tr=0 ts=6a90b9ad cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=MCIxunHWmQOg/5OnbzXZaw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=RnOvKumpmH0hROQiWQcA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-27_08,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 spamscore=0 adultscore=0 phishscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 malwarescore=0 bulkscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608270190 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1787869779699158500 The soon to be added 'riscv-server-ref' board will add a rtc FDT subnode that is similar to what the 'virt' board users. Put it into a helper to avoid copy/pasting code. No FDT changes intended. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/riscv/fdt-common.c | 21 +++++++++++++++++++++ hw/riscv/virt.c | 26 ++------------------------ include/hw/riscv/fdt-common.h | 3 +++ 3 files changed, 26 insertions(+), 24 deletions(-) diff --git a/hw/riscv/fdt-common.c b/hw/riscv/fdt-common.c index e8186230b7..05042ce312 100644 --- a/hw/riscv/fdt-common.c +++ b/hw/riscv/fdt-common.c @@ -827,3 +827,24 @@ void riscv_create_fdt_uart(void *fdt, const MemMapEntr= y *uart_mem, qemu_fdt_setprop_cells(fdt, name, "interrupts", uart_irq, 0x4); } } + +void riscv_create_fdt_rtc(void *fdt, const MemMapEntry *rtc_mem, + int rtc_irq, int aia_type, + uint32_t irq_phandle) +{ + g_autofree char *name =3D NULL; + + name =3D g_strdup_printf("/soc/rtc@%"HWADDR_PRIx, + rtc_mem->base); + qemu_fdt_add_subnode(fdt, name); + qemu_fdt_setprop_string(fdt, name, "compatible", "google,goldfish-rtc"= ); + qemu_fdt_setprop_sized_cells(fdt, name, "reg", + 2, rtc_mem->base, + 2, rtc_mem->size); + qemu_fdt_setprop_cell(fdt, name, "interrupt-parent", irq_phandle); + if (aia_type =3D=3D AIA_TYPE_NONE) { + qemu_fdt_setprop_cell(fdt, name, "interrupts", rtc_irq); + } else { + qemu_fdt_setprop_cells(fdt, name, "interrupts", rtc_irq, 0x4); + } +} diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 3e40513dc1..ccea5784f0 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -436,29 +436,6 @@ static void create_fdt_uarts(RISCVVirtState *s, uint32= _t irq_mmio_phandle) qemu_fdt_setprop_string(ms->fdt, "/aliases", "serial0", name); } =20 -static void create_fdt_rtc(RISCVVirtState *s, - uint32_t irq_mmio_phandle) -{ - g_autofree char *name =3D NULL; - MachineState *ms =3D MACHINE(s); - - name =3D g_strdup_printf("/soc/rtc@%"HWADDR_PRIx, - s->memmap[VIRT_RTC].base); - qemu_fdt_add_subnode(ms->fdt, name); - qemu_fdt_setprop_string(ms->fdt, name, "compatible", - "google,goldfish-rtc"); - qemu_fdt_setprop_sized_cells(ms->fdt, name, "reg", - 2, s->memmap[VIRT_RTC].base, - 2, s->memmap[VIRT_RTC].size); - qemu_fdt_setprop_cell(ms->fdt, name, "interrupt-parent", - irq_mmio_phandle); - if (s->aia_type =3D=3D VIRT_AIA_TYPE_NONE) { - qemu_fdt_setprop_cell(ms->fdt, name, "interrupts", RTC_IRQ); - } else { - qemu_fdt_setprop_cells(ms->fdt, name, "interrupts", RTC_IRQ, 0x4); - } -} - static void create_fdt_fw_cfg(RISCVVirtState *s) { MachineState *ms =3D MACHINE(s); @@ -566,7 +543,8 @@ static void finalize_fdt(RISCVVirtState *s) =20 create_fdt_uarts(s, irq_mmio_phandle); =20 - create_fdt_rtc(s, irq_mmio_phandle); + riscv_create_fdt_rtc(MACHINE(s)->fdt, &s->memmap[VIRT_RTC], RTC_IRQ, + s->aia_type, irq_mmio_phandle); } =20 static void create_fdt(RISCVVirtState *s) diff --git a/include/hw/riscv/fdt-common.h b/include/hw/riscv/fdt-common.h index c8b25348bd..eb9db8278d 100644 --- a/include/hw/riscv/fdt-common.h +++ b/include/hw/riscv/fdt-common.h @@ -133,4 +133,7 @@ char *riscv_fdt_get_uart_nodename(hwaddr addr); void riscv_create_fdt_uart(void *fdt, const MemMapEntry *uart_mem, int uart_irq, int aia_type, uint32_t irq_phandle); +void riscv_create_fdt_rtc(void *fdt, const MemMapEntry *rtc_mem, + int rtc_irq, int aia_type, + uint32_t irq_phandle); #endif --=20 2.43.0 From nobody Sat Sep 26 21:37:17 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1787869641; cv=none; d=zohomail.com; s=zohoarc; b=LI9yQerXh6Zw8QyV2eqIaDMwrPt7JP1WSZHi5qOcBQhrYAHSQeJLgDTwadonk17ahCwvGclLtHxXNdwzHgZxhaaFg4EjNBN83svhGCHwTK4Vqft3HN0JVVNfGSlfT6Gd6RQnv3KuYRvEmnd3/yU/tEO8rRtE5ddZJbbgPGOYHRA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787869641; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=5aFpdYGlNsE5Enj7mfxPMqR8658viNfL7KoBkLVoVBM=; b=RPVsJGHK6DJbhMe2wESwRM7X/06RkeTcIYm4zvzDWvFWLrejZpblqw0r6+M7xwMf2ITVC6NavdC49BtTZG0BmhDpo2oKn+iscpO17zBXmb/evsMOpq20OZx0NcwCC1M/VDt5Z/X+3WXriS4mt0TD4h8lvFX5g1bJ1pUda08EauI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787869641424535.6572015847187; Thu, 27 Aug 2026 15:27:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wziYt-0005fc-Ph; Thu, 27 Aug 2026 18:27:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYq-0005e3-HY for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:27:04 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYo-0001Iq-MQ for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:27:04 -0400 Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67RJLomq547115 for ; Thu, 27 Aug 2026 22:26:51 GMT Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gak562urr-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 27 Aug 2026 22:26:51 +0000 (GMT) Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-933023a5980so29198385a.3 for ; Thu, 27 Aug 2026 15:26:51 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([189.38.141.232]) by smtp.gmail.com with ESMTPSA id af79cd13be357-939173a734dsm8924985a.26.2026.08.27.15.26.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 15:26:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 5aFpdYGlNsE5Enj7mfxPMqR8658viNfL7KoBkLVoVBM=; b=EBaxRXIae75fYOTG IahDVvjUfXK7PeQji7hvQd9UFzV3GwcmcOIAY8gM+wMLu22r6sRf64/PIA2Whzsn pg+j+bSCF4res/wuKYW0Ci3MCPoDBXha5Lu9cccbYdESb2l728MKl1CtT6lSzy1g cuuVSpBccLfsop+1fHB5kMpLrbwsnjGuuzTIl2MI2yEhBq144WZkAjVcZ750ATHY fI/1JgvJ225jtfNs/+TkCqdzk47GLTK2uUae4vfttAsVhaUlKSRLm2lbXB3oi38V bUQQ28bVMwBWwipYN5jABKPWnKrE+XxObUW5VnvK7KAmQoXdbUDLVjjiKN1FeHe8 xUBtBQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787869611; x=1788474411; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=5aFpdYGlNsE5Enj7mfxPMqR8658viNfL7KoBkLVoVBM=; b=FYJvZym3228OgofR8KvTmkB9tiCXCDZtsz1MMpK4bi4unasZiVIO8ZU029E0OYgpli GRCV4etVAyvbCV2/WUPPih3tGlc60YdA1tlew/K6NZT1t2clsQOFtRHJWktfQBnpCoZS O7PiZek54tz2cLn6KpNV8Z2Phhp+yKe1awOUtmmPuB6aBDy0qSo8X5Nu1KtSQ/MGp5rJ 25iuo5xXR4xL/AEYfANR4VE1bIt9g6lG4qe/fkvrtxV5mJrd7RmrrLRBEFu/WEqGJIib 1lyUPfGRn88/uVy+Fz+1BbXYzGRtNvr/xH0e9pfK8ijtz97kQZk1S40o6nMOnRPe9l8W e/rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787869611; x=1788474411; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=5aFpdYGlNsE5Enj7mfxPMqR8658viNfL7KoBkLVoVBM=; b=KXMw5NyudmmNdRtEsq7DzFbUkHPJvOr+sT1ehifGVNTYtjYV6GaQvezDX2s/hLorYv u389SfZwrs68WMvqmTEckX6AELonBqvmXHWvCpLTwUF2C6b7bnWdJR0zZ+Ei12x6Ix2s L8GGaHru9XZN1vCESKnNfjeifzs0WEWSeRyQ2ZzZjkMHfheR6t4DAYf0qRxJMml7ZhG3 wHDf0O5ztCc4U8jynhzEYMDG/z6MtrN1YZ1GTC1ddJtLrZ2E273vdcd6WESgXrHZhLxT uzoutH0OeEXjwpIbRrH/IKBCPMbv95WuyFR68RP47GGMBmX+0AChUb5CIW1zGdhPGWr3 D52g== X-Gm-Message-State: AFuF++kB46ithvMqhN7HIYTmZ2fdxB3WyWRC2zgLlKIV1dJHn6rPmbfd EZrwcdvZ54U+p0YCinEQOrR7B+zSwYFzXmzVc7+NOjzkVMQSi9ZjncE8MEoh18Tpf0qvhEY6hzd gnR4iD2K7Wwb/UEFfL2fgSrF5HicyEC8/4dRboXMJNKucdf3o+U6/D7KtrVDJeweC2g== X-Gm-Gg: AR+sD10w6EiX40bYIAgUSTo8iBKo0jMj3b+jPuGZCVtjKL2KBndEVCFfcqDcOWkR2du JM5qTnGqYSf2wnKuQO649hcJzpHzHXI1KGA9xE0Ln/bdhcO1WpIklCSAWiDgDFyCNBIbqKq+Bp8 doPK7cctONQoIYSK2/IutVNWwYoPK7GXMb6igDDhENwal1QtZFVdZf/8hJ/3yIv312ZPpJtpNvX +IjLV7AMXnYlNwC/Zl5JXE2N1/zJKm35S7Gp4MoWuuq0QQvhCCMWqC61NWHBOc4Me/o0s4xXajV Y2KTnyKjiUHRvCXqsCad0l6bz9w2AwFIAYFzLmCuw2M/nKPrfE6SDkl94OyhKpE8kWxQLEhGBA0 34QLiwGfqw86HRuTQE7HaG2hP38pT1CQzG/TWkQ== X-Received: by 2002:a05:620a:6606:b0:937:1097:feb8 with SMTP id af79cd13be357-939138be733mr270483985a.24.1787869610992; Thu, 27 Aug 2026 15:26:50 -0700 (PDT) X-Received: by 2002:a05:620a:6606:b0:937:1097:feb8 with SMTP id af79cd13be357-939138be733mr270477985a.24.1787869610441; Thu, 27 Aug 2026 15:26:50 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Daniel Henrique Barboza , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Palmer Dabbelt Subject: [PATCH v4 11/14] hw/riscv/device-common, virt.c: add riscv_create_platform_bus() Date: Thu, 27 Aug 2026 19:26:04 -0300 Message-ID: <20260827222608.329788-12-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> References: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfXxiirNaAwNOkS FZPLLNCuXtUdrUa7O0ywnzeUWZiR5ACxpTmz3m7YWEJeZFXo1Gp3ekbB9/a7CmGf4IiCpz5egxA mM1Z2uocJKkOTP9CuEtugduPjDW0jqY= X-Proofpoint-ORIG-GUID: QvVhyAXZvlJ5ScmLJ6Osf88wGE8hkrIU X-Proofpoint-GUID: QvVhyAXZvlJ5ScmLJ6Osf88wGE8hkrIU X-Authority-Analysis: v=2.4 cv=G+Ms1dk5 c=1 sm=1 tr=0 ts=6a90b9ab cx=c_pps a=50t2pK5VMbmlHzFWWp8p/g==:117 a=MCIxunHWmQOg/5OnbzXZaw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=aH2Wc4Ua3Gm2Ww6jc38A:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=IoWCM6iH3mJn3m4BftBB:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX/0ZFhwYFuVzU pAVj+ThDzTQTfg9RIqgziwmNM7g5syf0RqbnL9V7y17dC0QFiwAcaw2ke22oNa/Bln5C7NNNOJk z2CjdZ8p0aH3dSnkPPuByeGWahL3n3Rh0kdZgu7XJWsNBesiY0lXC4TiiPGtigv/ckMPyrx/WI8 6P87czlsnESmWcKeZor/Q9W3e0yNcpYxILcNeK5xJoGs2J0M1m7qKNZ8ay6dK8ce7W5xcdARcnx MVqosqEqM2Q5UFg679MuAzFtC6diFn/Zzpw2iIJNDaNSlHOgFXaBBGGk654+TIE02t8ZLTtVJRF CJAGHvPi0fyoh9zfDDN69AgqEx3p5VDGcDXLgOl2Y6gZlfptCuBMEAp4x0TA8yjIWdXb6vbNo99 7T498CoyItwaLpqXhzMvdvKgls1Hxr6Tn6e+6BgYY7HWKaiX8xgW2bl3GGQ+8jtUW7DpST+Kdi/ 7733jKVuIjGqL28nYpQ== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-27_08,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 lowpriorityscore=0 adultscore=0 clxscore=1015 bulkscore=0 phishscore=0 spamscore=0 impostorscore=0 malwarescore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608270190 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1787869643784158500 There will be code repetition instances added by the 'riscv-server-ref' board w.r.t device creation and initialization. Instead of waiting for that code to land we're adding helpers beforehand. The idea is to make the new board code shorter and more palatable for reviewers. A new 'device-common' file is created for such helpers. We'll start with the platform bus, a nice piece of software that only the 'virt' board uses so far, and the 'riscv-server-ref' will use to support TPM devices. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/riscv/device-common.c | 48 ++++++++++++++++++++++++++++++++ hw/riscv/meson.build | 1 + hw/riscv/virt.c | 30 +++----------------- include/hw/riscv/device-common.h | 19 +++++++++++++ 4 files changed, 72 insertions(+), 26 deletions(-) create mode 100644 hw/riscv/device-common.c create mode 100644 include/hw/riscv/device-common.h diff --git a/hw/riscv/device-common.c b/hw/riscv/device-common.c new file mode 100644 index 0000000000..d3c68a9e71 --- /dev/null +++ b/hw/riscv/device-common.c @@ -0,0 +1,48 @@ +/* + * RISC-V board helpers for FDT generation. + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" + +#include "hw/riscv/device-common.h" + +#include "hw/core/platform-bus.h" +#include "hw/core/qdev.h" +#include "hw/core/qdev-properties.h" +#include "hw/core/sysbus.h" +#include "qapi/error.h" +#include "system/address-spaces.h" +#include "system/memory.h" + + +DeviceState *riscv_create_platform_bus(DeviceState *irqchip, + const MemMapEntry *platform_bus_mem, + int platform_bus_base_irq, + int platform_bus_num_irqs) +{ + MemoryRegion *sysmem =3D get_system_memory(); + DeviceState *dev; + SysBusDevice *sysbus; + + dev =3D qdev_new(TYPE_PLATFORM_BUS_DEVICE); + dev->id =3D g_strdup(TYPE_PLATFORM_BUS_DEVICE); + qdev_prop_set_uint32(dev, "num_irqs", platform_bus_num_irqs); + qdev_prop_set_uint32(dev, "mmio_size", platform_bus_mem->size); + sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); + + sysbus =3D SYS_BUS_DEVICE(dev); + for (int i =3D 0; i < platform_bus_num_irqs; i++) { + int irq =3D platform_bus_base_irq + i; + sysbus_connect_irq(sysbus, i, qdev_get_gpio_in(irqchip, irq)); + } + + memory_region_add_subregion(sysmem, + platform_bus_mem->base, + sysbus_mmio_get_region(sysbus, 0)); + + return dev; +} diff --git a/hw/riscv/meson.build b/hw/riscv/meson.build index 0d82ceacc4..7aa3c1578d 100644 --- a/hw/riscv/meson.build +++ b/hw/riscv/meson.build @@ -1,6 +1,7 @@ riscv_ss =3D ss.source_set() riscv_ss.add(files('aia.c')) riscv_ss.add(files('boot.c')) +riscv_ss.add(files('device-common.c')) riscv_ss.add(files('fdt-common.c')) riscv_ss.add(when: 'CONFIG_RISCV_NUMA', if_true: files('numa.c')) riscv_ss.add(files('riscv_hart.c')) diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index ccea5784f0..a2671ae341 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -35,6 +35,7 @@ #include "hw/riscv/riscv-iommu-bits.h" #include "hw/riscv/virt.h" #include "hw/riscv/boot.h" +#include "hw/riscv/device-common.h" #include "hw/riscv/fdt-common.h" #include "hw/riscv/machines-qom.h" #include "hw/riscv/numa.h" @@ -683,31 +684,6 @@ static DeviceState *virt_create_plic(const MemMapEntry= *memmap, int socket, memmap[VIRT_PLIC].size); } =20 -static void create_platform_bus(RISCVVirtState *s, DeviceState *irqchip) -{ - DeviceState *dev; - SysBusDevice *sysbus; - int i; - MemoryRegion *sysmem =3D get_system_memory(); - - dev =3D qdev_new(TYPE_PLATFORM_BUS_DEVICE); - dev->id =3D g_strdup(TYPE_PLATFORM_BUS_DEVICE); - qdev_prop_set_uint32(dev, "num_irqs", VIRT_PLATFORM_BUS_NUM_IRQS); - qdev_prop_set_uint32(dev, "mmio_size", s->memmap[VIRT_PLATFORM_BUS].si= ze); - sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); - s->platform_bus_dev =3D dev; - - sysbus =3D SYS_BUS_DEVICE(dev); - for (i =3D 0; i < VIRT_PLATFORM_BUS_NUM_IRQS; i++) { - int irq =3D VIRT_PLATFORM_BUS_IRQ + i; - sysbus_connect_irq(sysbus, i, qdev_get_gpio_in(irqchip, irq)); - } - - memory_region_add_subregion(sysmem, - s->memmap[VIRT_PLATFORM_BUS].base, - sysbus_mmio_get_region(sysbus, 0)); -} - static void virt_build_smbios(RISCVVirtState *s) { MachineClass *mc =3D MACHINE_GET_CLASS(s); @@ -1030,7 +1006,9 @@ static void virt_machine_init(MachineState *machine) =20 gpex_pcie_init(system_memory, pcie_irqchip, s); =20 - create_platform_bus(s, mmio_irqchip); + s->platform_bus_dev =3D riscv_create_platform_bus(mmio_irqchip, + &s->memmap[VIRT_PLATFORM_BUS], VIRT_PLATFORM_BUS_IRQ, + VIRT_PLATFORM_BUS_NUM_IRQS); =20 serial_mm_init(system_memory, s->memmap[VIRT_UART0].base, 0, qdev_get_gpio_in(mmio_irqchip, UART0_IRQ), 399193, diff --git a/include/hw/riscv/device-common.h b/include/hw/riscv/device-com= mon.h new file mode 100644 index 0000000000..12af031bbf --- /dev/null +++ b/include/hw/riscv/device-common.h @@ -0,0 +1,19 @@ +/* + * RISC-V board helpers for FDT generation. + * + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef RISCV_DEVICE_COMMON_H +#define RISCV_DEVICE_COMMON_H + +#include "exec/hwaddr.h" +#include "hw/core/qdev.h" + +DeviceState *riscv_create_platform_bus(DeviceState *irqchip, + const MemMapEntry *platform_bus_mem, + int platform_bus_base_irq, + int platform_bus_num_irqs); +#endif --=20 2.43.0 From nobody Sat Sep 26 21:37:17 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1787869782; cv=none; d=zohomail.com; s=zohoarc; b=RhLqDr3gFhrJZXB1YoMGHuRsF8itQR/7XnXN03kWyaLomxMcH6z6oiHxlvfCJPXNn3w8wpFfZ+xKAF5h52ncnYd4YSKUpSDi9vmnj1aeY1JKT82YtJHpbaXid+CJ75WCs30W9qRa5J6MRD7o4qYZN2uPtHm2GV6uglnlyCS3VXo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787869782; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=0QGz/8B7wCPNje9O4Qm1vB9zHh4pgJMhEaZHiw2hcZM=; b=Juu0bwl0hqZCGln9xEUC+6tfVC73JBxkHqEXzJwQDC4iB/ha81QieaGr83cuhpjspvScf/kyL0Quj8XU2BIUUmao/Shnlu+zyzIcVOL5fuCsUTIXInTIdr0hR/TPKpLls5EaE7bDYyoes6PodMSG5iyljLAu6BI5ZQBzO/04g+g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787869781949753.6809437710389; Thu, 27 Aug 2026 15:29:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wziYu-0005gD-Mc; Thu, 27 Aug 2026 18:27:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYt-0005fk-NS for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:27:07 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYq-0001Jk-TZ for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:27:07 -0400 Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67RJLxhk218898 for ; Thu, 27 Aug 2026 22:26:54 GMT Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gaphw23br-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 27 Aug 2026 22:26:53 +0000 (GMT) Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-934956beec8so65789185a.0 for ; Thu, 27 Aug 2026 15:26:53 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([189.38.141.232]) by smtp.gmail.com with ESMTPSA id af79cd13be357-939173a734dsm8924985a.26.2026.08.27.15.26.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 15:26:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 0QGz/8B7wCPNje9O4Qm1vB9zHh4pgJMhEaZHiw2hcZM=; b=hDc9wQ6ZzBj3COQw Nmce/lLz+dAWGy3IwHI/44xs/7/SLkjUAWxzCVtIjwditNlCGE3zYebEJBBOH1ZU xfrXBFOFtW28fEt/1mFcgQ+mXHiOLfB1WeH7t+XO3LqFiYg+Wlle4lhjLmVIHUS/ f0LChPqWHdPNJnPBZGiEY+T6lsDOZAAcRzAC3RX7LDEqxV8e1UhfwYjKZdkntc4/ r3flhKv37fAGUL5oCEq14RHawHKjYvvilWxj7S96qHHnWzhlY1iZOgVm5dpmPheK j/9L+jyuM0ZtKODOZvRAJ3JQIv4LoN01ZYWmHIzA1Lp+wubzff9HRrpl/jMxZzdA JPugQQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787869613; x=1788474413; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=0QGz/8B7wCPNje9O4Qm1vB9zHh4pgJMhEaZHiw2hcZM=; b=Bm0lNOjDVBgHI8X4/aUtUOC07P7sF/aGVDLRog7scBgIzrMcpXsb/1gAsSzHccejCA eA59BVqrl2qBmRBQwHifSS9XhehCLE9t3r3zwRtgLbTv5jEeFc+1g3qtBep5wP8+HTOI i6Os5WLLHjkxgzKLg/z8ZtNrNvEn5Kv2PJ/3neGhqP/jiuDyq1O3EcjCrSHPWEmTaVCq R9+PnFhgeohNFxk89BP7IcTDt7Zr/4ZNv/dEFn+I98g1/crznMRKyvmHMa0PKpas6dgf aVLTCAaedB4n1KjZs6iymotmIx/LKn02hLJwbS/IIwNgS2zIpDQwfALIF8XoX1D2hJ0t PELw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787869613; x=1788474413; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=0QGz/8B7wCPNje9O4Qm1vB9zHh4pgJMhEaZHiw2hcZM=; b=KksfTzGPKCRRHYXaACmogaUrOJBLDY1Rzv/E3eYqhheRIrhlTujzQKhEGa07vSIEGm DN4/guaaX2dtBV3DjbJwr/aWP9BRydA6Z6Avdx6Dl9C4lKynPS5JHeh3hnv23yoew0lz uFGYde6tM1OTrEQ8o0ONsdgTa4ptFfIil2K3dw0uYkIITOS7/2vNsWfsgy6zAORyqfY1 aHENpV5RjvZIzkpJ6cvSQrlz7eOnYmK4Tx90ob8CcQVTW/9nit+s1C9aCxRddvQNyPhW s76dbe8e7JuT7RC56yuhTKMcpFLpHeepWOToSN6zTpezG5da86Z7CYwU+ngNVnXepOwd Cbvw== X-Gm-Message-State: AFuF++ljMTwAEh1jX33oRHO8PG27Vj1k5ex4T65HO3JXR2FvzT+yMXgx 01inQQupwRePvlt/BAcrlbx+lpN33HCrpbpBJjpW/UNA6CSkmXFuEmgWNrIE3waxiQL/gbvGqr0 OShxs2Xmm48+aKPnJqYk7uM+McKBDSkNQjcl0obaiWYy+rfwXaFSSVWq65t+uWz0F6g== X-Gm-Gg: AR+sD13Sy0+8FjW8RKYQuNrBqoZaOp5DpnHDLFn+y9uhFcbvDEkj2Qx2xWa9j3mwTsG mAVT4VFreNzEhedjOUTL6N22nPCC/GFMgHaMclDF0BVxgCoSJQaz+Esw/MVC6Xfd8XitnxnXFS6 w4g6S6uhQMEZEAbNJz9VDFnaFZKXKrop3Wfq5A6F94hhGCydCQVfrcqmzqsYkEoTjyU1bDv59xW +STVOIeGtyVpQp56G6MEL30KZXPJ8Q4kyF7OXXuima/BIQJrkmRhEIohn/ZwOFzfH/egWqsmT93 ZdeZArl9fywnqqcF+HZea6f4Q89nto3Ct63lW6sGD6mHO7njUHfw03nb0kfUwBejOGiP84Q5Nnk nuEcvD4pCH6RWzFK3Up3G+jlI+XzEv4Gkoh05QQ== X-Received: by 2002:a05:620a:7288:b0:938:ac3e:5a24 with SMTP id af79cd13be357-93913948cfbmr237326285a.31.1787869613272; Thu, 27 Aug 2026 15:26:53 -0700 (PDT) X-Received: by 2002:a05:620a:7288:b0:938:ac3e:5a24 with SMTP id af79cd13be357-93913948cfbmr237323885a.31.1787869612880; Thu, 27 Aug 2026 15:26:52 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Daniel Henrique Barboza , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Palmer Dabbelt Subject: [PATCH v4 12/14] hw/riscv/device-common, virt.c: add flash helpers Date: Thu, 27 Aug 2026 19:26:05 -0300 Message-ID: <20260827222608.329788-13-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> References: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: cnUbDjtllPbzO5OPQ6hdGv0HgqUs2BUY X-Proofpoint-Spam-Info: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX6P2JFHvBFOBS 1taffQEcfoKVKXv8BBncG18KZY0JerPn//0gMME1pOspKhh8Pa6CaTtGWToNw7phlQiaf+OnkkG NvieQgQb2/K9itAuk8kMbHsBM8m2XuY= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX0iskdECeBUiT TS6iRVf7CzoVN1uzIan75mSeDBBFh908j8I+z2aU72tRon0BRgDUVCIFfrgbf12VjuiYcogmgCD UDFpUM4dhHWBJe6ZZT3J3CSu1jjutYpA1bDJqUAxSoTGDb120kJ0Eb1ge11UHb4nSqeIF1OIVws IFdRbclIxrsUzXQS8tpQ/ccMbNZ9cs2F1LmrYSpu/o2abUW+tYF0IXhtrgeR2xwqlVDOmjyYu56 9ll1vF/THH4WbCRl99MJ+MAmN4bpGqbB8OaxLHTBNKWd4e9L/726EudyPef5Gl8ZbdM8Hd4wVQG 0sdalrSUU7m1M2Xzcphss4vCTtyoUgsI4uRu6FqyRPBX3OIWCCNqgq5rLCK4zbOUoPZ44IfXXj8 bYFPR7roKYn1l44julTnlmut3f9y9hFl7TGnWztqgKGggWWBd25vY3umJiCuiKKZgm7Qxucj/Qc ruGYxV2eyUTxEZA7rqg== X-Proofpoint-ORIG-GUID: cnUbDjtllPbzO5OPQ6hdGv0HgqUs2BUY X-Authority-Analysis: v=2.4 cv=E8b9Y6dl c=1 sm=1 tr=0 ts=6a90b9ad cx=c_pps a=50t2pK5VMbmlHzFWWp8p/g==:117 a=MCIxunHWmQOg/5OnbzXZaw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=Faol744VrePhJRHcD5sA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=IoWCM6iH3mJn3m4BftBB:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-27_08,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 spamscore=0 adultscore=0 phishscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 malwarescore=0 bulkscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608270190 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1787869783663158500 Move the flash device creating and flash map initialization to device-common.c. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/riscv/device-common.c | 44 ++++++++++++++++++++++++ hw/riscv/virt.c | 57 +++++--------------------------- include/hw/riscv/device-common.h | 6 ++++ 3 files changed, 58 insertions(+), 49 deletions(-) diff --git a/hw/riscv/device-common.c b/hw/riscv/device-common.c index d3c68a9e71..a054cd7114 100644 --- a/hw/riscv/device-common.c +++ b/hw/riscv/device-common.c @@ -10,11 +10,13 @@ =20 #include "hw/riscv/device-common.h" =20 +#include "hw/block/flash.h" #include "hw/core/platform-bus.h" #include "hw/core/qdev.h" #include "hw/core/qdev-properties.h" #include "hw/core/sysbus.h" #include "qapi/error.h" +#include "qom/object.h" #include "system/address-spaces.h" #include "system/memory.h" =20 @@ -46,3 +48,45 @@ DeviceState *riscv_create_platform_bus(DeviceState *irqc= hip, =20 return dev; } + +PFlashCFI01 *riscv_flash_create(Object *parent, const char *name, + const char *alias_prop_name, + int flash_sector_size) +{ + /* + * Create a single flash device. We use the same parameters as + * the flash devices on the ARM virt board. + */ + DeviceState *dev =3D qdev_new(TYPE_PFLASH_CFI01); + + qdev_prop_set_uint64(dev, "sector-length", flash_sector_size); + qdev_prop_set_uint8(dev, "width", 4); + qdev_prop_set_uint8(dev, "device-width", 2); + qdev_prop_set_bit(dev, "big-endian", false); + qdev_prop_set_uint16(dev, "id0", 0x89); + qdev_prop_set_uint16(dev, "id1", 0x18); + qdev_prop_set_uint16(dev, "id2", 0x00); + qdev_prop_set_uint16(dev, "id3", 0x00); + qdev_prop_set_string(dev, "name", name); + + object_property_add_child(parent, name, OBJECT(dev)); + object_property_add_alias(parent, alias_prop_name, + OBJECT(dev), "drive"); + + return PFLASH_CFI01(dev); +} + +void riscv_init_flash_map(PFlashCFI01 *flash, hwaddr base, hwaddr size, + MemoryRegion *sysmem, int flash_sector_size) +{ + DeviceState *dev =3D DEVICE(flash); + + assert(QEMU_IS_ALIGNED(size, flash_sector_size)); + assert(size / flash_sector_size <=3D UINT32_MAX); + + qdev_prop_set_uint32(dev, "num-blocks", size / flash_sector_size); + sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); + + memory_region_add_subregion(sysmem, base, + sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 0)= ); +} diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index a2671ae341..9ff5beae77 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -120,53 +120,12 @@ static MemMapEntry virt_high_pcie_memmap; =20 #define VIRT_FLASH_SECTOR_SIZE (256 * KiB) =20 -static PFlashCFI01 *virt_flash_create1(RISCVVirtState *s, - const char *name, - const char *alias_prop_name) -{ - /* - * Create a single flash device. We use the same parameters as - * the flash devices on the ARM virt board. - */ - DeviceState *dev =3D qdev_new(TYPE_PFLASH_CFI01); - - qdev_prop_set_uint64(dev, "sector-length", VIRT_FLASH_SECTOR_SIZE); - qdev_prop_set_uint8(dev, "width", 4); - qdev_prop_set_uint8(dev, "device-width", 2); - qdev_prop_set_bit(dev, "big-endian", false); - qdev_prop_set_uint16(dev, "id0", 0x89); - qdev_prop_set_uint16(dev, "id1", 0x18); - qdev_prop_set_uint16(dev, "id2", 0x00); - qdev_prop_set_uint16(dev, "id3", 0x00); - qdev_prop_set_string(dev, "name", name); - - object_property_add_child(OBJECT(s), name, OBJECT(dev)); - object_property_add_alias(OBJECT(s), alias_prop_name, - OBJECT(dev), "drive"); - - return PFLASH_CFI01(dev); -} - static void virt_flash_create(RISCVVirtState *s) { - s->flash[0] =3D virt_flash_create1(s, "virt.flash0", "pflash0"); - s->flash[1] =3D virt_flash_create1(s, "virt.flash1", "pflash1"); -} - -static void virt_flash_map1(PFlashCFI01 *flash, - hwaddr base, hwaddr size, - MemoryRegion *sysmem) -{ - DeviceState *dev =3D DEVICE(flash); - - assert(QEMU_IS_ALIGNED(size, VIRT_FLASH_SECTOR_SIZE)); - assert(size / VIRT_FLASH_SECTOR_SIZE <=3D UINT32_MAX); - qdev_prop_set_uint32(dev, "num-blocks", size / VIRT_FLASH_SECTOR_SIZE); - sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); - - memory_region_add_subregion(sysmem, base, - sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), - 0)); + s->flash[0] =3D riscv_flash_create(OBJECT(s), "virt.flash0", "pflash0", + VIRT_FLASH_SECTOR_SIZE); + s->flash[1] =3D riscv_flash_create(OBJECT(s), "virt.flash1", "pflash1", + VIRT_FLASH_SECTOR_SIZE); } =20 static void virt_flash_map(RISCVVirtState *s, @@ -175,10 +134,10 @@ static void virt_flash_map(RISCVVirtState *s, hwaddr flashsize =3D s->memmap[VIRT_FLASH].size / 2; hwaddr flashbase =3D s->memmap[VIRT_FLASH].base; =20 - virt_flash_map1(s->flash[0], flashbase, flashsize, - sysmem); - virt_flash_map1(s->flash[1], flashbase + flashsize, flashsize, - sysmem); + riscv_init_flash_map(s->flash[0], flashbase, flashsize, + sysmem, VIRT_FLASH_SECTOR_SIZE); + riscv_init_flash_map(s->flash[1], flashbase + flashsize, flashsize, + sysmem, VIRT_FLASH_SECTOR_SIZE); } =20 static void create_fdt_socket_plic(RISCVVirtState *s, diff --git a/include/hw/riscv/device-common.h b/include/hw/riscv/device-com= mon.h index 12af031bbf..9f8bc67a1d 100644 --- a/include/hw/riscv/device-common.h +++ b/include/hw/riscv/device-common.h @@ -10,10 +10,16 @@ #define RISCV_DEVICE_COMMON_H =20 #include "exec/hwaddr.h" +#include "hw/block/flash.h" #include "hw/core/qdev.h" =20 DeviceState *riscv_create_platform_bus(DeviceState *irqchip, const MemMapEntry *platform_bus_mem, int platform_bus_base_irq, int platform_bus_num_irqs); +PFlashCFI01 *riscv_flash_create(Object *parent, const char *name, + const char *alias_prop_name, + int flash_sector_size); +void riscv_init_flash_map(PFlashCFI01 *flash, hwaddr base, hwaddr size, + MemoryRegion *sysmem, int flash_sector_size); #endif --=20 2.43.0 From nobody Sat Sep 26 21:37:17 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1787869666; cv=none; d=zohomail.com; s=zohoarc; b=PmzCQSEzkN8U4PReYAfEOvKbg6C9+4Ax79isYpsNSWdZlFdy5g4/3DbZucmLg30zWyNAhLoVX//8qViSdG7PCgQElO3OqgZ2Ab0nP0V8QRHmsFXn0AZtj48yA2w467LXOv6KSfpYJOK72Fo7tLPozfpJ1EXChd8z08E6qncgqkI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787869666; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=nyKGR9ByEDWBLOAhMhaSOKX70qpsV8Bw3hlJiUJq8Cs=; b=MFMv8fDZeeJISeVbTPzPu/EMhg3K1+MHdgooEB9cJRnlHaU0Pz0XPy5IiK+XdqZmU8orRlVyqtGaW/tL2a2Z5aYMgrETiyZOABQulsuApxFvki3O/ZtxluK1B/3J8fbtO2V19ETP4hrcFQOaafoTfOIBH8BuBYvjC8nbo6Kkr3c= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787869666048971.6781972384467; Thu, 27 Aug 2026 15:27:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wziYw-0005l2-Jo; Thu, 27 Aug 2026 18:27:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYv-0005h9-H6 for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:27:09 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYt-0001Kq-J8 for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:27:09 -0400 Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67RJLume795150 for ; Thu, 27 Aug 2026 22:26:56 GMT Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gam6fjp62-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 27 Aug 2026 22:26:56 +0000 (GMT) Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-936e393061dso13997385a.2 for ; Thu, 27 Aug 2026 15:26:56 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([189.38.141.232]) by smtp.gmail.com with ESMTPSA id af79cd13be357-939173a734dsm8924985a.26.2026.08.27.15.26.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 15:26:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= nyKGR9ByEDWBLOAhMhaSOKX70qpsV8Bw3hlJiUJq8Cs=; b=m+ciYOXQuvqFpkd4 vrCBjA2BVa14O0m6h/uArov7DL3EEg2L1FQtPG45qGr6S0L8UIixE27pgqVWRlxk 0GoDJG+i5sNsdK7WpTtvIPhu9L6j+seR1WWZ9fT62/y51fJEyJNrzk7Y1s//Kf3n TzllC+obB/KX2LPklrdRBI9V2ID+hkeQdijbG6EukeYJYFv3y2kYcw+Yh85Ze59O TcZHbUQS7kKxPsFY7F754pb+k2dlofJj5pqX0giHUdesQP0IoXpVspkG2NlMmOEq kgeaCEtnOFUViXw2agr9lLxCuIF5gSyD18UPCYsnJsdnEwx8xK6CHllJeio3Ytxw vq8GUw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787869616; x=1788474416; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=nyKGR9ByEDWBLOAhMhaSOKX70qpsV8Bw3hlJiUJq8Cs=; b=XgvWT4+94FVMoStGtdZ+TtwGnNMQJD9L7ZB8AmBere0+VkHYJUXtMxa3Tyd31Zwq3e FSh4V4rNFDqE/WaHYmlXny8lqGF7C00/9Jm0qB/OMU2rz+pbViKzGpe7JiJwpk1A9m6u hk+bHh/pKh668xZriXR/OedGtJQTqeZ8a/DKKfn/13Gy0PG+rMOw5avuv6ITp+zd2dT9 EThUas7jkEjNxfD863p5dKvXzqk1MZI+i1uYflBAdY++HDHWIy8qL2TT76yS+DdG6kq1 UzXNG16SpxX9mBcFYvn6E1C4o/46KpitvWJIcphIATZ5r9Neanh2smUE7YZJKzO7+P5g j/pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787869616; x=1788474416; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=nyKGR9ByEDWBLOAhMhaSOKX70qpsV8Bw3hlJiUJq8Cs=; b=BkqQlGvM31ZScGs+XGLrv+xu1hLOEI6Poxt0URoRCJzN2eDeEJVMMeRnJi1nYlYmwz 1JAw951+FYruIono+E0ZayqKbTmTlDlcefLZUnfZaVLvad7m/oMDVClmq+mMi5HqxsfR EU3gnTUvD6c6H31KKQKiL77UhHsvQhq7sVVHg6Z76Eg8sa8QCVIGy4xRb2AjCBi0VEAZ ILwoFLjx7LLAIJrNobROJkBsp90zVC3nTgCv6/asOIHeDMuP9cAt14SOsVeNqH+UCCtP J/wxpzNQK5lAu27g47pOg5hmWnKO72zSFvqq8yGSBKIGjZt43l/XiNaIAkRxuCLHefOH Cg/Q== X-Gm-Message-State: AFuF++nuD7OsR+4JxU1O/8iQq8ciHC4Uw8LIEu2zk9gzpliOuCpNWNGf XxfwEJoCsV7hIQ3XIJE2xJv5pVPJgxBmwg9zF3kTvHL9hl+YfqYTyZ96J6fyoYF/3wltniFTdUk mXTPJH9JNfxt1JaK+tacxbt/IuSEWRVGzt3I3ytidd86GIW2r4+l1Vo3VhIdE4k0kwA== X-Gm-Gg: AR+sD11Sy9vnopUJNuT0SG+lLvrCgiT4xaIXJ3wp1KgYbQFpmpdDlxbkGznd2kk485F imiVLJWmFCS9/h5w5gCylmO7V7zIHqbuWCrRyqr2+jI0ZupuYd95f2pvVX1qNfvhwEqss0hny3R 6f5fUgkKmgpfIfNSAqWR/PcdHGoMpTB3lGReJOzyyYq/z2G7XW/zBAUX9L3MgvGrU2/yV4pi9yZ ba4wNPGScUUaFlRFg1nqJGUsV0ex3HktWZSIPwptU5aeJtoV6RAmXHA2esSpJorTZSoov7ybutK VyiMvpVyLZ++3eiOfaJwgJrK/gsBxhrgnZbW6TlzpI3WVm+zluF1B9gD4aqpu7kf0SAAr59wdfq J3be5B4Ynsn27pXdwRMj1xnIxSR+uNzbPALxQCw== X-Received: by 2002:a05:620a:8086:b0:939:16f6:4d01 with SMTP id af79cd13be357-93916f64e85mr50337985a.21.1787869615871; Thu, 27 Aug 2026 15:26:55 -0700 (PDT) X-Received: by 2002:a05:620a:8086:b0:939:16f6:4d01 with SMTP id af79cd13be357-93916f64e85mr50330985a.21.1787869615325; Thu, 27 Aug 2026 15:26:55 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Daniel Henrique Barboza , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Palmer Dabbelt Subject: [PATCH v4 13/14] hw/riscv/device-common, virt.c: add riscv_gpex_pcie_init() Date: Thu, 27 Aug 2026 19:26:06 -0300 Message-ID: <20260827222608.329788-14-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> References: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Info: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX0Mxd/fXkNuXK j2pEqtddTFkk9dkOS0ezh6+YfZox0b47sWGDsc3Ac2mIXJDMcZCvHuA1Yw+U130zJtqa5GyWwCp uylxHvnU4wjxrsKB777Cs9lEEz8M4UM= X-Proofpoint-GUID: DxnxmhRHYcOBbXjAh_3c2agQDUpfz7L4 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfXyhnViq7pAYMY oi/dY0o2uS7ZfryQ7am5/o/a+CmDnGoVGdUwQnSeMqsCdN2/Qr15jv1R3FF8MQZnluAyauW7KkW kEYArsMpyeVjOZmXw2tFhegdNoPhaqNaEvKeXc0KFXtHAhBkXpywajV+csPlf0NQuhDiAdfd6Wg WT/ndBCqErCgDJy2QNhz66TwVLIMEo8qZXmZxS/ud66sHzNXh7nnl2HAT20JhodwBj0fy9+uR3c pbKbjjf63tnEOVQK0yhvZUy8lZuZNfc7suhLUmr4UbrB+mGlwMpviMR6gAutmVfq/kYPtiqf3k0 CYgP01LpdSPjatZRXDArqqNjz/OnyDRXlGCmRpLy93sMKAp3e8yLGKPBE37/XyK2Us725VW/pAF 5m2VR5ENgKNPL1P79QB0/fgCUSYRFki7HT/w1V0g8NB7+INA9NODjYEUAPQ53tXhkHFXiKLkNQd yG7p5jm6mgFQPqyg1Mg== X-Authority-Analysis: v=2.4 cv=eIgjSnp1 c=1 sm=1 tr=0 ts=6a90b9b0 cx=c_pps a=qKBjSQ1v91RyAK45QCPf5w==:117 a=MCIxunHWmQOg/5OnbzXZaw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=i57S3HUJNi793Ni1t6cA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=NFOGd7dJGGMPyQGDc5-O:22 X-Proofpoint-ORIG-GUID: DxnxmhRHYcOBbXjAh_3c2agQDUpfz7L4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-27_08,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 clxscore=1015 impostorscore=0 malwarescore=0 bulkscore=0 phishscore=0 spamscore=0 priorityscore=1501 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608270190 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1787869667432158500 The GPEX_HOST initialization in 'virt' can be moved to device-common.c and be re-used later for other boards, namely the future 'riscv-server-ref' emulation. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/riscv/device-common.c | 76 +++++++++++++++++++++++++++++++ hw/riscv/virt.c | 77 ++------------------------------ include/hw/riscv/device-common.h | 7 +++ 3 files changed, 87 insertions(+), 73 deletions(-) diff --git a/hw/riscv/device-common.c b/hw/riscv/device-common.c index a054cd7114..d1a6814f87 100644 --- a/hw/riscv/device-common.c +++ b/hw/riscv/device-common.c @@ -15,6 +15,8 @@ #include "hw/core/qdev.h" #include "hw/core/qdev-properties.h" #include "hw/core/sysbus.h" +#include "hw/pci/pci.h" +#include "hw/pci-host/gpex.h" #include "qapi/error.h" #include "qom/object.h" #include "system/address-spaces.h" @@ -90,3 +92,77 @@ void riscv_init_flash_map(PFlashCFI01 *flash, hwaddr bas= e, hwaddr size, memory_region_add_subregion(sysmem, base, sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 0)= ); } + +DeviceState *riscv_gpex_pcie_init(MemoryRegion *sys_mem, + DeviceState *irqchip, + const MemMapEntry *pcie_ecam_mem, + const MemMapEntry *pcie_mmio_mem, + const MemMapEntry *high_pcie_mmio_mem, + const MemMapEntry *pcie_pio_mem, + int pcie_irq) +{ + DeviceState *dev; + MemoryRegion *ecam_alias, *ecam_reg; + MemoryRegion *mmio_alias, *high_mmio_alias, *mmio_reg; + hwaddr ecam_base =3D pcie_ecam_mem->base; + hwaddr ecam_size =3D pcie_ecam_mem->size; + hwaddr mmio_base =3D pcie_mmio_mem->base; + hwaddr mmio_size =3D pcie_mmio_mem->size; + hwaddr high_mmio_base =3D high_pcie_mmio_mem->base; + hwaddr high_mmio_size =3D high_pcie_mmio_mem->size; + hwaddr pio_base =3D pcie_pio_mem->base; + hwaddr pio_size =3D pcie_pio_mem->size; + + dev =3D qdev_new(TYPE_GPEX_HOST); + + /* Set GPEX object properties for the virt machine */ + object_property_set_uint(OBJECT(dev), PCI_HOST_ECAM_BASE, + ecam_base, NULL); + object_property_set_int(OBJECT(dev), PCI_HOST_ECAM_SIZE, + ecam_size, NULL); + object_property_set_uint(OBJECT(dev), PCI_HOST_BELOW_4G_MMIO_BASE, + mmio_base, NULL); + object_property_set_int(OBJECT(dev), PCI_HOST_BELOW_4G_MMIO_SIZE, + mmio_size, NULL); + object_property_set_uint(OBJECT(dev), PCI_HOST_ABOVE_4G_MMIO_BASE, + high_mmio_base, NULL); + object_property_set_int(OBJECT(dev), PCI_HOST_ABOVE_4G_MMIO_SIZE, + high_mmio_size, NULL); + object_property_set_uint(OBJECT(dev), PCI_HOST_PIO_BASE, + pio_base, NULL); + object_property_set_int(OBJECT(dev), PCI_HOST_PIO_SIZE, + pio_size, NULL); + + sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); + + ecam_alias =3D g_new0(MemoryRegion, 1); + ecam_reg =3D sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 0); + memory_region_init_alias(ecam_alias, OBJECT(dev), "pcie-ecam", + ecam_reg, 0, ecam_size); + memory_region_add_subregion(get_system_memory(), ecam_base, ecam_alias= ); + + mmio_alias =3D g_new0(MemoryRegion, 1); + mmio_reg =3D sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 1); + memory_region_init_alias(mmio_alias, OBJECT(dev), "pcie-mmio", + mmio_reg, mmio_base, mmio_size); + memory_region_add_subregion(get_system_memory(), mmio_base, mmio_alias= ); + + /* Map high MMIO space */ + high_mmio_alias =3D g_new0(MemoryRegion, 1); + memory_region_init_alias(high_mmio_alias, OBJECT(dev), "pcie-mmio-high= ", + mmio_reg, high_mmio_base, high_mmio_size); + memory_region_add_subregion(get_system_memory(), high_mmio_base, + high_mmio_alias); + + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 2, pio_base); + + for (int i =3D 0; i < PCI_NUM_PINS; i++) { + qemu_irq irq =3D qdev_get_gpio_in(irqchip, pcie_irq + i); + + sysbus_connect_irq(SYS_BUS_DEVICE(dev), i, irq); + gpex_set_irq_num(GPEX_HOST(dev), i, pcie_irq + i); + } + + GPEX_HOST(dev)->gpex_cfg.bus =3D PCI_HOST_BRIDGE(dev)->bus; + return dev; +} diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 9ff5beae77..d75dec2dd2 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -540,78 +540,6 @@ static void create_fdt(RISCVVirtState *s) create_fdt_pmu(s); } =20 -static inline DeviceState *gpex_pcie_init(MemoryRegion *sys_mem, - DeviceState *irqchip, - RISCVVirtState *s) -{ - DeviceState *dev; - MemoryRegion *ecam_alias, *ecam_reg; - MemoryRegion *mmio_alias, *high_mmio_alias, *mmio_reg; - hwaddr ecam_base =3D s->memmap[VIRT_PCIE_ECAM].base; - hwaddr ecam_size =3D s->memmap[VIRT_PCIE_ECAM].size; - hwaddr mmio_base =3D s->memmap[VIRT_PCIE_MMIO].base; - hwaddr mmio_size =3D s->memmap[VIRT_PCIE_MMIO].size; - hwaddr high_mmio_base =3D virt_high_pcie_memmap.base; - hwaddr high_mmio_size =3D virt_high_pcie_memmap.size; - hwaddr pio_base =3D s->memmap[VIRT_PCIE_PIO].base; - hwaddr pio_size =3D s->memmap[VIRT_PCIE_PIO].size; - qemu_irq irq; - int i; - - dev =3D qdev_new(TYPE_GPEX_HOST); - - /* Set GPEX object properties for the virt machine */ - object_property_set_uint(OBJECT(dev), PCI_HOST_ECAM_BASE, - ecam_base, NULL); - object_property_set_int(OBJECT(dev), PCI_HOST_ECAM_SIZE, - ecam_size, NULL); - object_property_set_uint(OBJECT(dev), PCI_HOST_BELOW_4G_MMIO_BASE, - mmio_base, NULL); - object_property_set_int(OBJECT(dev), PCI_HOST_BELOW_4G_MMIO_SIZE, - mmio_size, NULL); - object_property_set_uint(OBJECT(dev), PCI_HOST_ABOVE_4G_MMIO_BASE, - high_mmio_base, NULL); - object_property_set_int(OBJECT(dev), PCI_HOST_ABOVE_4G_MMIO_SIZE, - high_mmio_size, NULL); - object_property_set_uint(OBJECT(dev), PCI_HOST_PIO_BASE, - pio_base, NULL); - object_property_set_int(OBJECT(dev), PCI_HOST_PIO_SIZE, - pio_size, NULL); - - sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); - - ecam_alias =3D g_new0(MemoryRegion, 1); - ecam_reg =3D sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 0); - memory_region_init_alias(ecam_alias, OBJECT(dev), "pcie-ecam", - ecam_reg, 0, ecam_size); - memory_region_add_subregion(get_system_memory(), ecam_base, ecam_alias= ); - - mmio_alias =3D g_new0(MemoryRegion, 1); - mmio_reg =3D sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 1); - memory_region_init_alias(mmio_alias, OBJECT(dev), "pcie-mmio", - mmio_reg, mmio_base, mmio_size); - memory_region_add_subregion(get_system_memory(), mmio_base, mmio_alias= ); - - /* Map high MMIO space */ - high_mmio_alias =3D g_new0(MemoryRegion, 1); - memory_region_init_alias(high_mmio_alias, OBJECT(dev), "pcie-mmio-high= ", - mmio_reg, high_mmio_base, high_mmio_size); - memory_region_add_subregion(get_system_memory(), high_mmio_base, - high_mmio_alias); - - sysbus_mmio_map(SYS_BUS_DEVICE(dev), 2, pio_base); - - for (i =3D 0; i < PCI_NUM_PINS; i++) { - irq =3D qdev_get_gpio_in(irqchip, PCIE_IRQ + i); - - sysbus_connect_irq(SYS_BUS_DEVICE(dev), i, irq); - gpex_set_irq_num(GPEX_HOST(dev), i, PCIE_IRQ + i); - } - - GPEX_HOST(dev)->gpex_cfg.bus =3D PCI_HOST_BRIDGE(dev)->bus; - return dev; -} - static FWCfgState *create_fw_cfg(const MachineState *ms, hwaddr base) { FWCfgState *fw_cfg; @@ -963,7 +891,10 @@ static void virt_machine_init(MachineState *machine) qdev_get_gpio_in(virtio_irqchip, VIRTIO_IRQ + i)); } =20 - gpex_pcie_init(system_memory, pcie_irqchip, s); + riscv_gpex_pcie_init(system_memory, pcie_irqchip, + &s->memmap[VIRT_PCIE_ECAM], &s->memmap[VIRT_PCIE_MMIO], + &virt_high_pcie_memmap, &s->memmap[VIRT_PCIE_PIO], + PCIE_IRQ); =20 s->platform_bus_dev =3D riscv_create_platform_bus(mmio_irqchip, &s->memmap[VIRT_PLATFORM_BUS], VIRT_PLATFORM_BUS_IRQ, diff --git a/include/hw/riscv/device-common.h b/include/hw/riscv/device-com= mon.h index 9f8bc67a1d..572912ec36 100644 --- a/include/hw/riscv/device-common.h +++ b/include/hw/riscv/device-common.h @@ -22,4 +22,11 @@ PFlashCFI01 *riscv_flash_create(Object *parent, const ch= ar *name, int flash_sector_size); void riscv_init_flash_map(PFlashCFI01 *flash, hwaddr base, hwaddr size, MemoryRegion *sysmem, int flash_sector_size); +DeviceState *riscv_gpex_pcie_init(MemoryRegion *sys_mem, + DeviceState *irqchip, + const MemMapEntry *pcie_ecam_mem, + const MemMapEntry *pcie_mmio_mem, + const MemMapEntry *high_pcie_mmio_mem, + const MemMapEntry *pcie_pio_mem, + int pcie_irq); #endif --=20 2.43.0 From nobody Sat Sep 26 21:37:17 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=oss.qualcomm.com ARC-Seal: i=1; a=rsa-sha256; t=1787869755; cv=none; d=zohomail.com; s=zohoarc; b=HNHPnL742QZiYl0OkqZRjUVkPbIzktyhOgj/25T63NcsNFkz49/WiyTJZq5LepCWU/CmJ+G6tqk8VKcsf3P138jC1uGOC1YCI6lhucZRDxgAt6MI1Yg/bf6gVFPofJ+0Tki25w7ns3gpTcXU/JyqOxFBn3UZDkFLWDU3c03pn5E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787869755; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Jn9iXpKYNS1L6RaSzUDnHO6ijMZ0oIaALhAL7v8dv7E=; b=KILIdY4vj9cNwKaudKbVjwnvsN65SsAWQc5GnI70xNPlIAExoyXIKcxC/CejJyHyi+VrtGowf4d0Znvqq3wdezL+fKTei1djIi3V0XwS/ozw8xEybHnFpdNW164e3Y0VyGibs1kegW/g2WsUGUFKuDivH1EpfssgJW6JxPf8X7Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787869755607762.3573404338962; Thu, 27 Aug 2026 15:29:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wziZ1-000618-1Z; Thu, 27 Aug 2026 18:27:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYy-0005rB-11 for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:27:12 -0400 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wziYw-0001Ll-AU for qemu-devel@nongnu.org; Thu, 27 Aug 2026 18:27:11 -0400 Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67RJLr3K653769 for ; Thu, 27 Aug 2026 22:26:59 GMT Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gagjfum66-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 27 Aug 2026 22:26:59 +0000 (GMT) Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-93494cce712so45330385a.3 for ; Thu, 27 Aug 2026 15:26:59 -0700 (PDT) Received: from QCOM-UWl2o8bcGT.qualcomm.com ([189.38.141.232]) by smtp.gmail.com with ESMTPSA id af79cd13be357-939173a734dsm8924985a.26.2026.08.27.15.26.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 15:26:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= Jn9iXpKYNS1L6RaSzUDnHO6ijMZ0oIaALhAL7v8dv7E=; b=CFM962C9ngXLZcAC WskpTBFFoLwQopKDw0++iwcV5RhSTIcwcYZTTRt+zy42pfvYq45cqa5kQwo3t9Md LDA0MuC+6xkVt9273lMaS6Akc+apT6dMyS5Er4wFe6OKTzBsaWsCMx7cd+XJODzO Aaz17CpCTyUcO9SDSEWUxAN1WxzrG6hH/UWm+WqcWIlvCr71AfBzPawSeREfynYG D8ZWxMgJTESBtRC165FO5CeLGfKR0tlj9HpjWPIhimKI17yslUXwFuBHNfCrdRgj /RRm9VHxiFCL/ZsWbxRek/zlAlHUJzQnt2IzKsXXmFJBybFLlqVD1MJTxa4mKF1h BfpM+g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787869619; x=1788474419; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=Jn9iXpKYNS1L6RaSzUDnHO6ijMZ0oIaALhAL7v8dv7E=; b=WkkTkd8XetiWMU6yy6y6dtK2AwzwR8/YJ/aj7U0qeJIfkAb71KvVFedqjXrYzI82be mDrKMX9YrQEg++PgLLv4kFe6tTj2Tvh/HWpD9IjfGVlgGC/hHqjZh1ricjZtbjv9qQRs zkRfS1n0NnYmuHI4l4RiiYX5GSYHL+EaWhc22UdCNsLGVu5guHHJi93OOUhLtRuDR512 MUfAD2tzQdhd52JeXaUatLwr9TyZ6RZHVMlpAqRpr1u4eLAdDCajR5ZxcHnc1FvGntWz wViISvusXKadW7MFc2VhluA2LRs7ubhd7DBsaAPJmay0o1BHRP7mpy/9LEtS4CZCgWG+ Usig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787869619; x=1788474419; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Jn9iXpKYNS1L6RaSzUDnHO6ijMZ0oIaALhAL7v8dv7E=; b=iiV81sCw1L/mJZIs+BrOui7jLqlrv3FGdPgNAiKbzxdY4Eb0SajJopHE4mihEyHbO/ kxVHcpjxSLPVF8/FEGV7Zuw+lQ+tUGgxMrPJ+vMABLTD20yzN4te+WHeWqZyD0X/LcYX iUgkYgexyEd7qgs41DOLwmaiGcxmm/hiJWba2I9/LyJiuRLRm+dZ2LZh498YltT0zEXl zfoVDedjqNHYv/vbFQznBocac2Wm6gw3dNgchouEXo6JgKccamN0HNySTQj9mJQOddXA jLxjfI1xlbfZxaAHeUCnX3gioFpoiyJYmDV5rBIXLDViVAjkGX15yxLCXjBfvs4CPL38 JOzA== X-Gm-Message-State: AFuF++lU9rtOpVSt1BP2KKvQRHzDU1WRHiA9HHufAgERcMNMRYnGqrQ5 1YWt6+TyYeSBKyjAbwKIDd1Vah4jsKr9WUqfIPC2L6vYmEJ4T2A0ZoGTdXgVpJS0W+PmmMEcEbt vLhc1ISf+HQpEO3Unw1T5NTrWaI6kMfBDw5BISqKjAZS8aD+ur7KJtw5gTGO/B4hFfA== X-Gm-Gg: AR+sD13aokH+ePRXJd1Yi31OsJnv06GIOSt1aJY8aYqpdo4vW+y7YrXSWPr43vYQDEc Bi4+OtYMbRySVRStKGcYPSfzWRIt01lvtrcqzKwT/S/653MpkO2DdnOnoEKp+SJ+VZiG6O9HBDL VloxaPSYpEXhmSJt5nwUZGN5HsUmF81uXi357NlcLsJ3ZxUXDYrLErtMqgn7JaD51/erjwIzQI/ CsXd0Yu4WfCKw5kL8Wp0t44GY9z3t2GUWUPaHT8cuM6U1osdCx5hkvxj06/qMSOBTPBnHjj8tQy 9NHS+JPZoUg/DGJLRZeEn+lLNLaHUKLjqR5iXdjG6Rr33V7QQcoq8clwr+nL5hoTsX40Vwqp+7D z2dlCSNzE6YSBaR7mIxRhBCa4rMo4KYTpfY5V5w== X-Received: by 2002:a05:620a:26a2:b0:936:a407:98bb with SMTP id af79cd13be357-9391379816bmr268329685a.9.1787869618647; Thu, 27 Aug 2026 15:26:58 -0700 (PDT) X-Received: by 2002:a05:620a:26a2:b0:936:a407:98bb with SMTP id af79cd13be357-9391379816bmr268324585a.9.1787869618127; Thu, 27 Aug 2026 15:26:58 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, chao.liu@processmission.com, Daniel Henrique Barboza , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Palmer Dabbelt Subject: [PATCH v4 14/14] hw/riscv/riscv-iommu-sys.c, virt.c: add riscv_create_iommu_sys() Date: Thu, 27 Aug 2026 19:26:07 -0300 Message-ID: <20260827222608.329788-15-daniel.barboza@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> References: <20260827222608.329788-1-daniel.barboza@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: BGJ2X4DCkbzly8GEPcvlNaOdlCx_hTI3 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfXz4Twcv4H+mme e/N6yAXTZW0MSm8gmqrZt/0Dtd5glSIb7h097LpruLXfzgh1C+K51bZ7EyBTEN9aevIj2DuWtjV fcA/dA9/r8Ok4/s41NtT06cMgrR6jwqd/ohl9vTp57qXkIjdequToxWqDh6vgsyMa1dQNJ3/3Iy XCYuMW9xAZsyi+85r+R6iVoqxF96Shtn3WQgiPUpYoDrH2f0ApKxjHpxS/6jzznlGz7nFQjt0M4 u+LOWVLRJe2eRDjfSdbh0WUEotuq9WqKBLuchyrnFW8INBsPsLh266NxNpHr5MyYWF18FbBsF7Y /n9H/ghmk/JIZ1p88z6Nhm+uhAHTqW5Be5fpEQ8Gyp9pIGlX2cGmLNVZM8qUagVhgT58kVIlUab uMqkyFqm30bEMAcq5RUQzVf9yQJvHVOoYCRZE1Zgo3KHXVLrSGgRfTD91Sc+d1a1ZOdzD1COFv6 l69BOtUKhXdx2R2jO9A== X-Proofpoint-Spam-Info: AW1haW4tMjYwODI3MDE5MCBTYWx0ZWRfX0TOTDfEG2ycL le07OAv2dgTcyyySw5B0MnuxSol0QxSADNRY5J7H3Zvm6MmEXOhkSInj2BYAJp8HYbcL+e6/q5B SbOPfFy8W1wBIkb3VVpiIS+6+oFKDwM= X-Proofpoint-GUID: BGJ2X4DCkbzly8GEPcvlNaOdlCx_hTI3 X-Authority-Analysis: v=2.4 cv=dd+wG3Xe c=1 sm=1 tr=0 ts=6a90b9b3 cx=c_pps a=50t2pK5VMbmlHzFWWp8p/g==:117 a=MCIxunHWmQOg/5OnbzXZaw==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=sIvX0uTPz6KFyc5RlFwA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=IoWCM6iH3mJn3m4BftBB:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-27_08,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 priorityscore=1501 lowpriorityscore=0 clxscore=1015 bulkscore=0 adultscore=0 suspectscore=0 impostorscore=0 malwarescore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608270190 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=205.220.180.131; envelope-from=daniel.barboza@oss.qualcomm.com; helo=mx0b-0031df01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @qualcomm.com) X-ZM-MESSAGEID: 1787869758600154100 Move the creation of riscv-iommu-sys to its own file instead of open coding it in the 'virt' board. Other boards in the future might want to use this device and we want to avoid code duplication. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/riscv/riscv-iommu-sys.c | 25 +++++++++++++++++++++++++ hw/riscv/riscv-iommu.h | 3 +++ hw/riscv/virt.c | 23 +++-------------------- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/hw/riscv/riscv-iommu-sys.c b/hw/riscv/riscv-iommu-sys.c index 3314adeed2..258c171efd 100644 --- a/hw/riscv/riscv-iommu-sys.c +++ b/hw/riscv/riscv-iommu-sys.c @@ -217,6 +217,31 @@ static void riscv_iommu_sys_init(Object *obj) riscv_iommu_set_cap_igs(iommu, RISCV_IOMMU_CAP_IGS_BOTH); } =20 +DeviceState *riscv_create_iommu_sys(DeviceState *mmio_irqchip, + hwaddr addr, int base_irq, + bool is_32_bit) +{ + DeviceState *iommu_sys =3D qdev_new(TYPE_RISCV_IOMMU_SYS); + + object_property_set_uint(OBJECT(iommu_sys), "addr", addr, &error_fatal= ); + object_property_set_uint(OBJECT(iommu_sys), "base-irq", + base_irq, &error_fatal); + object_property_set_link(OBJECT(iommu_sys), "irqchip", + OBJECT(mmio_irqchip), + &error_fatal); + /* + * For riscv64 use a physical address size of 56 bits (44 bit PPN), + * and for riscv32 use 34 bits (22 bit PPN). + */ + object_property_set_uint(OBJECT(iommu_sys), "pas-bits", + is_32_bit ? 34 : 56, + &error_fatal); + + sysbus_realize_and_unref(SYS_BUS_DEVICE(iommu_sys), &error_fatal); + + return iommu_sys; +} + static const Property riscv_iommu_sys_properties[] =3D { DEFINE_PROP_UINT64("addr", RISCVIOMMUStateSys, addr, 0), DEFINE_PROP_UINT32("base-irq", RISCVIOMMUStateSys, base_irq, 0), diff --git a/hw/riscv/riscv-iommu.h b/hw/riscv/riscv-iommu.h index da70e8bfa8..7c470ba084 100644 --- a/hw/riscv/riscv-iommu.h +++ b/hw/riscv/riscv-iommu.h @@ -104,6 +104,9 @@ void riscv_iommu_set_cap_igs(RISCVIOMMUState *s, riscv_= iommu_igs_mode mode); void riscv_iommu_reset(RISCVIOMMUState *s); void riscv_iommu_notify(RISCVIOMMUState *s, int vec_type); void riscv_iommu_fault(RISCVIOMMUState *s, struct riscv_iommu_fq_record *e= v); +DeviceState *riscv_create_iommu_sys(DeviceState *mmio_irqchip, + hwaddr addr, int base_irq, + bool is_32_bit); =20 typedef struct RISCVIOMMUContext RISCVIOMMUContext; /* Device translation context state. */ diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index d75dec2dd2..de7b99c6a5 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -32,6 +32,7 @@ #include "hw/core/sysbus-fdt.h" #include "hw/riscv/riscv_hart.h" #include "hw/riscv/iommu.h" +#include "hw/riscv/riscv-iommu.h" #include "hw/riscv/riscv-iommu-bits.h" #include "hw/riscv/virt.h" #include "hw/riscv/boot.h" @@ -933,26 +934,8 @@ static void virt_machine_init(MachineState *machine) } =20 if (virt_is_iommu_sys_enabled(s)) { - DeviceState *iommu_sys =3D qdev_new(TYPE_RISCV_IOMMU_SYS); - - object_property_set_uint(OBJECT(iommu_sys), "addr", - s->memmap[VIRT_IOMMU_SYS].base, - &error_fatal); - object_property_set_uint(OBJECT(iommu_sys), "base-irq", - IOMMU_SYS_IRQ, - &error_fatal); - object_property_set_link(OBJECT(iommu_sys), "irqchip", - OBJECT(mmio_irqchip), - &error_fatal); - /* - * For riscv64 use a physical address size of 56 bits (44 bit PPN), - * and for riscv32 use 34 bits (22 bit PPN). - */ - object_property_set_uint(OBJECT(iommu_sys), "pas-bits", - riscv_is_32bit(&s->soc[0]) ? 34 : 56, - &error_fatal); - - sysbus_realize_and_unref(SYS_BUS_DEVICE(iommu_sys), &error_fatal); + riscv_create_iommu_sys(mmio_irqchip, s->memmap[VIRT_IOMMU_SYS].bas= e, + IOMMU_SYS_IRQ, riscv_is_32bit(&s->soc[0])); } =20 s->machine_done.notify =3D virt_machine_done; --=20 2.43.0