From patchwork Mon Feb 24 02:57:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yong-Xuan Wang X-Patchwork-Id: 13987367 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 599E0C021B3 for ; Mon, 24 Feb 2025 02:58:54 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tmOfI-0000pm-2d; Sun, 23 Feb 2025 21:57:52 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tmOfC-0000oN-La for qemu-devel@nongnu.org; Sun, 23 Feb 2025 21:57:46 -0500 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tmOfA-00019u-UC for qemu-devel@nongnu.org; Sun, 23 Feb 2025 21:57:46 -0500 Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-220ec47991aso51041045ad.1 for ; Sun, 23 Feb 2025 18:57:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1740365863; x=1740970663; darn=nongnu.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=5ozjelzQsJJoPTKxV2xpdh1WowibHwhpYwqjQER97V8=; b=QGJvn9Y+2MwYA2RlqiF0RvdhX0HKcsp/GFllg+H+Ajy5oDyKO24GeNHiKCsEyjTSb5 fxSGQAbwBY018rZhonecJbTFcSZTpMjryZvSky8PSlxZfvZN5LtW80Heumvq0w+Nc6le 27+R67lIlzE3Hl6OperCTUXz2yhmccr6oTnTPXNjZ31ZWFLOCdBih6YV5YfUMqdrW8gt N9eWK6PjtoB/qulcJwI2/pfPeX8vEY9azw1H1sMSax+DUOhodfh8il4AqOFtjp0PWeTe xEBWO6UxSVd+n9XzocKruGqZQIrCVSugP91EOtj2sRr/mXT5jA/rp5phLMGLERTJemUU 79Og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740365863; x=1740970663; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=5ozjelzQsJJoPTKxV2xpdh1WowibHwhpYwqjQER97V8=; b=jzG2wCF+x9GUw2nCX5FlIeaNhyY9WBJeya336Z6YoIwwHaxhPuw9r9CVHpy4wreMK0 mV5wDeRzp5PNRbuYBqArMWN17ykRQre8OQiKR7/L/K0Tx7PZIv4rD1dx9H+hgtJsWIuf 5OYovRDMUbm3fe7TL/OPCnjXRKOT586COUT1J8j7zKkfmUPfpVaEWNidm84vT64b9IUo 9XgNujPfZwDHtgLiSIfnm/CO5E/jus1YLWyN5vO7eeTfigGP+MKGGemWUWfIe7Zp3qvn 8nvHUkQKqGiVej6XfS99csBly3u3jMMsAdMqSLgHBj+Q4QaxU34OUTq+fSwTGbtlpM+c fnqA== X-Gm-Message-State: AOJu0YxsMHS2vuFVGDQyr8M9F0ZB1AACrS3RLFU8qKw0yrHirxNEIbqj IlapzBscg7leN1E6AEkBkpy+DsubeDgR28u7qL6kLVPsOa9V59G9vqv/xujTCXjsR3ISVd9oV3O Li14azDy5Z8YV8tEedmdICHxX+/flfl9kJBvK9sB9b/OobrD4N6aY8Y1/EzD8cTmVQKE7xN807R OyI8V86BZlTyPLMmiI2PlydImbfRSViYZ21vHzrJ19KQ== X-Gm-Gg: ASbGncvDDoExuf7GbCjyvnYvVYUZrcTSDIzNIkvNGxOvK2BU7LeGDuJuRETlWWDbv1/ nSMFbzILAE07XxR6b4q+r/wUBthM+OjQlr/7gbcvuRA7uzDd9ZrFJepDn6cCR+F1doKPfq3jnT8 ns59+Uskrw9jiewkkW0QxesfaKGCjMtFM7wjLzqHIiOev62et0toGf3Qg9k3thsTzwEc0xzUpy2 2l16YWxlolESwGKSgGVew1XuyiSFR76XhwLIw7blMW/uyOKv00Pcs1wSK+okUx3VvezFu8xjOLr sEDP7wwRgRa44+PfodGxt46+QwG2dzQzeJAUerc92CV9mhjPeFXUFixA X-Google-Smtp-Source: AGHT+IG1sE1O1axsf4WHHrDP2PIvS+LX+8j7VRxcvSYxIptRHRI4x/YcIgHHmou0rKyC6O4gSnBvAw== X-Received: by 2002:a17:902:d50b:b0:220:fe24:7910 with SMTP id d9443c01a7336-2219ff4e74emr198206675ad.15.1740365859425; Sun, 23 Feb 2025 18:57:39 -0800 (PST) Received: from hsinchu26.internal.sifive.com ([210.176.154.34]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d53490c2sm171660665ad.47.2025.02.23.18.57.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Feb 2025 18:57:38 -0800 (PST) From: Yong-Xuan Wang To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: greentime.hu@sifive.com, vincent.chen@sifive.com, frank.chang@sifive.com, jim.shu@sifive.com, Yong-Xuan Wang , Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei Subject: [PATCH v2 1/3] hw/intc/imsic: refine the IMSIC realize Date: Mon, 24 Feb 2025 10:57:18 +0800 Message-Id: <20250224025722.3999-2-yongxuan.wang@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250224025722.3999-1-yongxuan.wang@sifive.com> References: <20250224025722.3999-1-yongxuan.wang@sifive.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::634; envelope-from=yongxuan.wang@sifive.com; helo=mail-pl1-x634.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, 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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org When the IMSIC is emulated in the kernel, the GPIO output lines to CPUs and aia_ireg_rmw_fn setting can be remove. In this case the IMSIC trigger CPU interrupts by KVM APIs, and the RMW of IREG is handled in kernel. This patch also move the code that claim the CPU interrupts to the beginning of IMSIC realization. This can avoid the unnecessary resource allocation before checking failed. Signed-off-by: Yong-Xuan Wang --- hw/intc/riscv_imsic.c | 47 ++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/hw/intc/riscv_imsic.c b/hw/intc/riscv_imsic.c index dc8162c0a7c9..241b12fef09f 100644 --- a/hw/intc/riscv_imsic.c +++ b/hw/intc/riscv_imsic.c @@ -349,7 +349,19 @@ static void riscv_imsic_realize(DeviceState *dev, Error **errp) CPUState *cpu = cpu_by_arch_id(imsic->hartid); CPURISCVState *env = cpu ? cpu_env(cpu) : NULL; + /* Claim the CPU interrupt to be triggered by this IMSIC */ + if (riscv_cpu_claim_interrupts(rcpu, + (imsic->mmode) ? MIP_MEIP : MIP_SEIP) < 0) { + error_setg(errp, "%s already claimed", + (imsic->mmode) ? "MEIP" : "SEIP"); + return; + } + if (!kvm_irqchip_in_kernel()) { + /* Create output IRQ lines */ + imsic->external_irqs = g_malloc(sizeof(qemu_irq) * imsic->num_pages); + qdev_init_gpio_out(dev, imsic->external_irqs, imsic->num_pages); + imsic->num_eistate = imsic->num_pages * imsic->num_irqs; imsic->eidelivery = g_new0(uint32_t, imsic->num_pages); imsic->eithreshold = g_new0(uint32_t, imsic->num_pages); @@ -361,18 +373,6 @@ static void riscv_imsic_realize(DeviceState *dev, Error **errp) IMSIC_MMIO_SIZE(imsic->num_pages)); sysbus_init_mmio(SYS_BUS_DEVICE(dev), &imsic->mmio); - /* Claim the CPU interrupt to be triggered by this IMSIC */ - if (riscv_cpu_claim_interrupts(rcpu, - (imsic->mmode) ? MIP_MEIP : MIP_SEIP) < 0) { - error_setg(errp, "%s already claimed", - (imsic->mmode) ? "MEIP" : "SEIP"); - return; - } - - /* Create output IRQ lines */ - imsic->external_irqs = g_malloc(sizeof(qemu_irq) * imsic->num_pages); - qdev_init_gpio_out(dev, imsic->external_irqs, imsic->num_pages); - /* Force select AIA feature and setup CSR read-modify-write callback */ if (env) { if (!imsic->mmode) { @@ -381,8 +381,11 @@ static void riscv_imsic_realize(DeviceState *dev, Error **errp) } else { rcpu->cfg.ext_smaia = true; } - riscv_cpu_set_aia_ireg_rmw_fn(env, (imsic->mmode) ? PRV_M : PRV_S, - riscv_imsic_rmw, imsic); + + if (!kvm_irqchip_in_kernel()) { + riscv_cpu_set_aia_ireg_rmw_fn(env, (imsic->mmode) ? PRV_M : PRV_S, + riscv_imsic_rmw, imsic); + } } msi_nonbroken = true; @@ -464,15 +467,17 @@ DeviceState *riscv_imsic_create(hwaddr addr, uint32_t hartid, bool mmode, sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, addr); - for (i = 0; i < num_pages; i++) { - if (!i) { - qdev_connect_gpio_out_named(dev, NULL, i, - qdev_get_gpio_in(DEVICE(cpu), + if (!kvm_irqchip_in_kernel()) { + for (i = 0; i < num_pages; i++) { + if (!i) { + qdev_connect_gpio_out_named(dev, NULL, i, + qdev_get_gpio_in(DEVICE(cpu), (mmode) ? IRQ_M_EXT : IRQ_S_EXT)); - } else { - qdev_connect_gpio_out_named(dev, NULL, i, - qdev_get_gpio_in(DEVICE(cpu), + } else { + qdev_connect_gpio_out_named(dev, NULL, i, + qdev_get_gpio_in(DEVICE(cpu), IRQ_LOCAL_MAX + i - 1)); + } } } From patchwork Mon Feb 24 02:57:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yong-Xuan Wang X-Patchwork-Id: 13987368 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 87CC4C021B2 for ; Mon, 24 Feb 2025 02:58:58 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tmOfK-0000qv-9r; Sun, 23 Feb 2025 21:57:54 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tmOfE-0000og-DC for qemu-devel@nongnu.org; Sun, 23 Feb 2025 21:57:50 -0500 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tmOfC-0001A2-AS for qemu-devel@nongnu.org; Sun, 23 Feb 2025 21:57:47 -0500 Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-220c4159f87so52511555ad.0 for ; Sun, 23 Feb 2025 18:57:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1740365864; x=1740970664; darn=nongnu.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=bFiHejFbGdbLneg1PMfRNsRHZmY62voLe0kDtLpm8UU=; b=cSB+T8F1MBI1a4rGfb8VQfQPm+i8Fxr5RDeNWZjDRSbtU7yju+gt0hiuvk13ALjPRK yJJHaTz+n+/EH8+hn/JHw2sUbaBIjNLcsFswQTKy5eGGu/oKuIqPCmkRY2fYgGpMqMuO fVpe8S6mLbOYC23YS2FT534C1OC8dlA++nsb5EJ6Kff8h5Yn8ezeyon9AmmOkspAwGkY MlTprNrvZ6uGj52vjJD6XIKeyjnrn6OE4ho5JY/HcFilmijD6fgG83LIj5pzTpqmCZJS DSEtHyOcwCRnSvqWOojNKdwS1OVFEsaa1j+l0E0k+cywbShKGIWpGDSKO1c4/0tRXXGr R++w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740365864; x=1740970664; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=bFiHejFbGdbLneg1PMfRNsRHZmY62voLe0kDtLpm8UU=; b=JTL3XlFcitHx5GHaInyf2y34ruFYib2/uFCIrtyHWwJTHvLjRsrlhT2iMzLGe4h9cs nhYjCXFq7IQaKYU2mcRFyvyTya9Xvm8kWEZ/wIR+W7ejieRPtGVa4luPGL9nfu9cL4mv m/qnEDpQjehc9x/EgMwyUA/FBB35QVEniTzf7FHRhaJVuvJDEJoq5zRV3XKRYbnHY+Vg RBkAoVsAFqBBmuX7CrPcC2/DYbs+gEiSPVT6X9WCK9yW864u64C3ZC5Ks1rhAgZ5j6kR M5cUfdabcbnfdHkQX/AZ2nm5YYi5ud9Y3CQS0hyIg1qJwE/sQFfV3ZzN3HHWb8tdR2Xi iIqA== X-Gm-Message-State: AOJu0YwwIHVVOVBhwYeHWDILQ2tt8Wpdlx3yAJdFlGeEeQoVFKQGnyij D6D5BWKPvlVrHck+g4YBUh/tKQzLfVG/nT9zEa0ggr9fx/wNtSD5yfXGlGZkJQ0QySJCiF7pXen Uoxw7GwrOPy9CGS7GJAW+zGsZ++V0VYFGfooXfi9dBrNWvRAxvSECZiIOOqy/QQGoKaQt1M5sod rQ/TXy5DYuLb+7Ew7A0VMFxhsZOuUDKNr4SkLaJhBjjQ== X-Gm-Gg: ASbGnctsoHsIJgFJmhvG1+GvCvu5mKQdFu4Qn1hU4U4ueX59meN/7kcouFE6bszG4kK 1Lyzb0EjiticdRIHvjbi+1T4CoDqJSPwfkgGB67cjWX3P6CfGmU4Se5f0CBNrpjCbXgaN99xQN1 5pceG1uT/YBXMibv/sxEsxZHy6X9xyPueXNBHe8wDuopyQHrCMx0c8/gJJcQ4z3aqWM8XKp8YEu tR7KrHApXzWU6sX1vJKrfNv3E64Updd0bGLdubALbKbQwyDEEYzduAyxjNwnPB6nmDNeQEs5dOU fO9jB81H44w8jWaj0tJ1KfPytMq7VOxxk7eLtsr2Vw1KA7ojOnVJs44a X-Google-Smtp-Source: AGHT+IEuT95L670KejSIr7xKuMc3nv+d93LmpYKidJ3/LNcSnFG2A8WJYcFiBHy0bHT9wVRLWg6S9w== X-Received: by 2002:a17:902:ea08:b0:21f:85d0:828 with SMTP id d9443c01a7336-2219ffa36c6mr220846915ad.41.1740365864232; Sun, 23 Feb 2025 18:57:44 -0800 (PST) Received: from hsinchu26.internal.sifive.com ([210.176.154.34]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d53490c2sm171660665ad.47.2025.02.23.18.57.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Feb 2025 18:57:43 -0800 (PST) From: Yong-Xuan Wang To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: greentime.hu@sifive.com, vincent.chen@sifive.com, frank.chang@sifive.com, jim.shu@sifive.com, Yong-Xuan Wang , Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei Subject: [PATCH v2 2/3] hw/intc/aplic: refine the APLIC realize Date: Mon, 24 Feb 2025 10:57:19 +0800 Message-Id: <20250224025722.3999-3-yongxuan.wang@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250224025722.3999-1-yongxuan.wang@sifive.com> References: <20250224025722.3999-1-yongxuan.wang@sifive.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::635; envelope-from=yongxuan.wang@sifive.com; helo=mail-pl1-x635.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, 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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org When the APLIC is emulated in the kernel, the GPIO output lines to CPUs can be remove. In this case the APLIC trigger CPU interrupts by KVM APIs. This patch also move the code that claim the CPU interrupts to the beginning of APLIC realization. This can avoid the unnecessary resource allocation before checking failed. Signed-off-by: Yong-Xuan Wang --- hw/intc/riscv_aplic.c | 49 +++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/hw/intc/riscv_aplic.c b/hw/intc/riscv_aplic.c index 0974c6a5db39..e5714267c096 100644 --- a/hw/intc/riscv_aplic.c +++ b/hw/intc/riscv_aplic.c @@ -893,6 +893,26 @@ static void riscv_aplic_realize(DeviceState *dev, Error **errp) RISCVAPLICState *aplic = RISCV_APLIC(dev); if (riscv_use_emulated_aplic(aplic->msimode)) { + /* Create output IRQ lines for non-MSI mode */ + if (!aplic->msimode) { + /* Claim the CPU interrupt to be triggered by this APLIC */ + for (i = 0; i < aplic->num_harts; i++) { + RISCVCPU *cpu; + + cpu = RISCV_CPU(cpu_by_arch_id(aplic->hartid_base + i)); + if (riscv_cpu_claim_interrupts(cpu, + (aplic->mmode) ? MIP_MEIP : MIP_SEIP) < 0) { + error_report("%s already claimed", + (aplic->mmode) ? "MEIP" : "SEIP"); + exit(1); + } + } + + aplic->external_irqs = g_malloc(sizeof(qemu_irq) * + aplic->num_harts); + qdev_init_gpio_out(dev, aplic->external_irqs, aplic->num_harts); + } + aplic->bitfield_words = (aplic->num_irqs + 31) >> 5; aplic->sourcecfg = g_new0(uint32_t, aplic->num_irqs); aplic->state = g_new0(uint32_t, aplic->num_irqs); @@ -927,23 +947,6 @@ static void riscv_aplic_realize(DeviceState *dev, Error **errp) } } - /* Create output IRQ lines for non-MSI mode */ - if (!aplic->msimode) { - aplic->external_irqs = g_malloc(sizeof(qemu_irq) * aplic->num_harts); - qdev_init_gpio_out(dev, aplic->external_irqs, aplic->num_harts); - - /* Claim the CPU interrupt to be triggered by this APLIC */ - for (i = 0; i < aplic->num_harts; i++) { - RISCVCPU *cpu = RISCV_CPU(cpu_by_arch_id(aplic->hartid_base + i)); - if (riscv_cpu_claim_interrupts(cpu, - (aplic->mmode) ? MIP_MEIP : MIP_SEIP) < 0) { - error_report("%s already claimed", - (aplic->mmode) ? "MEIP" : "SEIP"); - exit(1); - } - } - } - msi_nonbroken = true; } @@ -1067,15 +1070,15 @@ DeviceState *riscv_aplic_create(hwaddr addr, hwaddr size, if (riscv_use_emulated_aplic(msimode)) { sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, addr); - } - if (!msimode) { - for (i = 0; i < num_harts; i++) { - CPUState *cpu = cpu_by_arch_id(hartid_base + i); + if (!msimode) { + for (i = 0; i < num_harts; i++) { + CPUState *cpu = cpu_by_arch_id(hartid_base + i); - qdev_connect_gpio_out_named(dev, NULL, i, - qdev_get_gpio_in(DEVICE(cpu), + qdev_connect_gpio_out_named(dev, NULL, i, + qdev_get_gpio_in(DEVICE(cpu), (mmode) ? IRQ_M_EXT : IRQ_S_EXT)); + } } } From patchwork Mon Feb 24 02:57:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yong-Xuan Wang X-Patchwork-Id: 13987366 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 63CE7C021B3 for ; Mon, 24 Feb 2025 02:58:47 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tmOfN-0000v3-78; Sun, 23 Feb 2025 21:57:57 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tmOfI-0000qA-4M for qemu-devel@nongnu.org; Sun, 23 Feb 2025 21:57:52 -0500 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tmOfG-0001Ag-G3 for qemu-devel@nongnu.org; Sun, 23 Feb 2025 21:57:51 -0500 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-220c2a87378so64625755ad.1 for ; Sun, 23 Feb 2025 18:57:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1740365868; x=1740970668; darn=nongnu.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=rsbbdzwUTIdz+SJN+vwMzPlK/Tfp1AKNRLi4ZEU2WTU=; b=k7AZMdk7dlI9RI3g+M7s5WTDd1s7KxU6wYN/ofZC/PWptYKyfBnRq/uKvX5qCHeZRF cO5L4gb9Zl/ARuIGjZYjji5Qc3+/5TQOsrRU2oRreR1x2pJstNuMwncZ4llkhxT+C2fk mBvc/KMinWFccgi8nlixRZH5Tz2ogDa+ZzRDpr5A1CpIPXduFKNdZ7YEdTAmkKKuEpfv Vy3GyJhu2HFc1g8tc8f5Fl/jEMKHklq40ZaQZ5B85QMYp352md14/6w5Vs5bkhWDTIib 514JemNmrckAFicxoZRLZctNRTIljIVS91qmm0uc/BCR+V7lO3Bd+0rekGIiAoEuVKRx a49w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740365868; x=1740970668; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=rsbbdzwUTIdz+SJN+vwMzPlK/Tfp1AKNRLi4ZEU2WTU=; b=j/9M0BrJ8160QmDIRupqOOlRK/pHN6NuA6PCvjIRWOtP4KNVma0ASGZlj+PqWa6Aqj 31DxonvxyQvG/Gxth7s2nXtfvuPWGvhsPpI+6Cwj8IzYMG78DQF5+KyyrLjlnjaiftt0 a0HX7+1gJLVTJwYMBH37dkmxNO4wxidAl9MkXuWgYfLajwOhMflgLMvRco1zBRMdYQH9 dXbOdhI0M7hqp7yGpSGWI94pyrkWaLz6CBzARu9BspvQpHXqzrRcP90cIAlLKNTLET34 CZ0uMuEJideJ6stUYS6afl1aTLVVydgfiOeuRfZS0ze4OPfBU6IlpSr7AxSHkouaGYX7 y0dQ== X-Gm-Message-State: AOJu0YywV0ctLr+3YIvuxY4vfryQDAEEm21cRlXI6qNRLTK5krv1dO73 XKsy9MqXbhiLkaq89Xvtv4GrnNqc46uabNGOr5BnQDDZxdYwm8EW5Ay4lydjkOypr0A3SddkZ/w Szi4S5rwcZdLVWweUusB70GIAmZaSNMkryM78JFSVibLNRsuJMpbRIujzgyEITRzjBRrb+ShLtN IfyoNyI61EedHruML5y8bw1j6RTEPJengSPCFmWJpwzA== X-Gm-Gg: ASbGncssYLY3ZqGcoOp4t+Rro9k6nIT7tsMz1bmZW2SOMj1pQnktLWKj5PXB59uL8OE zb62e1WIBzVK9ax1SgPuqjFJWBEvNjfuJFzCk8fBBmRn+zj0I55Qpf7swcCcM9pbnzAuoAVu4mE jqmdBawNr5NKpQZDZqB/VsaQPNAuWIy63WMWYtvn3m+pwpdjrCXprzQS7T3GHfpn0dPFsYTqccS 2qoWtkCTTjnD3vlF/fc3lyXDSyKlproKfY+ceFpkjNI3HZy8R+m4XrnVG/XeSOMFablx1CHP90P 0HqiVm/EBDOhb90cq62BIUUWef5MA6JfaE0at6kXvSEQw5CtmpiewyJr X-Google-Smtp-Source: AGHT+IEJCX5vZgveq7Has+i5og/h67WkggkqDWIC04MnputBAxFU0ihYbpFtgL0l3UTVbqnik8wgaw== X-Received: by 2002:a17:902:ccc2:b0:220:c113:714e with SMTP id d9443c01a7336-221a10ea4fbmr167667815ad.21.1740365868437; Sun, 23 Feb 2025 18:57:48 -0800 (PST) Received: from hsinchu26.internal.sifive.com ([210.176.154.34]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d53490c2sm171660665ad.47.2025.02.23.18.57.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Feb 2025 18:57:48 -0800 (PST) From: Yong-Xuan Wang To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Cc: greentime.hu@sifive.com, vincent.chen@sifive.com, frank.chang@sifive.com, jim.shu@sifive.com, Yong-Xuan Wang , Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei Subject: [PATCH v2 3/3] hw/intc/aplic: refine kvm_msicfgaddr Date: Mon, 24 Feb 2025 10:57:20 +0800 Message-Id: <20250224025722.3999-4-yongxuan.wang@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250224025722.3999-1-yongxuan.wang@sifive.com> References: <20250224025722.3999-1-yongxuan.wang@sifive.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::633; envelope-from=yongxuan.wang@sifive.com; helo=mail-pl1-x633.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, 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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Let kvm_msicfgaddr use the same format with mmsicfgaddr and smsicfgaddr. Signed-off-by: Yong-Xuan Wang --- hw/intc/riscv_aplic.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/hw/intc/riscv_aplic.c b/hw/intc/riscv_aplic.c index e5714267c096..5964cde7e09e 100644 --- a/hw/intc/riscv_aplic.c +++ b/hw/intc/riscv_aplic.c @@ -181,8 +181,10 @@ void riscv_aplic_set_kvm_msicfgaddr(RISCVAPLICState *aplic, hwaddr addr) { #ifdef CONFIG_KVM if (riscv_use_emulated_aplic(aplic->msimode)) { + addr >>= APLIC_xMSICFGADDR_PPN_SHIFT; aplic->kvm_msicfgaddr = extract64(addr, 0, 32); - aplic->kvm_msicfgaddrH = extract64(addr, 32, 32); + aplic->kvm_msicfgaddrH = extract64(addr, 32, 32) & + APLIC_xMSICFGADDRH_VALID_MASK; } #endif } @@ -403,12 +405,17 @@ static void riscv_aplic_msi_send(RISCVAPLICState *aplic, } } - if (aplic->mmode) { - msicfgaddr = aplic_m->mmsicfgaddr; - msicfgaddrH = aplic_m->mmsicfgaddrH; + if (aplic->kvm_splitmode) { + msicfgaddr = aplic->kvm_msicfgaddr; + msicfgaddrH = ((uint64_t)aplic->kvm_msicfgaddrH << 32); } else { - msicfgaddr = aplic_m->smsicfgaddr; - msicfgaddrH = aplic_m->smsicfgaddrH; + if (aplic->mmode) { + msicfgaddr = aplic_m->mmsicfgaddr; + msicfgaddrH = aplic_m->mmsicfgaddrH; + } else { + msicfgaddr = aplic_m->smsicfgaddr; + msicfgaddrH = aplic_m->smsicfgaddrH; + } } lhxs = (msicfgaddrH >> APLIC_xMSICFGADDRH_LHXS_SHIFT) & @@ -431,11 +438,6 @@ static void riscv_aplic_msi_send(RISCVAPLICState *aplic, addr |= (uint64_t)(guest_idx & APLIC_xMSICFGADDR_PPN_HART(lhxs)); addr <<= APLIC_xMSICFGADDR_PPN_SHIFT; - if (aplic->kvm_splitmode) { - addr |= aplic->kvm_msicfgaddr; - addr |= ((uint64_t)aplic->kvm_msicfgaddrH << 32); - } - address_space_stl_le(&address_space_memory, addr, eiid, MEMTXATTRS_UNSPECIFIED, &result); if (result != MEMTX_OK) {