Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/1882131/?format=api
{ "id": 1882131, "url": "http://patchwork.ozlabs.org/api/patches/1882131/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20240103173349.398526-25-alex.bennee@linaro.org/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20240103173349.398526-25-alex.bennee@linaro.org>", "list_archive_url": null, "date": "2024-01-03T17:33:30", "name": "[v2,24/43] target/riscv: Move misa_mxl_max to class", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "481b029f6eb17a1120671472a6b896e74bfb383e", "submitter": { "id": 39532, "url": "http://patchwork.ozlabs.org/api/people/39532/?format=api", "name": "Alex Bennée", "email": "alex.bennee@linaro.org" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20240103173349.398526-25-alex.bennee@linaro.org/mbox/", "series": [ { "id": 388742, "url": "http://patchwork.ozlabs.org/api/series/388742/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=388742", "date": "2024-01-03T17:33:08", "name": "testing and plugin updates for 9.0 (pre-PR)", "version": 2, "mbox": "http://patchwork.ozlabs.org/series/388742/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/1882131/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/1882131/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=P+h5jLcd;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4T4xvn70ZSz1yQ5\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 4 Jan 2024 04:45:41 +1100 (AEDT)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1rL5DQ-0007hV-H6; Wed, 03 Jan 2024 12:39:40 -0500", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <alex.bennee@linaro.org>)\n id 1rL5DE-0006cA-LV\n for qemu-devel@nongnu.org; Wed, 03 Jan 2024 12:39:28 -0500", "from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <alex.bennee@linaro.org>)\n id 1rL5Cz-0000hM-QC\n for qemu-devel@nongnu.org; Wed, 03 Jan 2024 12:39:26 -0500", "by mail-wr1-x42d.google.com with SMTP id\n ffacd0b85a97d-3373a30af67so3029830f8f.0\n for <qemu-devel@nongnu.org>; Wed, 03 Jan 2024 09:39:12 -0800 (PST)", "from draig.lan ([85.9.250.243]) by smtp.gmail.com with ESMTPSA id\n u12-20020a5d434c000000b00336ee9edbb3sm18617127wrr.94.2024.01.03.09.39.06\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Wed, 03 Jan 2024 09:39:08 -0800 (PST)", "from draig.lan (localhost [IPv6:::1])\n by draig.lan (Postfix) with ESMTP id 8A9695F933;\n Wed, 3 Jan 2024 17:33:51 +0000 (GMT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1704303552; x=1704908352; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=0ZlBlDseJiU+Vt7ccbZJnZPKE9F5SWGJIPha2vy8A+4=;\n b=P+h5jLcdUkIlD+0e/WR4T13uM4DFP5M1SCZh73M/ByTyzKYUCNchuGn6RAidSYTfmS\n DzJohsJpZlD68IThyHiavGlHSeMMnyVDQGU4XTqTNsGokMhYfJpqlskbT0aGd46b0QMW\n EyY4o85e1N8JFKe7ryyR5y6jYQ2hwlMLM4IlcUI0iKnsjBSgIV5/5K+buPwPM2du4TLD\n YySLMvpZm4oku7wh1PJVZ7+AR1343wYGAZDIa0I+jJm/jYExQ87XNscvO6ew2TrpIQqO\n v+LXRz0Ds1JMc2EoE0DkL6R3GxbW5g+7xp7J/2fg1Nc5lA7qKwERYxQaZyLZ90KSbx2J\n 0XFQ==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1704303552; x=1704908352;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc\n :subject:date:message-id:reply-to;\n bh=0ZlBlDseJiU+Vt7ccbZJnZPKE9F5SWGJIPha2vy8A+4=;\n b=ivgYtOmYQnKyaEc8K7iN8FYofHIij4O95USBPjkhOHoCm4q7V6w6HXU+IOwqqAP11Z\n D6maNJwznWHGDRjVV1mQvA2cppXVCg8CRMaDMm6bILrw2FajCeNDRDbO+szuV1GK+vqu\n 0iQKjcjvcWBKkNvH8sO2IWAxy2Hq0anRbdD76OW81dp6ZUl5crfG3crOEsM/kDOO6nAb\n FFv6yOkhQOzUnWMOaw9b81ZYwmBvNzBeiF+KoaOimjqRabtmMlCZ2LyrGYkiXIHsPFg2\n NlAR/K6+rdi6ui1aAxPfjyk9G4s/+9b15+3CdVqH5S1t3RFNRtZ2dwXewpXz5l+jiEm2\n hTDQ==", "X-Gm-Message-State": "AOJu0Yx0JgXfAfcKl5ibaucgb1v8EapALZFnXdVP+1qS7yyU1HgcOER2\n uSlDbTypSOoHuY0sMpV7U3xHOGL5IOhasg==", "X-Google-Smtp-Source": "\n AGHT+IFqr3Z4thZuI0xn8+9eK/eeGC/kB87e6Vtt6MGql8yyKASzMmGIsEoA0Gcfeu0QzE8ibzpbfw==", "X-Received": "by 2002:adf:e849:0:b0:336:8178:c269 with SMTP id\n d9-20020adfe849000000b003368178c269mr5842837wrn.89.1704303551846;\n Wed, 03 Jan 2024 09:39:11 -0800 (PST)", "From": "=?utf-8?q?Alex_Benn=C3=A9e?= <alex.bennee@linaro.org>", "To": "qemu-devel@nongnu.org", "Cc": "qemu-s390x@nongnu.org, qemu-ppc@nongnu.org,\n Richard Henderson <richard.henderson@linaro.org>,\n Song Gao <gaosong@loongson.cn>,\n =?utf-8?q?Marc-Andr=C3=A9_Lureau?= <marcandre.lureau@redhat.com>,\n David Hildenbrand <david@redhat.com>, Aurelien Jarno <aurelien@aurel32.net>,\n Yoshinori Sato <ysato@users.sourceforge.jp>,\n Yanan Wang <wangyanan55@huawei.com>, Bin Meng <bin.meng@windriver.com>,\n Laurent Vivier <lvivier@redhat.com>, Michael Rolnik <mrolnik@gmail.com>,\n Alexandre Iooss <erdnaxe@crans.org>, David Woodhouse <dwmw2@infradead.org>,\n Laurent Vivier <laurent@vivier.eu>, Paolo Bonzini <pbonzini@redhat.com>,\n Brian Cain <bcain@quicinc.com>,\n Daniel Henrique Barboza <danielhb413@gmail.com>,\n Beraldo Leal <bleal@redhat.com>, Paul Durrant <paul@xen.org>,\n Mahmoud Mandour <ma.mandourr@gmail.com>, Thomas Huth <thuth@redhat.com>,\n Liu Zhiwei <zhiwei_liu@linux.alibaba.com>, Cleber Rosa <crosa@redhat.com>,\n kvm@vger.kernel.org, Peter Maydell <peter.maydell@linaro.org>,\n Wainer dos Santos Moschetta <wainersm@redhat.com>, =?utf-8?q?Alex_Benn?=\n\t=?utf-8?q?=C3=A9e?= <alex.bennee@linaro.org>, qemu-arm@nongnu.org,\n Weiwei Li <liwei1518@gmail.com>,\n =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>,\n John Snow <jsnow@redhat.com>,\n Daniel Henrique Barboza <dbarboza@ventanamicro.com>,\n Nicholas Piggin <npiggin@gmail.com>, Palmer Dabbelt <palmer@dabbelt.com>,\n Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,\n Ilya Leoshkevich <iii@linux.ibm.com>,\n =?utf-8?q?C=C3=A9dric_Le_Goater?= <clg@kaod.org>,\n \"Edgar E. Iglesias\" <edgar.iglesias@gmail.com>,\n Eduardo Habkost <eduardo@habkost.net>,\n Pierrick Bouvier <pierrick.bouvier@linaro.org>, qemu-riscv@nongnu.org,\n Alistair Francis <alistair.francis@wdc.com>,\n Akihiko Odaki <akihiko.odaki@daynix.com>", "Subject": "[PATCH v2 24/43] target/riscv: Move misa_mxl_max to class", "Date": "Wed, 3 Jan 2024 17:33:30 +0000", "Message-Id": "<20240103173349.398526-25-alex.bennee@linaro.org>", "X-Mailer": "git-send-email 2.39.2", "In-Reply-To": "<20240103173349.398526-1-alex.bennee@linaro.org>", "References": "<20240103173349.398526-1-alex.bennee@linaro.org>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "Content-Transfer-Encoding": "8bit", "Received-SPF": "pass client-ip=2a00:1450:4864:20::42d;\n envelope-from=alex.bennee@linaro.org; helo=mail-wr1-x42d.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,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001,\n T_SCC_BODY_TEXT_LINE=-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": "<qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org" }, "content": "From: Akihiko Odaki <akihiko.odaki@daynix.com>\n\nmisa_mxl_max is common for all instances of a RISC-V CPU class so they\nare better put into class.\n\nSigned-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>\nMessage-Id: <20231213-riscv-v7-3-a760156a337f@daynix.com>\nSigned-off-by: Alex Bennée <alex.bennee@linaro.org>\n---\n target/riscv/cpu.h | 4 +-\n target/riscv/cpu.c | 118 +++++++++++++++++++------------------\n target/riscv/gdbstub.c | 12 ++--\n target/riscv/kvm/kvm-cpu.c | 10 ++--\n target/riscv/machine.c | 7 +--\n target/riscv/tcg/tcg-cpu.c | 12 ++--\n target/riscv/translate.c | 3 +-\n 7 files changed, 87 insertions(+), 79 deletions(-)", "diff": "diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h\nindex d74b361be64..060b7f69a74 100644\n--- a/target/riscv/cpu.h\n+++ b/target/riscv/cpu.h\n@@ -169,7 +169,6 @@ struct CPUArchState {\n \n /* RISCVMXL, but uint32_t for vmstate migration */\n uint32_t misa_mxl; /* current mxl */\n- uint32_t misa_mxl_max; /* max mxl for this cpu */\n uint32_t misa_ext; /* current extensions */\n uint32_t misa_ext_mask; /* max ext for this cpu */\n uint32_t xl; /* current xlen */\n@@ -450,6 +449,7 @@ struct RISCVCPUClass {\n \n DeviceRealize parent_realize;\n ResettablePhases parent_phases;\n+ uint32_t misa_mxl_max; /* max mxl for this cpu */\n };\n \n static inline int riscv_has_ext(CPURISCVState *env, target_ulong ext)\n@@ -756,7 +756,7 @@ enum riscv_pmu_event_idx {\n /* used by tcg/tcg-cpu.c*/\n void isa_ext_update_enabled(RISCVCPU *cpu, uint32_t ext_offset, bool en);\n bool isa_ext_is_enabled(RISCVCPU *cpu, uint32_t ext_offset);\n-void riscv_cpu_set_misa(CPURISCVState *env, RISCVMXL mxl, uint32_t ext);\n+void riscv_cpu_set_misa_ext(CPURISCVState *env, uint32_t ext);\n \n typedef struct RISCVCPUMultiExtConfig {\n const char *name;\ndiff --git a/target/riscv/cpu.c b/target/riscv/cpu.c\nindex 83c7c0cf07b..2ab61df2217 100644\n--- a/target/riscv/cpu.c\n+++ b/target/riscv/cpu.c\n@@ -274,9 +274,8 @@ const char *riscv_cpu_get_trap_name(target_ulong cause, bool async)\n }\n }\n \n-void riscv_cpu_set_misa(CPURISCVState *env, RISCVMXL mxl, uint32_t ext)\n+void riscv_cpu_set_misa_ext(CPURISCVState *env, uint32_t ext)\n {\n- env->misa_mxl_max = env->misa_mxl = mxl;\n env->misa_ext_mask = env->misa_ext = ext;\n }\n \n@@ -378,11 +377,7 @@ static void riscv_any_cpu_init(Object *obj)\n {\n RISCVCPU *cpu = RISCV_CPU(obj);\n CPURISCVState *env = &cpu->env;\n-#if defined(TARGET_RISCV32)\n- riscv_cpu_set_misa(env, MXL_RV32, RVI | RVM | RVA | RVF | RVD | RVC | RVU);\n-#elif defined(TARGET_RISCV64)\n- riscv_cpu_set_misa(env, MXL_RV64, RVI | RVM | RVA | RVF | RVD | RVC | RVU);\n-#endif\n+ riscv_cpu_set_misa_ext(env, RVI | RVM | RVA | RVF | RVD | RVC | RVU);\n \n #ifndef CONFIG_USER_ONLY\n set_satp_mode_max_supported(RISCV_CPU(obj),\n@@ -403,16 +398,14 @@ static void riscv_max_cpu_init(Object *obj)\n {\n RISCVCPU *cpu = RISCV_CPU(obj);\n CPURISCVState *env = &cpu->env;\n- RISCVMXL mlx = MXL_RV64;\n \n-#ifdef TARGET_RISCV32\n- mlx = MXL_RV32;\n-#endif\n- riscv_cpu_set_misa(env, mlx, 0);\n env->priv_ver = PRIV_VERSION_LATEST;\n #ifndef CONFIG_USER_ONLY\n- set_satp_mode_max_supported(RISCV_CPU(obj), mlx == MXL_RV32 ?\n- VM_1_10_SV32 : VM_1_10_SV57);\n+#ifdef TARGET_RISCV32\n+ set_satp_mode_max_supported(cpu, VM_1_10_SV32);\n+#else\n+ set_satp_mode_max_supported(cpu, VM_1_10_SV57);\n+#endif\n #endif\n }\n \n@@ -420,8 +413,6 @@ static void riscv_max_cpu_init(Object *obj)\n static void rv64_base_cpu_init(Object *obj)\n {\n CPURISCVState *env = &RISCV_CPU(obj)->env;\n- /* We set this in the realise function */\n- riscv_cpu_set_misa(env, MXL_RV64, 0);\n /* Set latest version of privileged specification */\n env->priv_ver = PRIV_VERSION_LATEST;\n #ifndef CONFIG_USER_ONLY\n@@ -433,8 +424,7 @@ static void rv64_sifive_u_cpu_init(Object *obj)\n {\n RISCVCPU *cpu = RISCV_CPU(obj);\n CPURISCVState *env = &cpu->env;\n- riscv_cpu_set_misa(env, MXL_RV64,\n- RVI | RVM | RVA | RVF | RVD | RVC | RVS | RVU);\n+ riscv_cpu_set_misa_ext(env, RVI | RVM | RVA | RVF | RVD | RVC | RVS | RVU);\n env->priv_ver = PRIV_VERSION_1_10_0;\n #ifndef CONFIG_USER_ONLY\n set_satp_mode_max_supported(RISCV_CPU(obj), VM_1_10_SV39);\n@@ -452,7 +442,7 @@ static void rv64_sifive_e_cpu_init(Object *obj)\n CPURISCVState *env = &RISCV_CPU(obj)->env;\n RISCVCPU *cpu = RISCV_CPU(obj);\n \n- riscv_cpu_set_misa(env, MXL_RV64, RVI | RVM | RVA | RVC | RVU);\n+ riscv_cpu_set_misa_ext(env, RVI | RVM | RVA | RVC | RVU);\n env->priv_ver = PRIV_VERSION_1_10_0;\n #ifndef CONFIG_USER_ONLY\n set_satp_mode_max_supported(cpu, VM_1_10_MBARE);\n@@ -469,7 +459,7 @@ static void rv64_thead_c906_cpu_init(Object *obj)\n CPURISCVState *env = &RISCV_CPU(obj)->env;\n RISCVCPU *cpu = RISCV_CPU(obj);\n \n- riscv_cpu_set_misa(env, MXL_RV64, RVG | RVC | RVS | RVU);\n+ riscv_cpu_set_misa_ext(env, RVG | RVC | RVS | RVU);\n env->priv_ver = PRIV_VERSION_1_11_0;\n \n cpu->cfg.ext_zfa = true;\n@@ -500,7 +490,7 @@ static void rv64_veyron_v1_cpu_init(Object *obj)\n CPURISCVState *env = &RISCV_CPU(obj)->env;\n RISCVCPU *cpu = RISCV_CPU(obj);\n \n- riscv_cpu_set_misa(env, MXL_RV64, RVG | RVC | RVS | RVU | RVH);\n+ riscv_cpu_set_misa_ext(env, RVG | RVC | RVS | RVU | RVH);\n env->priv_ver = PRIV_VERSION_1_12_0;\n \n /* Enable ISA extensions */\n@@ -544,8 +534,6 @@ static void rv128_base_cpu_init(Object *obj)\n exit(EXIT_FAILURE);\n }\n CPURISCVState *env = &RISCV_CPU(obj)->env;\n- /* We set this in the realise function */\n- riscv_cpu_set_misa(env, MXL_RV128, 0);\n /* Set latest version of privileged specification */\n env->priv_ver = PRIV_VERSION_LATEST;\n #ifndef CONFIG_USER_ONLY\n@@ -556,8 +544,6 @@ static void rv128_base_cpu_init(Object *obj)\n static void rv32_base_cpu_init(Object *obj)\n {\n CPURISCVState *env = &RISCV_CPU(obj)->env;\n- /* We set this in the realise function */\n- riscv_cpu_set_misa(env, MXL_RV32, 0);\n /* Set latest version of privileged specification */\n env->priv_ver = PRIV_VERSION_LATEST;\n #ifndef CONFIG_USER_ONLY\n@@ -569,8 +555,7 @@ static void rv32_sifive_u_cpu_init(Object *obj)\n {\n RISCVCPU *cpu = RISCV_CPU(obj);\n CPURISCVState *env = &cpu->env;\n- riscv_cpu_set_misa(env, MXL_RV32,\n- RVI | RVM | RVA | RVF | RVD | RVC | RVS | RVU);\n+ riscv_cpu_set_misa_ext(env, RVI | RVM | RVA | RVF | RVD | RVC | RVS | RVU);\n env->priv_ver = PRIV_VERSION_1_10_0;\n #ifndef CONFIG_USER_ONLY\n set_satp_mode_max_supported(RISCV_CPU(obj), VM_1_10_SV32);\n@@ -588,7 +573,7 @@ static void rv32_sifive_e_cpu_init(Object *obj)\n CPURISCVState *env = &RISCV_CPU(obj)->env;\n RISCVCPU *cpu = RISCV_CPU(obj);\n \n- riscv_cpu_set_misa(env, MXL_RV32, RVI | RVM | RVA | RVC | RVU);\n+ riscv_cpu_set_misa_ext(env, RVI | RVM | RVA | RVC | RVU);\n env->priv_ver = PRIV_VERSION_1_10_0;\n #ifndef CONFIG_USER_ONLY\n set_satp_mode_max_supported(cpu, VM_1_10_MBARE);\n@@ -605,7 +590,7 @@ static void rv32_ibex_cpu_init(Object *obj)\n CPURISCVState *env = &RISCV_CPU(obj)->env;\n RISCVCPU *cpu = RISCV_CPU(obj);\n \n- riscv_cpu_set_misa(env, MXL_RV32, RVI | RVM | RVC | RVU);\n+ riscv_cpu_set_misa_ext(env, RVI | RVM | RVC | RVU);\n env->priv_ver = PRIV_VERSION_1_12_0;\n #ifndef CONFIG_USER_ONLY\n set_satp_mode_max_supported(cpu, VM_1_10_MBARE);\n@@ -622,7 +607,7 @@ static void rv32_imafcu_nommu_cpu_init(Object *obj)\n CPURISCVState *env = &RISCV_CPU(obj)->env;\n RISCVCPU *cpu = RISCV_CPU(obj);\n \n- riscv_cpu_set_misa(env, MXL_RV32, RVI | RVM | RVA | RVF | RVC | RVU);\n+ riscv_cpu_set_misa_ext(env, RVI | RVM | RVA | RVF | RVC | RVU);\n env->priv_ver = PRIV_VERSION_1_10_0;\n #ifndef CONFIG_USER_ONLY\n set_satp_mode_max_supported(cpu, VM_1_10_MBARE);\n@@ -845,7 +830,7 @@ static void riscv_cpu_reset_hold(Object *obj)\n mcc->parent_phases.hold(obj);\n }\n #ifndef CONFIG_USER_ONLY\n- env->misa_mxl = env->misa_mxl_max;\n+ env->misa_mxl = mcc->misa_mxl_max;\n env->priv = PRV_M;\n env->mstatus &= ~(MSTATUS_MIE | MSTATUS_MPRV);\n if (env->misa_mxl > MXL_RV32) {\n@@ -1213,6 +1198,12 @@ static void riscv_cpu_post_init(Object *obj)\n \n static void riscv_cpu_init(Object *obj)\n {\n+ RISCVCPUClass *mcc = RISCV_CPU_GET_CLASS(obj);\n+ RISCVCPU *cpu = RISCV_CPU(obj);\n+ CPURISCVState *env = &cpu->env;\n+\n+ env->misa_mxl = mcc->misa_mxl_max;\n+\n #ifndef CONFIG_USER_ONLY\n qdev_init_gpio_in(DEVICE(obj), riscv_cpu_set_irq,\n IRQ_LOCAL_MAX + IRQ_LOCAL_GUEST_MAX);\n@@ -1657,7 +1648,7 @@ static void cpu_get_marchid(Object *obj, Visitor *v, const char *name,\n visit_type_bool(v, name, &value, errp);\n }\n \n-static void riscv_cpu_class_init(ObjectClass *c, void *data)\n+static void riscv_cpu_common_class_init(ObjectClass *c, void *data)\n {\n RISCVCPUClass *mcc = RISCV_CPU_CLASS(c);\n CPUClass *cc = CPU_CLASS(c);\n@@ -1699,6 +1690,13 @@ static void riscv_cpu_class_init(ObjectClass *c, void *data)\n device_class_set_props(dc, riscv_cpu_properties);\n }\n \n+static void riscv_cpu_class_init(ObjectClass *c, void *data)\n+{\n+ RISCVCPUClass *mcc = RISCV_CPU_CLASS(c);\n+\n+ mcc->misa_mxl_max = (uint32_t)(uintptr_t)data;\n+}\n+\n static void riscv_isa_string_ext(RISCVCPU *cpu, char **isa_str,\n int max_str_len)\n {\n@@ -1764,18 +1762,22 @@ void riscv_cpu_list(void)\n g_slist_free(list);\n }\n \n-#define DEFINE_CPU(type_name, initfn) \\\n- { \\\n- .name = type_name, \\\n- .parent = TYPE_RISCV_CPU, \\\n- .instance_init = initfn \\\n+#define DEFINE_CPU(type_name, misa_mxl_max, initfn) \\\n+ { \\\n+ .name = (type_name), \\\n+ .parent = TYPE_RISCV_CPU, \\\n+ .instance_init = (initfn), \\\n+ .class_init = riscv_cpu_class_init, \\\n+ .class_data = (void *)(misa_mxl_max) \\\n }\n \n-#define DEFINE_DYNAMIC_CPU(type_name, initfn) \\\n- { \\\n- .name = type_name, \\\n- .parent = TYPE_RISCV_DYNAMIC_CPU, \\\n- .instance_init = initfn \\\n+#define DEFINE_DYNAMIC_CPU(type_name, misa_mxl_max, initfn) \\\n+ { \\\n+ .name = (type_name), \\\n+ .parent = TYPE_RISCV_DYNAMIC_CPU, \\\n+ .instance_init = (initfn), \\\n+ .class_init = riscv_cpu_class_init, \\\n+ .class_data = (void *)(misa_mxl_max) \\\n }\n \n static const TypeInfo riscv_cpu_type_infos[] = {\n@@ -1788,29 +1790,31 @@ static const TypeInfo riscv_cpu_type_infos[] = {\n .instance_post_init = riscv_cpu_post_init,\n .abstract = true,\n .class_size = sizeof(RISCVCPUClass),\n- .class_init = riscv_cpu_class_init,\n+ .class_init = riscv_cpu_common_class_init,\n },\n {\n .name = TYPE_RISCV_DYNAMIC_CPU,\n .parent = TYPE_RISCV_CPU,\n .abstract = true,\n },\n- DEFINE_DYNAMIC_CPU(TYPE_RISCV_CPU_ANY, riscv_any_cpu_init),\n- DEFINE_DYNAMIC_CPU(TYPE_RISCV_CPU_MAX, riscv_max_cpu_init),\n #if defined(TARGET_RISCV32)\n- DEFINE_DYNAMIC_CPU(TYPE_RISCV_CPU_BASE32, rv32_base_cpu_init),\n- DEFINE_CPU(TYPE_RISCV_CPU_IBEX, rv32_ibex_cpu_init),\n- DEFINE_CPU(TYPE_RISCV_CPU_SIFIVE_E31, rv32_sifive_e_cpu_init),\n- DEFINE_CPU(TYPE_RISCV_CPU_SIFIVE_E34, rv32_imafcu_nommu_cpu_init),\n- DEFINE_CPU(TYPE_RISCV_CPU_SIFIVE_U34, rv32_sifive_u_cpu_init),\n+ DEFINE_DYNAMIC_CPU(TYPE_RISCV_CPU_ANY, MXL_RV32, riscv_any_cpu_init),\n+ DEFINE_DYNAMIC_CPU(TYPE_RISCV_CPU_MAX, MXL_RV32, riscv_max_cpu_init),\n+ DEFINE_DYNAMIC_CPU(TYPE_RISCV_CPU_BASE32, MXL_RV32, rv32_base_cpu_init),\n+ DEFINE_CPU(TYPE_RISCV_CPU_IBEX, MXL_RV32, rv32_ibex_cpu_init),\n+ DEFINE_CPU(TYPE_RISCV_CPU_SIFIVE_E31, MXL_RV32, rv32_sifive_e_cpu_init),\n+ DEFINE_CPU(TYPE_RISCV_CPU_SIFIVE_E34, MXL_RV32, rv32_imafcu_nommu_cpu_init),\n+ DEFINE_CPU(TYPE_RISCV_CPU_SIFIVE_U34, MXL_RV32, rv32_sifive_u_cpu_init),\n #elif defined(TARGET_RISCV64)\n- DEFINE_DYNAMIC_CPU(TYPE_RISCV_CPU_BASE64, rv64_base_cpu_init),\n- DEFINE_CPU(TYPE_RISCV_CPU_SIFIVE_E51, rv64_sifive_e_cpu_init),\n- DEFINE_CPU(TYPE_RISCV_CPU_SIFIVE_U54, rv64_sifive_u_cpu_init),\n- DEFINE_CPU(TYPE_RISCV_CPU_SHAKTI_C, rv64_sifive_u_cpu_init),\n- DEFINE_CPU(TYPE_RISCV_CPU_THEAD_C906, rv64_thead_c906_cpu_init),\n- DEFINE_CPU(TYPE_RISCV_CPU_VEYRON_V1, rv64_veyron_v1_cpu_init),\n- DEFINE_DYNAMIC_CPU(TYPE_RISCV_CPU_BASE128, rv128_base_cpu_init),\n+ DEFINE_DYNAMIC_CPU(TYPE_RISCV_CPU_ANY, MXL_RV64, riscv_any_cpu_init),\n+ DEFINE_DYNAMIC_CPU(TYPE_RISCV_CPU_MAX, MXL_RV64, riscv_max_cpu_init),\n+ DEFINE_DYNAMIC_CPU(TYPE_RISCV_CPU_BASE64, MXL_RV64, rv64_base_cpu_init),\n+ DEFINE_CPU(TYPE_RISCV_CPU_SIFIVE_E51, MXL_RV64, rv64_sifive_e_cpu_init),\n+ DEFINE_CPU(TYPE_RISCV_CPU_SIFIVE_U54, MXL_RV64, rv64_sifive_u_cpu_init),\n+ DEFINE_CPU(TYPE_RISCV_CPU_SHAKTI_C, MXL_RV64, rv64_sifive_u_cpu_init),\n+ DEFINE_CPU(TYPE_RISCV_CPU_THEAD_C906, MXL_RV64, rv64_thead_c906_cpu_init),\n+ DEFINE_CPU(TYPE_RISCV_CPU_VEYRON_V1, MXL_RV64, rv64_veyron_v1_cpu_init),\n+ DEFINE_DYNAMIC_CPU(TYPE_RISCV_CPU_BASE128, MXL_RV128, rv128_base_cpu_init),\n #endif\n };\n \ndiff --git a/target/riscv/gdbstub.c b/target/riscv/gdbstub.c\nindex 58b3ace0fe9..365040228a1 100644\n--- a/target/riscv/gdbstub.c\n+++ b/target/riscv/gdbstub.c\n@@ -49,6 +49,7 @@ static const struct TypeSize vec_lanes[] = {\n \n int riscv_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n)\n {\n+ RISCVCPUClass *mcc = RISCV_CPU_GET_CLASS(cs);\n RISCVCPU *cpu = RISCV_CPU(cs);\n CPURISCVState *env = &cpu->env;\n target_ulong tmp;\n@@ -61,7 +62,7 @@ int riscv_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n)\n return 0;\n }\n \n- switch (env->misa_mxl_max) {\n+ switch (mcc->misa_mxl_max) {\n case MXL_RV32:\n return gdb_get_reg32(mem_buf, tmp);\n case MXL_RV64:\n@@ -75,12 +76,13 @@ int riscv_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n)\n \n int riscv_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)\n {\n+ RISCVCPUClass *mcc = RISCV_CPU_GET_CLASS(cs);\n RISCVCPU *cpu = RISCV_CPU(cs);\n CPURISCVState *env = &cpu->env;\n int length = 0;\n target_ulong tmp;\n \n- switch (env->misa_mxl_max) {\n+ switch (mcc->misa_mxl_max) {\n case MXL_RV32:\n tmp = (int32_t)ldl_p(mem_buf);\n length = 4;\n@@ -214,11 +216,12 @@ static int riscv_gdb_set_virtual(CPURISCVState *cs, uint8_t *mem_buf, int n)\n \n static int riscv_gen_dynamic_csr_xml(CPUState *cs, int base_reg)\n {\n+ RISCVCPUClass *mcc = RISCV_CPU_GET_CLASS(cs);\n RISCVCPU *cpu = RISCV_CPU(cs);\n CPURISCVState *env = &cpu->env;\n GString *s = g_string_new(NULL);\n riscv_csr_predicate_fn predicate;\n- int bitsize = 16 << env->misa_mxl_max;\n+ int bitsize = 16 << mcc->misa_mxl_max;\n int i;\n \n #if !defined(CONFIG_USER_ONLY)\n@@ -310,6 +313,7 @@ static int ricsv_gen_dynamic_vector_xml(CPUState *cs, int base_reg)\n \n void riscv_cpu_register_gdb_regs_for_features(CPUState *cs)\n {\n+ RISCVCPUClass *mcc = RISCV_CPU_GET_CLASS(cs);\n RISCVCPU *cpu = RISCV_CPU(cs);\n CPURISCVState *env = &cpu->env;\n if (env->misa_ext & RVD) {\n@@ -326,7 +330,7 @@ void riscv_cpu_register_gdb_regs_for_features(CPUState *cs)\n ricsv_gen_dynamic_vector_xml(cs, base_reg),\n \"riscv-vector.xml\", 0);\n }\n- switch (env->misa_mxl_max) {\n+ switch (mcc->misa_mxl_max) {\n case MXL_RV32:\n gdb_register_coprocessor(cs, riscv_gdb_get_virtual,\n riscv_gdb_set_virtual,\ndiff --git a/target/riscv/kvm/kvm-cpu.c b/target/riscv/kvm/kvm-cpu.c\nindex 117e33cf90f..ed86f21b8f2 100644\n--- a/target/riscv/kvm/kvm-cpu.c\n+++ b/target/riscv/kvm/kvm-cpu.c\n@@ -1499,14 +1499,14 @@ static void kvm_cpu_accel_register_types(void)\n }\n type_init(kvm_cpu_accel_register_types);\n \n-static void riscv_host_cpu_init(Object *obj)\n+static void riscv_host_cpu_class_init(ObjectClass *c, void *data)\n {\n- CPURISCVState *env = &RISCV_CPU(obj)->env;\n+ RISCVCPUClass *mcc = RISCV_CPU_CLASS(c);\n \n #if defined(TARGET_RISCV32)\n- env->misa_mxl_max = env->misa_mxl = MXL_RV32;\n+ mcc->misa_mxl_max = MXL_RV32;\n #elif defined(TARGET_RISCV64)\n- env->misa_mxl_max = env->misa_mxl = MXL_RV64;\n+ mcc->misa_mxl_max = MXL_RV64;\n #endif\n }\n \n@@ -1514,7 +1514,7 @@ static const TypeInfo riscv_kvm_cpu_type_infos[] = {\n {\n .name = TYPE_RISCV_CPU_HOST,\n .parent = TYPE_RISCV_CPU,\n- .instance_init = riscv_host_cpu_init,\n+ .class_init = riscv_host_cpu_class_init,\n }\n };\n \ndiff --git a/target/riscv/machine.c b/target/riscv/machine.c\nindex fdde243e040..4c8d9a66595 100644\n--- a/target/riscv/machine.c\n+++ b/target/riscv/machine.c\n@@ -178,10 +178,9 @@ static const VMStateDescription vmstate_pointermasking = {\n \n static bool rv128_needed(void *opaque)\n {\n- RISCVCPU *cpu = opaque;\n- CPURISCVState *env = &cpu->env;\n+ RISCVCPUClass *mcc = RISCV_CPU_GET_CLASS(opaque);\n \n- return env->misa_mxl_max == MXL_RV128;\n+ return mcc->misa_mxl_max == MXL_RV128;\n }\n \n static const VMStateDescription vmstate_rv128 = {\n@@ -372,7 +371,7 @@ const VMStateDescription vmstate_riscv_cpu = {\n VMSTATE_UINTTL(env.vext_ver, RISCVCPU),\n VMSTATE_UINT32(env.misa_mxl, RISCVCPU),\n VMSTATE_UINT32(env.misa_ext, RISCVCPU),\n- VMSTATE_UINT32(env.misa_mxl_max, RISCVCPU),\n+ VMSTATE_UNUSED(4),\n VMSTATE_UINT32(env.misa_ext_mask, RISCVCPU),\n VMSTATE_UINTTL(env.priv, RISCVCPU),\n VMSTATE_BOOL(env.virt_enabled, RISCVCPU),\ndiff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c\nindex ee17f65afb6..7f6712c81a4 100644\n--- a/target/riscv/tcg/tcg-cpu.c\n+++ b/target/riscv/tcg/tcg-cpu.c\n@@ -152,10 +152,9 @@ static void riscv_cpu_validate_misa_mxl(RISCVCPU *cpu)\n {\n RISCVCPUClass *mcc = RISCV_CPU_GET_CLASS(cpu);\n CPUClass *cc = CPU_CLASS(mcc);\n- CPURISCVState *env = &cpu->env;\n \n /* Validate that MISA_MXL is set properly. */\n- switch (env->misa_mxl_max) {\n+ switch (mcc->misa_mxl_max) {\n #ifdef TARGET_RISCV64\n case MXL_RV64:\n case MXL_RV128:\n@@ -274,6 +273,7 @@ static void riscv_cpu_disable_priv_spec_isa_exts(RISCVCPU *cpu)\n */\n void riscv_cpu_validate_set_extensions(RISCVCPU *cpu, Error **errp)\n {\n+ RISCVCPUClass *mcc = RISCV_CPU_GET_CLASS(cpu);\n CPURISCVState *env = &cpu->env;\n Error *local_err = NULL;\n \n@@ -454,7 +454,7 @@ void riscv_cpu_validate_set_extensions(RISCVCPU *cpu, Error **errp)\n cpu_cfg_ext_auto_update(cpu, CPU_CFG_OFFSET(ext_zcb), true);\n cpu_cfg_ext_auto_update(cpu, CPU_CFG_OFFSET(ext_zcmp), true);\n cpu_cfg_ext_auto_update(cpu, CPU_CFG_OFFSET(ext_zcmt), true);\n- if (riscv_has_ext(env, RVF) && env->misa_mxl_max == MXL_RV32) {\n+ if (riscv_has_ext(env, RVF) && mcc->misa_mxl_max == MXL_RV32) {\n cpu_cfg_ext_auto_update(cpu, CPU_CFG_OFFSET(ext_zcf), true);\n }\n }\n@@ -462,7 +462,7 @@ void riscv_cpu_validate_set_extensions(RISCVCPU *cpu, Error **errp)\n /* zca, zcd and zcf has a PRIV 1.12.0 restriction */\n if (riscv_has_ext(env, RVC) && env->priv_ver >= PRIV_VERSION_1_12_0) {\n cpu_cfg_ext_auto_update(cpu, CPU_CFG_OFFSET(ext_zca), true);\n- if (riscv_has_ext(env, RVF) && env->misa_mxl_max == MXL_RV32) {\n+ if (riscv_has_ext(env, RVF) && mcc->misa_mxl_max == MXL_RV32) {\n cpu_cfg_ext_auto_update(cpu, CPU_CFG_OFFSET(ext_zcf), true);\n }\n if (riscv_has_ext(env, RVD)) {\n@@ -470,7 +470,7 @@ void riscv_cpu_validate_set_extensions(RISCVCPU *cpu, Error **errp)\n }\n }\n \n- if (env->misa_mxl_max != MXL_RV32 && cpu->cfg.ext_zcf) {\n+ if (mcc->misa_mxl_max != MXL_RV32 && cpu->cfg.ext_zcf) {\n error_setg(errp, \"Zcf extension is only relevant to RV32\");\n return;\n }\n@@ -956,7 +956,7 @@ static void riscv_init_max_cpu_extensions(Object *obj)\n const RISCVCPUMultiExtConfig *prop;\n \n /* Enable RVG, RVJ and RVV that are disabled by default */\n- riscv_cpu_set_misa(env, env->misa_mxl, env->misa_ext | RVG | RVJ | RVV);\n+ riscv_cpu_set_misa_ext(env, env->misa_ext | RVG | RVJ | RVV);\n \n for (prop = riscv_cpu_extensions; prop && prop->name; prop++) {\n isa_ext_update_enabled(cpu, prop->offset, true);\ndiff --git a/target/riscv/translate.c b/target/riscv/translate.c\nindex f0be79bb160..7e383c5eebf 100644\n--- a/target/riscv/translate.c\n+++ b/target/riscv/translate.c\n@@ -1167,6 +1167,7 @@ static void riscv_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs)\n {\n DisasContext *ctx = container_of(dcbase, DisasContext, base);\n CPURISCVState *env = cpu_env(cs);\n+ RISCVCPUClass *mcc = RISCV_CPU_GET_CLASS(cs);\n RISCVCPU *cpu = RISCV_CPU(cs);\n uint32_t tb_flags = ctx->base.tb->flags;\n \n@@ -1188,7 +1189,7 @@ static void riscv_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs)\n ctx->cfg_vta_all_1s = cpu->cfg.rvv_ta_all_1s;\n ctx->vstart_eq_zero = FIELD_EX32(tb_flags, TB_FLAGS, VSTART_EQ_ZERO);\n ctx->vl_eq_vlmax = FIELD_EX32(tb_flags, TB_FLAGS, VL_EQ_VLMAX);\n- ctx->misa_mxl_max = env->misa_mxl_max;\n+ ctx->misa_mxl_max = mcc->misa_mxl_max;\n ctx->xl = FIELD_EX32(tb_flags, TB_FLAGS, XL);\n ctx->address_xl = FIELD_EX32(tb_flags, TB_FLAGS, AXL);\n ctx->cs = cs;\n", "prefixes": [ "v2", "24/43" ] }