From nobody Wed Apr 9 04:55:02 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 173552253455214.937416260693908; Sun, 29 Dec 2024 17:35:34 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tS4fg-0004V4-3G; Sun, 29 Dec 2024 20:34:16 -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 1tS4fd-0004Te-8t for qemu-devel@nongnu.org; Sun, 29 Dec 2024 20:34:13 -0500 Received: from mail.loongson.cn ([114.242.206.163]) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tS4fa-0003dc-I9 for qemu-devel@nongnu.org; Sun, 29 Dec 2024 20:34:13 -0500 Received: from loongson.cn (unknown [10.2.5.213]) by gateway (Coremail) with SMTP id _____8DxGeCL+HFn_p9bAA--.48602S3; Mon, 30 Dec 2024 09:34:03 +0800 (CST) Received: from localhost.localdomain (unknown [10.2.5.213]) by front1 (Coremail) with SMTP id qMiowMAxfcWJ+HFnrEUNAA--.2779S4; Mon, 30 Dec 2024 09:34:03 +0800 (CST) From: Bibo Mao To: Song Gao , Huacai Chen Cc: Jiaxun Yang , Igor Mammedov , qemu-devel@nongnu.org Subject: [PATCH v2 2/5] hw/intc/loongarch_ipi: Add basic hotplug framework Date: Mon, 30 Dec 2024 09:33:58 +0800 Message-Id: <20241230013401.1564827-3-maobibo@loongson.cn> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20241230013401.1564827-1-maobibo@loongson.cn> References: <20241230013401.1564827-1-maobibo@loongson.cn> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: qMiowMAxfcWJ+HFnrEUNAA--.2779S4 X-CM-SenderInfo: xpdruxter6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7 ZEXasCq-sGcSsGvfJ3UbIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnUUvcSsGvfC2Kfnx nUUI43ZEXa7xR_UUUUUUUUU== 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=lists.gnu.org; Received-SPF: pass client-ip=114.242.206.163; envelope-from=maobibo@loongson.cn; helo=mail.loongson.cn X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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: 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-ZM-MESSAGEID: 1735522536408116600 Content-Type: text/plain; charset="utf-8" LoongArch ipi can send interrupt to multiple CPUs, interrupt routing to CPU comes from destination physical cpu id. Here hotplug interface is added for IPI object, sot that logic cpu mapping from physical cpu id can be setup. Here only basic hotplug framework is added, it is stub function. Signed-off-by: Bibo Mao --- hw/intc/loongarch_ipi.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/hw/intc/loongarch_ipi.c b/hw/intc/loongarch_ipi.c index c5ecd68952..7ea65bcef3 100644 --- a/hw/intc/loongarch_ipi.c +++ b/hw/intc/loongarch_ipi.c @@ -7,6 +7,7 @@ =20 #include "qemu/osdep.h" #include "hw/boards.h" +#include "qemu/error-report.h" #include "hw/intc/loongarch_ipi.h" #include "target/loongarch/cpu.h" =20 @@ -60,12 +61,39 @@ static int loongarch_cpu_by_arch_id(LoongsonIPICommonSt= ate *lics, return MEMTX_ERROR; } =20 +static void loongarch_cpu_plug(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + Object *obj =3D OBJECT(dev); + + if (!object_dynamic_cast(obj, TYPE_LOONGARCH_CPU)) { + warn_report("LoongArch IPI: Invalid %s device type", + object_get_typename(obj)); + return; + } +} + +static void loongarch_cpu_unplug(HotplugHandler *hotplug_dev, + DeviceState *dev, Error **errp) +{ + Object *obj =3D OBJECT(dev); + + if (!object_dynamic_cast(obj, TYPE_LOONGARCH_CPU)) { + warn_report("LoongArch IPI: Invalid %s device type", + object_get_typename(obj)); + return; + } +} + static void loongarch_ipi_class_init(ObjectClass *klass, void *data) { LoongsonIPICommonClass *licc =3D LOONGSON_IPI_COMMON_CLASS(klass); + HotplugHandlerClass *hc =3D HOTPLUG_HANDLER_CLASS(klass); =20 licc->get_iocsr_as =3D get_iocsr_as; licc->cpu_by_arch_id =3D loongarch_cpu_by_arch_id; + hc->plug =3D loongarch_cpu_plug; + hc->unplug =3D loongarch_cpu_unplug; } =20 static const TypeInfo loongarch_ipi_types[] =3D { @@ -73,6 +101,10 @@ static const TypeInfo loongarch_ipi_types[] =3D { .name =3D TYPE_LOONGARCH_IPI, .parent =3D TYPE_LOONGSON_IPI_COMMON, .class_init =3D loongarch_ipi_class_init, + .interfaces =3D (InterfaceInfo[]) { + { TYPE_HOTPLUG_HANDLER }, + { } + } } }; =20 --=20 2.39.3