From patchwork Mon Oct 30 14:39:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Patchwork-Id: 1857153 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256 header.s=google header.b=AL6U92Ku; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SJww11nX9z1yQb for ; Tue, 31 Oct 2023 01:42:09 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qxTRI-0001Oq-Ut; Mon, 30 Oct 2023 10:40:24 -0400 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 1qxTRG-0001OC-O9 for qemu-devel@nongnu.org; Mon, 30 Oct 2023 10:40:22 -0400 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qxTR9-0001mf-G7 for qemu-devel@nongnu.org; Mon, 30 Oct 2023 10:40:22 -0400 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-4079ed65582so33318535e9.1 for ; Mon, 30 Oct 2023 07:40:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1698676808; x=1699281608; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=k6siaLDPN7rSUcCidjmSdujoZ1Clu6ak+uuvWhAfvmw=; b=AL6U92Kutol4J+wa3wAIFluDUGyz6apXLR542dFacd/PZZJOOixnspwIBfGo2AjB5V PurkAjC4HIFtigzycQz0QslPyOEZKzXorsvn4kWq8bRH14mXrcTqe0KURmLFI14/oPsP hFGkRR6ukWPRDAxVsEzx62G8pdlsB2liDsDa15yUTriCVbH7zHtsL/xPczZAJSGJ5waO CCIojWqsozvSm8XS+q3feDDJUcVq9eSdTT7kAdOERmQ3PxTjLttpRHhC4ltxi1TaTl2h jESlYgVl47RrVrjRh3R+ZSm5Fzpj1FU6nXxyhe9a9MGYsQU6zOi8KTYmN6q1fr1ro6fZ sCaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698676808; x=1699281608; h=content-transfer-encoding:mime-version: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=k6siaLDPN7rSUcCidjmSdujoZ1Clu6ak+uuvWhAfvmw=; b=eb7txxUt/VDapPSllYi8TnNn2h77QUxD4J4mzz+ZI7q83T47CUzdWf6cNYGVe/QwD9 t2VqHy75/E3aZav/zABjo3pA9z2ZU8jGjETCzHPPXxbQB581RSD1No0XT2qTuDggTY8w qgpMDyB4onx1vHz3xsiYSOdaZl7WB7VVowByNbkdFul/9ArhbNRRIrhFpMyMUApqDaRq 2Huw6TPnJ8qIsOVMgwWfvDckSux99Ei9elQqt0a06r0/7lJ49FX/DM6MW7EkJ7e/b9X8 LfPTqdWnFoOgOix6M/FHImbQUMxXZg47MWmaOoV5joAJpwGNzpCU6lZrRB3y7K7/TdEY QFfA== X-Gm-Message-State: AOJu0YyQkgvTdyVwofvFM75xnhXVJWlfvXAhYbPiIZIOcTnqjH3Cn2DS 8nJibboPr4VlYkscxpi54nINOW/gK521UNbeCs4= X-Google-Smtp-Source: AGHT+IEN1tC7QqL+vvg0htfcj01AzEW/xTlNdfksFtZAlrrQUX0XcOeSfEcP/xGD7BuUuisxF7KARw== X-Received: by 2002:a05:600c:3b20:b0:407:612b:91fb with SMTP id m32-20020a05600c3b2000b00407612b91fbmr8013575wms.30.1698676808504; Mon, 30 Oct 2023 07:40:08 -0700 (PDT) Received: from m1x-phil.lan ([176.170.212.50]) by smtp.gmail.com with ESMTPSA id bg9-20020a05600c3c8900b004063cd8105csm13009491wmb.22.2023.10.30.07.40.06 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 30 Oct 2023 07:40:08 -0700 (PDT) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org, Peter Maydell , Markus Armbruster Cc: Luc Michel , Daniel Henrique Barboza , Alistair Francis , Paolo Bonzini , Eduardo Habkost , Mark Cave-Ayland , Bernhard Beschow , qemu-ppc@nongnu.org, "Edgar E . Iglesias" , "Daniel P . Berrange" , Thomas Huth , Kevin Wolf , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Subject: [PATCH 1/5] qdev: Add qdev_prop_set_array() Date: Mon, 30 Oct 2023 15:39:52 +0100 Message-ID: <20231030143957.82988-2-philmd@linaro.org> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231030143957.82988-1-philmd@linaro.org> References: <20231030143957.82988-1-philmd@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::336; envelope-from=philmd@linaro.org; helo=mail-wm1-x336.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+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Kevin Wolf Instead of exposing the ugly hack of how we represent arrays in qdev (a static "foo-len" property and after it is set, dynamically created "foo[i]" properties) to boards, add an interface that allows setting the whole array at once. Once all internal users of devices with array properties have been converted to use this function, we can change the implementation to move away from this hack. Signed-off-by: Kevin Wolf Reviewed-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Peter Maydell Tested-by: Philippe Mathieu-Daudé Message-ID: <20231030114802.3671871-4-peter.maydell@linaro.org> Signed-off-by: Philippe Mathieu-Daudé --- include/hw/qdev-properties.h | 3 +++ hw/core/qdev-properties.c | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h index e1df08876c..7fa2fdb7c9 100644 --- a/include/hw/qdev-properties.h +++ b/include/hw/qdev-properties.h @@ -206,6 +206,9 @@ void qdev_prop_set_macaddr(DeviceState *dev, const char *name, const uint8_t *value); void qdev_prop_set_enum(DeviceState *dev, const char *name, int value); +/* Takes ownership of @values */ +void qdev_prop_set_array(DeviceState *dev, const char *name, QList *values); + void *object_field_prop_ptr(Object *obj, Property *prop); void qdev_prop_register_global(GlobalProperty *prop); diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c index 357b8761b5..950ef48e01 100644 --- a/hw/core/qdev-properties.c +++ b/hw/core/qdev-properties.c @@ -3,12 +3,14 @@ #include "qapi/error.h" #include "qapi/qapi-types-misc.h" #include "qapi/qmp/qerror.h" +#include "qapi/qmp/qlist.h" #include "qemu/ctype.h" #include "qemu/error-report.h" #include "qapi/visitor.h" #include "qemu/units.h" #include "qemu/cutils.h" #include "qdev-prop-internal.h" +#include "qom/qom-qobject.h" void qdev_prop_set_after_realize(DeviceState *dev, const char *name, Error **errp) @@ -739,6 +741,25 @@ void qdev_prop_set_enum(DeviceState *dev, const char *name, int value) &error_abort); } +void qdev_prop_set_array(DeviceState *dev, const char *name, QList *values) +{ + const QListEntry *entry; + g_autofree char *prop_len = g_strdup_printf("len-%s", name); + uint32_t i = 0; + + object_property_set_int(OBJECT(dev), prop_len, qlist_size(values), + &error_abort); + + QLIST_FOREACH_ENTRY(values, entry) { + g_autofree char *prop_idx = g_strdup_printf("%s[%u]", name, i); + object_property_set_qobject(OBJECT(dev), prop_idx, entry->value, + &error_abort); + i++; + } + + qobject_unref(values); +} + static GPtrArray *global_props(void) { static GPtrArray *gp; From patchwork Mon Oct 30 14:39:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Patchwork-Id: 1857144 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256 header.s=google header.b=m94c3oL4; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SJwtl1Xxjz1yQW for ; Tue, 31 Oct 2023 01:41:03 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qxTRL-0001PY-9L; Mon, 30 Oct 2023 10:40:27 -0400 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 1qxTRK-0001PH-3I for qemu-devel@nongnu.org; Mon, 30 Oct 2023 10:40:26 -0400 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qxTRC-0001nc-3g for qemu-devel@nongnu.org; Mon, 30 Oct 2023 10:40:25 -0400 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-4083cd3917eso35863205e9.3 for ; Mon, 30 Oct 2023 07:40:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1698676815; x=1699281615; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=I7ToXfUjeHh4GxTtDabuQxd+6LNHtLDODSscY/4+OEc=; b=m94c3oL4/LntiFxMjuRMRaKE0tv/HEIqFav9i8c8rEzauMy5d8tsoC3Gl8MdBTBy6J 1Fcyv+/5UuL3E1g027oIuUW4vK4i7i4J68bYk3JHuhSzhLQX0BA7OrkYybGbEis07rB6 cVckVawLIa+TOMLhI9EiuNF/5s1TwqmBkUnbTuBjlH/uCvuEl8HBStcT6HKYqH0LqAt6 W76TvXzUip4PvsSFoQkhqz4I+e8n2UihDP8/Jr7TNeG8ij19aT+I4xp9bFS76i/MAxBu 7NH5fFQmpTKI/EgTJKvo3UxtcLPMdfz+TKMyGxL6YixUThNceNbhWa79Kh8FpWg4vfm3 Z8AA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698676815; x=1699281615; h=content-transfer-encoding:mime-version: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=I7ToXfUjeHh4GxTtDabuQxd+6LNHtLDODSscY/4+OEc=; b=AMZT6VR/a0X/UejeANTHWKHptS4V+ZJKo0Rxwhb1sqMLDkH7lDjsUwyKHAKdBLVt+J fV6taoYyPQLCn/PfFp/Ulx6nIPf5DgwzAIm8rkDBJw3MWTIEGHU9EZ81twrm1tom8VSD ar6zP8AG86Q1OYRmQbq2K9WFbOzcLTTOrWLEN3UyAqYYcFCKq1WmugiHiAvJI8N3DgyL 7dIahskcpYCD4E6Lz5pRGTKwwyJQ6SJ04ngwes4RYv7aMhm81hpJ9g88D/deLUaOM7K/ KRJgVElMU3McEN/cskgaAGCyKw+gaWLrl6HnItydfvLzFdTvrWWDkksky9zscffkLXjh bwxw== X-Gm-Message-State: AOJu0YydtPoHzC5/gDUs0u7L7OFXJHNuTg0bAnPDfuu26ltw5PiZ86OE oZdRfHu+APX0YtSKWxqeskB8ZN2lH2yjo3p9/To= X-Google-Smtp-Source: AGHT+IEGTxn+ensEM5LebpXAKGauCyjliAphk7/jKhc8hoeQI2t3NWapb2OBWjZXSXdLqxGDCfjKCQ== X-Received: by 2002:a05:600c:3ba5:b0:408:cd96:7179 with SMTP id n37-20020a05600c3ba500b00408cd967179mr8734464wms.9.1698676815397; Mon, 30 Oct 2023 07:40:15 -0700 (PDT) Received: from m1x-phil.lan ([176.170.212.50]) by smtp.gmail.com with ESMTPSA id n41-20020a05600c3ba900b004060f0a0fdbsm13029498wms.41.2023.10.30.07.40.13 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 30 Oct 2023 07:40:15 -0700 (PDT) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org, Peter Maydell , Markus Armbruster Cc: Luc Michel , Daniel Henrique Barboza , Alistair Francis , Paolo Bonzini , Eduardo Habkost , Mark Cave-Ayland , Bernhard Beschow , qemu-ppc@nongnu.org, "Edgar E . Iglesias" , "Daniel P . Berrange" , Thomas Huth , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Subject: [PATCH 2/5] hw/ppc/e500: Declare CPU QOM types using DEFINE_TYPES() macro Date: Mon, 30 Oct 2023 15:39:53 +0100 Message-ID: <20231030143957.82988-3-philmd@linaro.org> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231030143957.82988-1-philmd@linaro.org> References: <20231030143957.82988-1-philmd@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::32f; envelope-from=philmd@linaro.org; helo=mail-wm1-x32f.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+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org When multiple QOM types are registered in the same file, it is simpler to use the the DEFINE_TYPES() macro. In particular because type array declared with such macro are easier to review. Signed-off-by: Philippe Mathieu-Daudé Reviewed-by: Daniel Henrique Barboza --- I'm going to do that for each file I modify, so eventually we'll get all converted. --- hw/ppc/ppce500_spin.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/hw/ppc/ppce500_spin.c b/hw/ppc/ppce500_spin.c index bbce63e8a4..e3608d8c16 100644 --- a/hw/ppc/ppce500_spin.c +++ b/hw/ppc/ppce500_spin.c @@ -195,17 +195,14 @@ static void ppce500_spin_class_init(ObjectClass *klass, void *data) dc->reset = spin_reset; } -static const TypeInfo ppce500_spin_info = { - .name = TYPE_E500_SPIN, - .parent = TYPE_SYS_BUS_DEVICE, - .instance_size = sizeof(SpinState), - .instance_init = ppce500_spin_initfn, - .class_init = ppce500_spin_class_init, +static const TypeInfo ppce500_spin_types[] = { + { + .name = TYPE_E500_SPIN, + .parent = TYPE_SYS_BUS_DEVICE, + .instance_size = sizeof(SpinState), + .instance_init = ppce500_spin_initfn, + .class_init = ppce500_spin_class_init, + }, }; -static void ppce500_spin_register_types(void) -{ - type_register_static(&ppce500_spin_info); -} - -type_init(ppce500_spin_register_types) +DEFINE_TYPES(ppce500_spin_types) From patchwork Mon Oct 30 14:39:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Patchwork-Id: 1857143 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256 header.s=google header.b=ECN+3hdz; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SJwtL3sDgz1yQW for ; Tue, 31 Oct 2023 01:40:42 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qxTRN-0001Ql-Pd; Mon, 30 Oct 2023 10:40:30 -0400 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 1qxTRM-0001Q3-2J for qemu-devel@nongnu.org; Mon, 30 Oct 2023 10:40:28 -0400 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qxTRI-0001rj-0o for qemu-devel@nongnu.org; Mon, 30 Oct 2023 10:40:27 -0400 Received: by mail-wr1-x434.google.com with SMTP id ffacd0b85a97d-32dd70c5401so2899795f8f.0 for ; Mon, 30 Oct 2023 07:40:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1698676822; x=1699281622; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=WuUDSxKsXjW5GqbYcOSHq6FGSIjG2WuDJO98unbaNSY=; b=ECN+3hdzxG0XZXghgcaW6l+ubgl6vF4/juo3MD1UEoMrlrSoqe1arnPilvG6CCabV9 JCR92tIEr5TWXjlH9aYioNF1CuhP+DYOhAZRrAkxN2JXd7rxFtSP1UJObqYXeSO3TjI0 s8/Etkl+CvsWIw7R6gIF3fE3ex6q+FxB/xy/pU0H1H9m7iYNS0kbp8CyfTv9kKG13JqX K5RCMprtDe60XZ3S1Go1I4dHZEUkC4BX9hlEEL/o30q4UU1So/qZhN3ekOirHlLCJZiy Pg0R6BBNRpdzCUiu5f1q/HxIRZLf50NszuN09botlR4ZFB4w2nS5RllIMGWqjBBl9VUd 6x5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698676822; x=1699281622; h=content-transfer-encoding:mime-version: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=WuUDSxKsXjW5GqbYcOSHq6FGSIjG2WuDJO98unbaNSY=; b=wewVve0pOa/PD8qmi71CJqN1oy4PninIOdx388Hoxbv0yhVyOksRBVlYEk3d6iHSaX xgMUSTaVz7I5UUKyBRpExFeIdaxvn9OZodDblFriY5Pme6pgos9QtaO3QGZxS6VVvxpQ QQA2aP87dLH1Klgb3iY5SPqRGA/J7Bilrg5m/kMM5Xyn9fYDwaqcOmThIubfrfxeQFdp Omi7PmJ5udQSa9Mbb0zM9Zvz/yA9gDYq+BVeYcOlS+MDjbgM/jVdfqyjJh8ZEtnci13o K+JVAAqtR88qsZjOwf9GZ2Q149Iyz9PGOwgLX5G8AsPCLFEZT8OdWQ2UmY3TIjyTgxEJ W7uA== X-Gm-Message-State: AOJu0Yyi5D/HxPur37vZd5S4+v1OZtkVK49XBmUvp+6j6b89x5zOSUDa hyEH/3mRfrIRlrYKOMxmKm2dG2zo9VcJtiL8DUY= X-Google-Smtp-Source: AGHT+IH8uNdiGnD6SclQ4UDCtGupHzAS3OCWKZ9YgQ6aDLexQHapei0d+FkCiYahJ1M/KNQybJMltg== X-Received: by 2002:adf:f948:0:b0:32d:a243:a30e with SMTP id q8-20020adff948000000b0032da243a30emr6832983wrr.1.1698676822383; Mon, 30 Oct 2023 07:40:22 -0700 (PDT) Received: from m1x-phil.lan ([176.170.212.50]) by smtp.gmail.com with ESMTPSA id j8-20020a5d4528000000b0032f7c563ffasm5790158wra.36.2023.10.30.07.40.20 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 30 Oct 2023 07:40:22 -0700 (PDT) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org, Peter Maydell , Markus Armbruster Cc: Luc Michel , Daniel Henrique Barboza , Alistair Francis , Paolo Bonzini , Eduardo Habkost , Mark Cave-Ayland , Bernhard Beschow , qemu-ppc@nongnu.org, "Edgar E . Iglesias" , "Daniel P . Berrange" , Thomas Huth , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Subject: [PATCH 3/5] hw/ppc/e500: QOM-attach CPUs to the machine container Date: Mon, 30 Oct 2023 15:39:54 +0100 Message-ID: <20231030143957.82988-4-philmd@linaro.org> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231030143957.82988-1-philmd@linaro.org> References: <20231030143957.82988-1-philmd@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::434; envelope-from=philmd@linaro.org; helo=mail-wr1-x434.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=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+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Instead of having CPUs dangling in the /unattached/device bucket, attach them to the machine container. Signed-off-by: Philippe Mathieu-Daudé Reviewed-by: Daniel Henrique Barboza --- hw/ppc/e500.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c index e04114fb3c..f8177c0280 100644 --- a/hw/ppc/e500.c +++ b/hw/ppc/e500.c @@ -946,6 +946,7 @@ void ppce500_init(MachineState *machine) exit(1); } + object_property_add_child(OBJECT(machine), "cpu[*]", OBJECT(cs)); /* * Secondary CPU starts in halted state for now. Needs to change * when implementing non-kernel boot. From patchwork Mon Oct 30 14:39:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Patchwork-Id: 1857150 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256 header.s=google header.b=l9XFofqY; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SJwvT3ctnz1yQb for ; Tue, 31 Oct 2023 01:41:41 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qxTRa-0001XL-7L; Mon, 30 Oct 2023 10:40:42 -0400 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 1qxTRX-0001Tc-ST for qemu-devel@nongnu.org; Mon, 30 Oct 2023 10:40:39 -0400 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qxTRR-0001v3-0O for qemu-devel@nongnu.org; Mon, 30 Oct 2023 10:40:37 -0400 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-4083f613275so33237985e9.2 for ; Mon, 30 Oct 2023 07:40:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1698676829; x=1699281629; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=aVj8Lyu+q9x5vjJruURmWnURg8Bgtfz5nJe1rKfNnjc=; b=l9XFofqY40eX2o22JxQvvb7n/Y1zxtHMOabArZZXMpCsawGVBd0gzZdFGhziwba73s H76CYtofOX9dPmvEUjn2/vcra0cF8zBEOlWzEW+8S9KWjURhAWZSbJc3P/TwmVKh/aNj fG+iCl+GhdbpKeEZIHo1VMExfXQ7AoddZKTGAMumsbZRDGGYXwlhQlhOgC39BGp1wPf9 rNiazZ4YO/syIQsAJybezC/6Ll2WB30zz+IqSpMQ9F5cXVryJ/zgR5UGczTAFDGqxnhH CqKgvF9N3vNLxNwQa3LkcRwaKJqRqfeaXd2miol3hzy2r/RoYMnZb1dh2CVaqQis/0Fq zZSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698676829; x=1699281629; h=content-transfer-encoding:mime-version: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=aVj8Lyu+q9x5vjJruURmWnURg8Bgtfz5nJe1rKfNnjc=; b=rqec+RWj6o57dPrtvKF54prr6G6w5jvPEaFdRiyfa0IQD9jI5nwQ96Mte1KTSH1BLc mwaOHjXm4JCp88rtIQerxOVW2A7/HPp8p8ItHf4rvCpRzf9N9D7YUSkLGXZVwha7zxBA eOuQxZYKwoTRmlLInraaZsFeAWBovQ7Fgpm6rHC12bdzkrQQ0lKAsiNoJqPmt/KEV4f3 CvES87AnJ1ydZvOd49fGW9vWSq7QgbMAVMGL2jNkT7wGfF8ASsTvP/QCsVGLTom44ne4 Pix60dQBXnbpq+AYMfSCUc0GB++P4zeTn4omeDiEBXToerRCTxQTuQotHNpVrXMdn1W8 cDjw== X-Gm-Message-State: AOJu0YzD/rdHSTUBNguuJTYbwSsTy24SeAEtjIF85w2ZqpIr1Pr9gfIf WvbYCb2YlgJ+pktHq8p6qaDEUYUsbVgRsoDCtTA= X-Google-Smtp-Source: AGHT+IFyovKWaKgklMSqmOkM4ZOwVOwEtx3oRZP4ALic/VmmF4HYc/dmUWLdo9anjMf8cGZq9GAA1A== X-Received: by 2002:a05:600c:a0a:b0:405:3b1f:968b with SMTP id z10-20020a05600c0a0a00b004053b1f968bmr8835285wmp.21.1698676829437; Mon, 30 Oct 2023 07:40:29 -0700 (PDT) Received: from m1x-phil.lan ([176.170.212.50]) by smtp.gmail.com with ESMTPSA id r5-20020a05600c458500b004060f0a0fd5sm9314651wmo.13.2023.10.30.07.40.27 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 30 Oct 2023 07:40:29 -0700 (PDT) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org, Peter Maydell , Markus Armbruster Cc: Luc Michel , Daniel Henrique Barboza , Alistair Francis , Paolo Bonzini , Eduardo Habkost , Mark Cave-Ayland , Bernhard Beschow , qemu-ppc@nongnu.org, "Edgar E . Iglesias" , "Daniel P . Berrange" , Thomas Huth , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Subject: [PATCH 4/5] hw/ppc/e500: Inline sysbus_create_simple(E500_SPIN) Date: Mon, 30 Oct 2023 15:39:55 +0100 Message-ID: <20231030143957.82988-5-philmd@linaro.org> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231030143957.82988-1-philmd@linaro.org> References: <20231030143957.82988-1-philmd@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::32c; envelope-from=philmd@linaro.org; helo=mail-wm1-x32c.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, T_SPF_TEMPERROR=0.01 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org In the next commit we'll set properties to the TYPE_E500_SPIN object. In order to ease next commit review, inline the sysbus_create_simple() call first. Signed-off-by: Philippe Mathieu-Daudé Reviewed-by: Daniel Henrique Barboza --- hw/ppc/e500.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c index f8177c0280..e38f46df38 100644 --- a/hw/ppc/e500.c +++ b/hw/ppc/e500.c @@ -1082,7 +1082,9 @@ void ppce500_init(MachineState *machine) } /* Register spinning region */ - sysbus_create_simple("e500-spin", pmc->spin_base, NULL); + dev = qdev_new("e500-spin"); + sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, pmc->spin_base); if (pmc->has_mpc8xxx_gpio) { qemu_irq poweroff_irq; From patchwork Mon Oct 30 14:39:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Patchwork-Id: 1857149 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256 header.s=google header.b=cQnsIBwT; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SJwvS0899z1yQW for ; Tue, 31 Oct 2023 01:41:40 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qxTRc-0001Zi-AA; Mon, 30 Oct 2023 10:40:44 -0400 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 1qxTRZ-0001XO-GB for qemu-devel@nongnu.org; Mon, 30 Oct 2023 10:40:42 -0400 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qxTRW-0001vl-Ee for qemu-devel@nongnu.org; Mon, 30 Oct 2023 10:40:40 -0400 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-40842752c6eso35899315e9.1 for ; Mon, 30 Oct 2023 07:40:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1698676837; x=1699281637; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/nhttjW6fGHzpzQpigFGqu2RntvPUsap0hdm5++FEtY=; b=cQnsIBwTGOCL8PNbdaQcoUC7/0JGnA0D6wwfQ5IR4o27pKECWfSird8cAPSpmKdHpc +tNrerin0zl9f/nZRXF5y5N9pciqtlLdnU8l6th5XNwKeK1ZkZDXxNivltQMTzhuDk9Q ZSPgfcE6FNnU5m57gMFdKj1q6JxIJ7q7FyVAZDKZSjWsw57/unz0oHe3tBBif/EIUSM5 hAXeQATnnhehqhbHGkjr9b/wEjmppcy6BHpVZQFxeSfO+e52yeL7Xg1RYcBqYND93tty 1rIchvmCZPvyPYyYGX6CgYLVcfg/65bhPxlIZYFc5koVK9ctHLZCekfBwgzKwjmibDUG 6ehw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698676837; x=1699281637; h=content-transfer-encoding:mime-version: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=/nhttjW6fGHzpzQpigFGqu2RntvPUsap0hdm5++FEtY=; b=ffGNxi3YxwDauIIuDBFk7tooO4pJ693RRip9hFasnctiIP/tonVJcKFeo4IVgcOO6x 48OdN1oPXq4trSdFGQYO+V6qHooaQuln2sNfZigKpexyfso4F3XZstFwfmkJ56/yPUfi 6wbWKPSVbEMlWs+pfK/xUNi7Onchu1XjWQzxIGddvYcpZrsv0TfW/CllYALVZJAXxCBf 2nAexUyRgYrf+OoEaB5tMq8Wuz+p2LGLozWFOOK53RkZP4bL2Arn+BfiMZFE3zV6p39d jOLlpprOKTBjGNkp+NBHtlM72y3Q+njGsff9bbZkd4h40jAvUSCQRek4pVFAZwjnmf6A IJFg== X-Gm-Message-State: AOJu0YyGISUzZUzmMqyNcokDeBgAI8iYD1QDg4uG3QWUKOr/U+08xmJ0 s1LG6f8P4NsMf01tPzrVIc/H2K8Dmzj8LSJqF78= X-Google-Smtp-Source: AGHT+IGw9Zw4AVLpyPMNpYfQu9hgU/YdqWs9X0eAyGX2njs86nUMWzRYvqTUsWcSj4e5L7KzOkRn4w== X-Received: by 2002:a5d:4ccb:0:b0:32d:a0d9:2124 with SMTP id c11-20020a5d4ccb000000b0032da0d92124mr7575851wrt.35.1698676836704; Mon, 30 Oct 2023 07:40:36 -0700 (PDT) Received: from m1x-phil.lan ([176.170.212.50]) by smtp.gmail.com with ESMTPSA id z8-20020adfe548000000b0031c52e81490sm8432316wrm.72.2023.10.30.07.40.34 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 30 Oct 2023 07:40:36 -0700 (PDT) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org, Peter Maydell , Markus Armbruster Cc: Luc Michel , Daniel Henrique Barboza , Alistair Francis , Paolo Bonzini , Eduardo Habkost , Mark Cave-Ayland , Bernhard Beschow , qemu-ppc@nongnu.org, "Edgar E . Iglesias" , "Daniel P . Berrange" , Thomas Huth , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Subject: [RFC PATCH 5/5] hw/ppc/e500: Pass array of CPUs as array of canonical QOM paths Date: Mon, 30 Oct 2023 15:39:56 +0100 Message-ID: <20231030143957.82988-6-philmd@linaro.org> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231030143957.82988-1-philmd@linaro.org> References: <20231030143957.82988-1-philmd@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::331; envelope-from=philmd@linaro.org; helo=mail-wm1-x331.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=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+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Devices should avoid calling qemu_get_cpu() because this call doesn't work as expected with heterogeneous machines. Such devices often iterate over a cluster of CPUs, which the device's parent has direct access (when creating the child device). We can pass QOM as 'link' between objects, but we can't pass an array of links. Here we exploits QAPI simplicity, by using DEFINE_PROP_ARRAY and a list of strings, each string being the CPU canonical path in QOM tree (which is constant and unique). When the device realizes itself, the original CPU pointer is recovered via a object_resolve_path() call. Inspired-by: Peter Maydell Inspired-by: Markus Armbruster Signed-off-by: Philippe Mathieu-Daudé --- Tested with: $ make check-qtest-ppc{,64} $ make check-avocado AVOCADO_TAGS='machine:ppce500 machine:mpc8544ds' RFC: See cover FIXME: Should we free spin_cpu_list using g_autoptr(QList)? --- hw/ppc/e500.c | 6 ++++++ hw/ppc/ppce500_spin.c | 48 ++++++++++++++++++++++++++++++++++++------- 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c index e38f46df38..8b31143dca 100644 --- a/hw/ppc/e500.c +++ b/hw/ppc/e500.c @@ -18,6 +18,7 @@ #include "qemu/datadir.h" #include "qemu/units.h" #include "qemu/guest-random.h" +#include "qapi/qmp/qlist.h" #include "qapi/error.h" #include "e500.h" #include "e500-ccsr.h" @@ -930,11 +931,13 @@ void ppce500_init(MachineState *machine) SysBusDevice *s; PPCE500CCSRState *ccsr; I2CBus *i2c; + QList *spin_cpu_list = qlist_new(); irqs = g_new0(IrqLines, smp_cpus); for (i = 0; i < smp_cpus; i++) { PowerPCCPU *cpu; CPUState *cs; + g_autofree char *cpu_qompath; cpu = POWERPC_CPU(object_new(machine->cpu_type)); env = &cpu->env; @@ -954,6 +957,8 @@ void ppce500_init(MachineState *machine) object_property_set_bool(OBJECT(cs), "start-powered-off", i != 0, &error_fatal); qdev_realize_and_unref(DEVICE(cs), NULL, &error_fatal); + cpu_qompath = object_get_canonical_path(OBJECT(cs)); + qlist_append_str(spin_cpu_list, cpu_qompath); if (!firstenv) { firstenv = env; @@ -1083,6 +1088,7 @@ void ppce500_init(MachineState *machine) /* Register spinning region */ dev = qdev_new("e500-spin"); + qdev_prop_set_array(dev, "cpus-qom-path", spin_cpu_list); sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, pmc->spin_base); diff --git a/hw/ppc/ppce500_spin.c b/hw/ppc/ppce500_spin.c index e3608d8c16..a67046b2ea 100644 --- a/hw/ppc/ppce500_spin.c +++ b/hw/ppc/ppce500_spin.c @@ -30,11 +30,13 @@ #include "qemu/osdep.h" #include "qemu/module.h" #include "qemu/units.h" +#include "qapi/error.h" #include "hw/hw.h" #include "hw/sysbus.h" #include "sysemu/hw_accel.h" #include "e500.h" #include "qom/object.h" +#include "hw/qdev-properties.h" #define MAX_CPUS 32 @@ -46,6 +48,10 @@ typedef struct spin_info { uint64_t reserved; } QEMU_PACKED SpinInfo; +/* + * QEMU interface: + * + QOM array property "cpus-qom-path": QOM canonical path of each CPU. + */ #define TYPE_E500_SPIN "e500-spin" OBJECT_DECLARE_SIMPLE_TYPE(SpinState, E500_SPIN) @@ -54,6 +60,9 @@ struct SpinState { MemoryRegion iomem; SpinInfo spin[MAX_CPUS]; + uint32_t cpu_count; + char **cpu_canonical_path; + CPUState **cpu; }; static void spin_reset(DeviceState *dev) @@ -121,16 +130,10 @@ static void spin_write(void *opaque, hwaddr addr, uint64_t value, { SpinState *s = opaque; int env_idx = addr / sizeof(SpinInfo); - CPUState *cpu; + CPUState *cpu = s->cpu[env_idx]; SpinInfo *curspin = &s->spin[env_idx]; uint8_t *curspin_p = (uint8_t*)curspin; - cpu = qemu_get_cpu(env_idx); - if (cpu == NULL) { - /* Unknown CPU */ - return; - } - if (cpu->cpu_index == 0) { /* primary CPU doesn't spin */ return; @@ -188,11 +191,42 @@ static void ppce500_spin_initfn(Object *obj) sysbus_init_mmio(dev, &s->iomem); } +static void ppce500_spin_realize(DeviceState *dev, Error **errp) +{ + SpinState *s = E500_SPIN(dev); + + if (s->cpu_count == 0) { + error_setg(errp, "'cpus-qom-path' property array must be set"); + return; + } else if (s->cpu_count > MAX_CPUS) { + error_setg(errp, "at most %d CPUs are supported", MAX_CPUS); + return; + } + + s->cpu = g_new(CPUState *, s->cpu_count); + for (unsigned i = 0; i < s->cpu_count; i++) { + bool ambiguous; + Object *obj; + + obj = object_resolve_path(s->cpu_canonical_path[i], &ambiguous); + assert(!ambiguous); + s->cpu[i] = CPU(obj); + } +} + +static Property ppce500_spin_properties[] = { + DEFINE_PROP_ARRAY("cpus-qom-path", SpinState, cpu_count, + cpu_canonical_path, qdev_prop_string, char *), + DEFINE_PROP_END_OF_LIST(), +}; + static void ppce500_spin_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); dc->reset = spin_reset; + dc->realize = ppce500_spin_realize; + device_class_set_props(dc, ppce500_spin_properties); } static const TypeInfo ppce500_spin_types[] = {