From nobody Wed Nov 27 00:30:37 2024 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 ARC-Seal: i=1; a=rsa-sha256; t=1702904425; cv=none; d=zohomail.com; s=zohoarc; b=QoFbzlKQn5/PrJpjIQyvzHodYYjpBkMH91+ESb6a7159FHtfX3G8aLs1UAN6UucyeXdZ6Nd/eLhXHJ/8X3D5lGWp6ZNHAxhx0WnqzfET4JZ+1LNAx3Bgnp2f5+bkoBXM1mQnAGLt8ZsvObTPgIl6YZ0VV7X0tr9PjkHjQvxZZGw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1702904425; h=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=NoZ6lx85lKxZJmfgWPYXTtMcWe+3dENbbJqiVANsppE=; b=fWGWXP+XJzwjDoY4NQ5HezXSfZ8lW62V/bQtoG1AGEF3V5mupBYMK+q7x6lLMk4qev0KMe7VWCjc1L1I1W8rRHFuTNJfx8pp2PCrIbb7JzdYxNO9mi0I0fM1+R75z3cSXG21CYdmy2QfrOP74lucahE7hFWR05udatNomxnKFSw= 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1702904425514398.8208622994499; Mon, 18 Dec 2023 05:00:25 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rFD8O-0002fI-Or; Mon, 18 Dec 2023 07:54:12 -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 1rFD8N-0002ev-P3 for qemu-devel@nongnu.org; Mon, 18 Dec 2023 07:54:11 -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 1rFD8L-0004rs-B6 for qemu-devel@nongnu.org; Mon, 18 Dec 2023 07:54:11 -0500 Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-1d3b5f9860bso2808205ad.3 for ; Mon, 18 Dec 2023 04:54:08 -0800 (PST) Received: from grind.. ([179.93.21.205]) by smtp.gmail.com with ESMTPSA id c2-20020a170902848200b001d09c539c96sm7494897plo.229.2023.12.18.04.54.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Dec 2023 04:54:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1702904047; x=1703508847; 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=NoZ6lx85lKxZJmfgWPYXTtMcWe+3dENbbJqiVANsppE=; b=CMiGamWmGjY5p5bMmtOGay7aJ3WUO2VehChoWwG5nscOzEMACD056zV1FoR8di64HK auk606TI4Rtyp1WnmrfMazwkfHi758BTnX84DjK4RCgI/gaNkTT5SrC4mP7smlztK0GM uPe9XilN2HD80NSE21kaXzBjHQbILBDjP9SEsA3y2uGXEtf8bxTr2sa8+PU5UGIIPIYS 4e2rWXSzhwGY5Q+dVrl5rIq+E7eUJ2KYZ1JSw2JFWR95O8Y0nYz5zpeogxTlBdy3QQOu OV6dAbO7ZgrU473J/1jFCIa3flU4P7NgweV1dVTHo4AH0wO1NbStP7nIUJp4CycGEG5q HEgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702904047; x=1703508847; 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=NoZ6lx85lKxZJmfgWPYXTtMcWe+3dENbbJqiVANsppE=; b=HuW0GJw4IH1vF0xk0iWEV1+aE3ieaMRyMGXWdR/WpCkjH5k2tSltdAJNqTqweT9xN0 4Fa1xyb/gubl7Wi9qWrTqH6m0ZxsGDagw8WwDsk4AJAeP4bNgi69znSRQ1Jb3azFRrs8 7Xq7Us7xwQ6YeoR3Uidl6n+rE8mmRAnE4S1/EZCUPjXZOGnAp2OvNpbhPKkp/KBWtBLu BeUYaLluG68pQl37H5PrrU5d4r7QCXwitDYhICqwcXIvLC43AMs12Mr8uHfk8s9GlNey DfhTkCKhOObcWt4PEu1LAl+AjK6zRu7FLHzJRkFRM8Ha373GA0P01KtxUItFAKEm20SL 1sYg== X-Gm-Message-State: AOJu0YwIAa5qBQ0HUD57vKxW0wsywhWHE3x/JGeyS9rnIBWLrneuBhQ9 qef06gm2jFYiBaBGrh1nKD1K/oY2/0Gm0QwhGc0= X-Google-Smtp-Source: AGHT+IFbJAlZ4kTr37aE9fu5AOKuRmb+Nl0bk8zg5/chJQJFvvyfJNzqMuLR9WaAc78n+Jj35QhtsQ== X-Received: by 2002:a17:903:947:b0:1d3:be34:7869 with SMTP id ma7-20020a170903094700b001d3be347869mr597538plb.45.1702904047561; Mon, 18 Dec 2023 04:54:07 -0800 (PST) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, bmeng@tinylab.org, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, palmer@rivosinc.com, ajones@ventanamicro.com, Daniel Henrique Barboza Subject: [PATCH v13 07/26] riscv-qmp-cmds.c: expose named features in cpu_model_expansion Date: Mon, 18 Dec 2023 09:53:15 -0300 Message-ID: <20231218125334.37184-8-dbarboza@ventanamicro.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231218125334.37184-1-dbarboza@ventanamicro.com> References: <20231218125334.37184-1-dbarboza@ventanamicro.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=2607:f8b0:4864:20::635; envelope-from=dbarboza@ventanamicro.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, T_SCC_BODY_TEXT_LINE=-0.01 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ventanamicro.com) X-ZM-MESSAGEID: 1702904427298100007 Content-Type: text/plain; charset="utf-8" Named features (zic64b the sole example at this moment) aren't expose to users, thus we need another way to expose them. Go through each named feature, get its boolean value, do the needed conversions (bool to qbool, qbool to QObject) and add it to output dict. Another adjustment is needed: named features are evaluated during finalize(), so riscv_cpu_finalize_features() needs to be mandatory regardless of whether we have an input dict or not. Otherwise zic64b will always return 'false', which is incorrect: the default values of cache blocksizes ([cbom/cbop/cboz]_blocksize) are set to 64, satisfying the conditions for zic64b. Here's an API usage example after this patch: $ ./build/qemu-system-riscv64 -S -M virt -display none -qmp tcp:localhost:1234,server,wait=3Doff $ ./scripts/qmp/qmp-shell localhost:1234 Welcome to the QMP low-level shell! Connected to QEMU 8.1.50 (QEMU) query-cpu-model-expansion type=3Dfull model=3D{"name":"rv64"} {"return": {"model": {"name": "rv64", "props": {... "zic64b": true, ...}}}} zic64b is set to 'true', as expected, since all cache sizes are 64 bytes by default. If we change one of the cache blocksizes, zic64b is returned as 'false': (QEMU) query-cpu-model-expansion type=3Dfull model=3D{"name":"rv64","props"= :{"cbom_blocksize":128}} {"return": {"model": {"name": "rv64", "props": {... "zic64b": false, ...}}}} Signed-off-by: Daniel Henrique Barboza Reviewed-by: Andrew Jones Reviewed-by: Alistair Francis --- target/riscv/riscv-qmp-cmds.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/target/riscv/riscv-qmp-cmds.c b/target/riscv/riscv-qmp-cmds.c index 2f2dbae7c8..5ada279776 100644 --- a/target/riscv/riscv-qmp-cmds.c +++ b/target/riscv/riscv-qmp-cmds.c @@ -26,6 +26,7 @@ =20 #include "qapi/error.h" #include "qapi/qapi-commands-machine-target.h" +#include "qapi/qmp/qbool.h" #include "qapi/qmp/qdict.h" #include "qapi/qmp/qerror.h" #include "qapi/qobject-input-visitor.h" @@ -99,6 +100,22 @@ static void riscv_obj_add_multiext_props(Object *obj, Q= Dict *qdict_out, } } =20 +static void riscv_obj_add_named_feats_qdict(Object *obj, QDict *qdict_out) +{ + const RISCVCPUMultiExtConfig *named_cfg; + RISCVCPU *cpu =3D RISCV_CPU(obj); + QObject *value; + bool flag_val; + + for (int i =3D 0; riscv_cpu_named_features[i].name !=3D NULL; i++) { + named_cfg =3D &riscv_cpu_named_features[i]; + flag_val =3D isa_ext_is_enabled(cpu, named_cfg->offset); + value =3D QOBJECT(qbool_from_bool(flag_val)); + + qdict_put_obj(qdict_out, named_cfg->name, value); + } +} + static void riscv_cpuobj_validate_qdict_in(Object *obj, QObject *props, const QDict *qdict_in, Error **errp) @@ -129,11 +146,6 @@ static void riscv_cpuobj_validate_qdict_in(Object *obj= , QObject *props, goto err; } =20 - riscv_cpu_finalize_features(RISCV_CPU(obj), &local_err); - if (local_err) { - goto err; - } - visit_end_struct(visitor, NULL); =20 err: @@ -191,6 +203,13 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(C= puModelExpansionType type, } } =20 + riscv_cpu_finalize_features(RISCV_CPU(obj), &local_err); + if (local_err) { + error_propagate(errp, local_err); + object_unref(obj); + return NULL; + } + expansion_info =3D g_new0(CpuModelExpansionInfo, 1); expansion_info->model =3D g_malloc0(sizeof(*expansion_info->model)); expansion_info->model->name =3D g_strdup(model->name); @@ -200,6 +219,7 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(Cp= uModelExpansionType type, riscv_obj_add_multiext_props(obj, qdict_out, riscv_cpu_extensions); riscv_obj_add_multiext_props(obj, qdict_out, riscv_cpu_experimental_ex= ts); riscv_obj_add_multiext_props(obj, qdict_out, riscv_cpu_vendor_exts); + riscv_obj_add_named_feats_qdict(obj, qdict_out); =20 /* Add our CPU boolean options too */ riscv_obj_add_qdict_prop(obj, qdict_out, "mmu"); --=20 2.43.0