From nobody Mon Feb 9 01:11:39 2026 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=1654838578; cv=none; d=zohomail.com; s=zohoarc; b=JjLm/dm6VVAKDuQ1hxe14GWoIfgz8+j/JPbJMgbJ2AM1M+rQ4aEhQcb7XcjJwy0fIk0O9fpk2lgGyX490x81Rg/qFbPWL+qARxdIpvg9IH+H+CRv8c3CY+no842saDh1H2fL2K9H/fPgP3BvOxy6YC0oWtwsO0a86k4E6mN/Y30= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654838578; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Hzb4jmRTmIhh1XEYh40jY/Hw+9GDCTWN+dycRpZC/xI=; b=Zft8BR2gx3Is4/E3z8jZLE+s91XAKAeDvRvI0zJ9p7MVoJrGN+EsGd8WBytcIh7Ewt+p2MTK/573waI5MlSWAbJOXno07kZnrzRzFA+J1a9+BXfAKpDBz8ZbN631Tp//rb+gD1EJjllFxoBgfZMa6M552XpWYAPEA/TBzJXBogw= 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 1654838578003575.9416628011688; Thu, 9 Jun 2022 22:22:58 -0700 (PDT) Received: from localhost ([::1]:37500 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nzX6m-0004bJ-Ub for importer@patchew.org; Fri, 10 Jun 2022 01:22:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39838) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nzWxp-0003Iz-MZ for qemu-devel@nongnu.org; Fri, 10 Jun 2022 01:13:41 -0400 Received: from mail-pf1-x42a.google.com ([2607:f8b0:4864:20::42a]:40631) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nzWxm-0007aH-U5 for qemu-devel@nongnu.org; Fri, 10 Jun 2022 01:13:41 -0400 Received: by mail-pf1-x42a.google.com with SMTP id z17so22890515pff.7 for ; Thu, 09 Jun 2022 22:13:37 -0700 (PDT) Received: from hsinchu16.internal.sifive.com (59-124-168-89.hinet-ip.hinet.net. [59.124.168.89]) by smtp.gmail.com with ESMTPSA id i13-20020a170902c94d00b0016362da9a03sm17853534pla.245.2022.06.09.22.13.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Jun 2022 22:13:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Hzb4jmRTmIhh1XEYh40jY/Hw+9GDCTWN+dycRpZC/xI=; b=iGsAB0gqLv5Mp/Lo1LacdzsDUDHfH3z/+0i2TWVSVMI1VFrnKs41VPUYojkc8v3VI/ 8aF+6I24/bc4CBinzm2moQR0XjRB3dvc8BQgqyqPC7qZIHepU3DKWQc4DOWvYACvprSq Cw+7ERR2FmYcG+ZMj+srfsutlvI+1EzPm866CjCX7A9bomlxOpQEGMqn9gpg8pf5TJDJ Ja7FRqMzJUUo/UuXc2nklyuT8z7ACSIaIaitsOIOCAxq9WWBvrrH9O3jL12hszRknAku 8JToWnx+LFJxRsBnbUTXq2sX6zcpddEi7+ldUzcBo0olr9EWn89rd6m2krhyrO63p2CN b4KA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Hzb4jmRTmIhh1XEYh40jY/Hw+9GDCTWN+dycRpZC/xI=; b=NYFeT1URLxgf7VDHrqambDeFWVD3T7HAyMzpJqkEUYXGFwuuEsypPebfJD07WfxcwY mfircOejxEPSfslzFfdFCHYL7oL4bx77qbmZmoUF61JE4OtQcYoe9UqzhZvXOC/Ur/mt lkxPnF6LNN5Zb8ftxC0v/uKe2KwJ6zKC701eAQGBes+Zc0h8Z6tQf5aE1Zow3M04Qv5K kb/ux6/fcC1czlK4bgG9D5S98/ZIuCIwCnFCCTrB7gvGw1ECaW07sjd+GCjOjg5TuYCi fv3bnrIHOFz2OwYm30J5wRnB2lbonKuw2EMWXycb6Hct33N7+IUokXZzoXaeeA5AECrQ vo9w== X-Gm-Message-State: AOAM532NgD2Xn0vKTRPFgPB+mf6QT2oK/Z7s6fpHWguyrfqZTAxXfQeq ZUKWRm9WfOFl3ld/tLeQoNNN0MaFwPvv0g== X-Google-Smtp-Source: ABdhPJyVggIR1qoBn/W5PVw5N2Ow3HfwoyyRAtbk5UgoUSLrY+dKJxBIRZ0v9eK9Fh0QqwBTUsOR5w== X-Received: by 2002:a05:6a00:194d:b0:51b:eb84:49b1 with SMTP id s13-20020a056a00194d00b0051beb8449b1mr34086207pfk.77.1654838016220; Thu, 09 Jun 2022 22:13:36 -0700 (PDT) From: frank.chang@sifive.com To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, Frank Chang , Palmer Dabbelt , Alistair Francis , Bin Meng Subject: [PATCH 1/9] target/riscv: debug: Determine the trigger type from tdata1.type Date: Fri, 10 Jun 2022 13:13:18 +0800 Message-Id: <20220610051328.7078-2-frank.chang@sifive.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220610051328.7078-1-frank.chang@sifive.com> References: <20220610051328.7078-1-frank.chang@sifive.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::42a; envelope-from=frank.chang@sifive.com; helo=mail-pf1-x42a.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=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" X-ZohoMail-DKIM: pass (identity @sifive.com) X-ZM-MESSAGEID: 1654838578800100001 Content-Type: text/plain; charset="utf-8" From: Frank Chang Current RISC-V debug assumes that only type 2 trigger is supported. To allow more types of triggers to be supported in the future (e.g. type 6 trigger, which is similar to type 2 trigger with additional functionality), we should determine the trigger type from tdata1.type. RV_MAX_TRIGGERS is also introduced in replacement of TRIGGER_TYPE2_NUM. Signed-off-by: Frank Chang Reviewed-by: Bin Meng --- target/riscv/cpu.h | 2 +- target/riscv/csr.c | 2 +- target/riscv/debug.c | 183 ++++++++++++++++++++++++++++------------- target/riscv/debug.h | 15 ++-- target/riscv/machine.c | 2 +- 5 files changed, 137 insertions(+), 67 deletions(-) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 7d6397acdf..535123a989 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -289,7 +289,7 @@ struct CPUArchState { =20 /* trigger module */ target_ulong trigger_cur; - type2_trigger_t type2_trig[TRIGGER_TYPE2_NUM]; + type2_trigger_t type2_trig[RV_MAX_TRIGGERS]; =20 /* machine specific rdtime callback */ uint64_t (*rdtime_fn)(void *); diff --git a/target/riscv/csr.c b/target/riscv/csr.c index 6dbe9b541f..005ae31a01 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -2776,7 +2776,7 @@ static RISCVException read_tdata(CPURISCVState *env, = int csrno, target_ulong *val) { /* return 0 in tdata1 to end the trigger enumeration */ - if (env->trigger_cur >=3D TRIGGER_NUM && csrno =3D=3D CSR_TDATA1) { + if (env->trigger_cur >=3D RV_MAX_TRIGGERS && csrno =3D=3D CSR_TDATA1) { *val =3D 0; return RISCV_EXCP_NONE; } diff --git a/target/riscv/debug.c b/target/riscv/debug.c index fc6e13222f..abbcd38a17 100644 --- a/target/riscv/debug.c +++ b/target/riscv/debug.c @@ -52,8 +52,15 @@ /* tdata availability of a trigger */ typedef bool tdata_avail[TDATA_NUM]; =20 -static tdata_avail tdata_mapping[TRIGGER_NUM] =3D { - [TRIGGER_TYPE2_IDX_0 ... TRIGGER_TYPE2_IDX_1] =3D { true, true, false = }, +static tdata_avail tdata_mapping[TRIGGER_TYPE_NUM] =3D { + [TRIGGER_TYPE_NO_EXIST] =3D { false, false, false }, + [TRIGGER_TYPE_AD_MATCH] =3D { true, true, true }, + [TRIGGER_TYPE_INST_CNT] =3D { true, false, true }, + [TRIGGER_TYPE_INT] =3D { true, true, true }, + [TRIGGER_TYPE_EXCP] =3D { true, true, true }, + [TRIGGER_TYPE_AD_MATCH6] =3D { true, true, true }, + [TRIGGER_TYPE_EXT_SRC] =3D { true, false, false }, + [TRIGGER_TYPE_UNAVAIL] =3D { true, true, true } }; =20 /* only breakpoint size 1/2/4/8 supported */ @@ -67,6 +74,26 @@ static int access_size[SIZE_NUM] =3D { [6 ... 15] =3D -1, }; =20 +static inline target_ulong extract_trigger_type(CPURISCVState *env, + target_ulong tdata1) +{ + switch (riscv_cpu_mxl(env)) { + case MXL_RV32: + return extract32(tdata1, 28, 4); + case MXL_RV64: + return extract64(tdata1, 60, 4); + default: + g_assert_not_reached(); + } +} + +static inline target_ulong get_trigger_type(CPURISCVState *env, + target_ulong trigger_index) +{ + target_ulong tdata1 =3D env->type2_trig[trigger_index].mcontrol; + return extract_trigger_type(env, tdata1); +} + static inline target_ulong trigger_type(CPURISCVState *env, trigger_type_t type) { @@ -89,15 +116,17 @@ static inline target_ulong trigger_type(CPURISCVState = *env, =20 bool tdata_available(CPURISCVState *env, int tdata_index) { + int trigger_type =3D get_trigger_type(env, env->trigger_cur); + if (unlikely(tdata_index >=3D TDATA_NUM)) { return false; } =20 - if (unlikely(env->trigger_cur >=3D TRIGGER_NUM)) { + if (unlikely(env->trigger_cur >=3D RV_MAX_TRIGGERS)) { return false; } =20 - return tdata_mapping[env->trigger_cur][tdata_index]; + return tdata_mapping[trigger_type][tdata_index]; } =20 target_ulong tselect_csr_read(CPURISCVState *env) @@ -137,6 +166,7 @@ static target_ulong tdata1_validate(CPURISCVState *env,= target_ulong val, qemu_log_mask(LOG_GUEST_ERROR, "ignoring type write to tdata1 register\n"); } + if (dmode !=3D 0) { qemu_log_mask(LOG_UNIMP, "debug mode is not supported\n"); } @@ -261,9 +291,8 @@ static void type2_breakpoint_remove(CPURISCVState *env,= target_ulong index) } =20 static target_ulong type2_reg_read(CPURISCVState *env, - target_ulong trigger_index, int tdata_i= ndex) + target_ulong index, int tdata_index) { - uint32_t index =3D trigger_index - TRIGGER_TYPE2_IDX_0; target_ulong tdata; =20 switch (tdata_index) { @@ -280,10 +309,9 @@ static target_ulong type2_reg_read(CPURISCVState *env, return tdata; } =20 -static void type2_reg_write(CPURISCVState *env, target_ulong trigger_index, +static void type2_reg_write(CPURISCVState *env, target_ulong index, int tdata_index, target_ulong val) { - uint32_t index =3D trigger_index - TRIGGER_TYPE2_IDX_0; target_ulong new_val; =20 switch (tdata_index) { @@ -309,35 +337,60 @@ static void type2_reg_write(CPURISCVState *env, targe= t_ulong trigger_index, return; } =20 -typedef target_ulong (*tdata_read_func)(CPURISCVState *env, - target_ulong trigger_index, - int tdata_index); - -static tdata_read_func trigger_read_funcs[TRIGGER_NUM] =3D { - [TRIGGER_TYPE2_IDX_0 ... TRIGGER_TYPE2_IDX_1] =3D type2_reg_read, -}; - -typedef void (*tdata_write_func)(CPURISCVState *env, - target_ulong trigger_index, - int tdata_index, - target_ulong val); - -static tdata_write_func trigger_write_funcs[TRIGGER_NUM] =3D { - [TRIGGER_TYPE2_IDX_0 ... TRIGGER_TYPE2_IDX_1] =3D type2_reg_write, -}; - target_ulong tdata_csr_read(CPURISCVState *env, int tdata_index) { - tdata_read_func read_func =3D trigger_read_funcs[env->trigger_cur]; + int trigger_type =3D get_trigger_type(env, env->trigger_cur); =20 - return read_func(env, env->trigger_cur, tdata_index); + switch (trigger_type) { + case TRIGGER_TYPE_AD_MATCH: + return type2_reg_read(env, env->trigger_cur, tdata_index); + break; + case TRIGGER_TYPE_INST_CNT: + case TRIGGER_TYPE_INT: + case TRIGGER_TYPE_EXCP: + case TRIGGER_TYPE_AD_MATCH6: + case TRIGGER_TYPE_EXT_SRC: + qemu_log_mask(LOG_UNIMP, "trigger type: %d is not supported\n", + trigger_type); + break; + case TRIGGER_TYPE_NO_EXIST: + case TRIGGER_TYPE_UNAVAIL: + break; + default: + g_assert_not_reached(); + } + + return 0; } =20 void tdata_csr_write(CPURISCVState *env, int tdata_index, target_ulong val) { - tdata_write_func write_func =3D trigger_write_funcs[env->trigger_cur]; + int trigger_type; + + if (tdata_index =3D=3D TDATA1) { + trigger_type =3D extract_trigger_type(env, val); + } else { + trigger_type =3D get_trigger_type(env, env->trigger_cur); + } =20 - return write_func(env, env->trigger_cur, tdata_index, val); + switch (trigger_type) { + case TRIGGER_TYPE_AD_MATCH: + type2_reg_write(env, env->trigger_cur, tdata_index, val); + break; + case TRIGGER_TYPE_INST_CNT: + case TRIGGER_TYPE_INT: + case TRIGGER_TYPE_EXCP: + case TRIGGER_TYPE_AD_MATCH6: + case TRIGGER_TYPE_EXT_SRC: + qemu_log_mask(LOG_UNIMP, "trigger type: %d is not supported\n", + trigger_type); + break; + case TRIGGER_TYPE_NO_EXIST: + case TRIGGER_TYPE_UNAVAIL: + break; + default: + g_assert_not_reached(); + } } =20 void riscv_cpu_debug_excp_handler(CPUState *cs) @@ -364,18 +417,28 @@ bool riscv_cpu_debug_check_breakpoint(CPUState *cs) CPUBreakpoint *bp; target_ulong ctrl; target_ulong pc; + int trigger_type; int i; =20 QTAILQ_FOREACH(bp, &cs->breakpoints, entry) { - for (i =3D 0; i < TRIGGER_TYPE2_NUM; i++) { - ctrl =3D env->type2_trig[i].mcontrol; - pc =3D env->type2_trig[i].maddress; - - if ((ctrl & TYPE2_EXEC) && (bp->pc =3D=3D pc)) { - /* check U/S/M bit against current privilege level */ - if ((ctrl >> 3) & BIT(env->priv)) { - return true; + for (i =3D 0; i < RV_MAX_TRIGGERS; i++) { + trigger_type =3D get_trigger_type(env, i); + + switch (trigger_type) { + case TRIGGER_TYPE_AD_MATCH: + ctrl =3D env->type2_trig[i].mcontrol; + pc =3D env->type2_trig[i].maddress; + + if ((ctrl & TYPE2_EXEC) && (bp->pc =3D=3D pc)) { + /* check U/S/M bit against current privilege level */ + if ((ctrl >> 3) & BIT(env->priv)) { + return true; + } } + break; + default: + /* other trigger types are not supported or irrelevant */ + break; } } } @@ -389,26 +452,36 @@ bool riscv_cpu_debug_check_watchpoint(CPUState *cs, C= PUWatchpoint *wp) CPURISCVState *env =3D &cpu->env; target_ulong ctrl; target_ulong addr; + int trigger_type; int flags; int i; =20 - for (i =3D 0; i < TRIGGER_TYPE2_NUM; i++) { - ctrl =3D env->type2_trig[i].mcontrol; - addr =3D env->type2_trig[i].maddress; - flags =3D 0; + for (i =3D 0; i < RV_MAX_TRIGGERS; i++) { + trigger_type =3D get_trigger_type(env, i); =20 - if (ctrl & TYPE2_LOAD) { - flags |=3D BP_MEM_READ; - } - if (ctrl & TYPE2_STORE) { - flags |=3D BP_MEM_WRITE; - } + switch (trigger_type) { + case TRIGGER_TYPE_AD_MATCH: + ctrl =3D env->type2_trig[i].mcontrol; + addr =3D env->type2_trig[i].maddress; + flags =3D 0; + + if (ctrl & TYPE2_LOAD) { + flags |=3D BP_MEM_READ; + } + if (ctrl & TYPE2_STORE) { + flags |=3D BP_MEM_WRITE; + } =20 - if ((wp->flags & flags) && (wp->vaddr =3D=3D addr)) { - /* check U/S/M bit against current privilege level */ - if ((ctrl >> 3) & BIT(env->priv)) { - return true; + if ((wp->flags & flags) && (wp->vaddr =3D=3D addr)) { + /* check U/S/M bit against current privilege level */ + if ((ctrl >> 3) & BIT(env->priv)) { + return true; + } } + break; + default: + /* other trigger types are not supported */ + break; } } =20 @@ -417,11 +490,11 @@ bool riscv_cpu_debug_check_watchpoint(CPUState *cs, C= PUWatchpoint *wp) =20 void riscv_trigger_init(CPURISCVState *env) { - target_ulong type2 =3D trigger_type(env, TRIGGER_TYPE_AD_MATCH); + target_ulong tdata1 =3D trigger_type(env, TRIGGER_TYPE_AD_MATCH); int i; =20 - /* type 2 triggers */ - for (i =3D 0; i < TRIGGER_TYPE2_NUM; i++) { + /* init to type 2 triggers */ + for (i =3D 0; i < RV_MAX_TRIGGERS; i++) { /* * type =3D TRIGGER_TYPE_AD_MATCH * dmode =3D 0 (both debug and M-mode can write tdata) @@ -435,7 +508,7 @@ void riscv_trigger_init(CPURISCVState *env) * chain =3D 0 (unimplemented, always 0) * match =3D 0 (always 0, when any compare value equals tdata2) */ - env->type2_trig[i].mcontrol =3D type2; + env->type2_trig[i].mcontrol =3D tdata1; env->type2_trig[i].maddress =3D 0; env->type2_trig[i].bp =3D NULL; env->type2_trig[i].wp =3D NULL; diff --git a/target/riscv/debug.h b/target/riscv/debug.h index 27b9cac6b4..c422553c27 100644 --- a/target/riscv/debug.h +++ b/target/riscv/debug.h @@ -22,13 +22,7 @@ #ifndef RISCV_DEBUG_H #define RISCV_DEBUG_H =20 -/* trigger indexes implemented */ -enum { - TRIGGER_TYPE2_IDX_0 =3D 0, - TRIGGER_TYPE2_IDX_1, - TRIGGER_TYPE2_NUM, - TRIGGER_NUM =3D TRIGGER_TYPE2_NUM -}; +#define RV_MAX_TRIGGERS 2 =20 /* register index of tdata CSRs */ enum { @@ -46,7 +40,8 @@ typedef enum { TRIGGER_TYPE_EXCP =3D 5, /* exception trigger */ TRIGGER_TYPE_AD_MATCH6 =3D 6, /* new address/data match trigger */ TRIGGER_TYPE_EXT_SRC =3D 7, /* external source trigger */ - TRIGGER_TYPE_UNAVAIL =3D 15 /* trigger exists, but unavailable */ + TRIGGER_TYPE_UNAVAIL =3D 15, /* trigger exists, but unavailable */ + TRIGGER_TYPE_NUM } trigger_type_t; =20 typedef struct { @@ -56,14 +51,16 @@ typedef struct { struct CPUWatchpoint *wp; } type2_trigger_t; =20 -/* tdata field masks */ +/* tdata1 field masks */ =20 #define RV32_TYPE(t) ((uint32_t)(t) << 28) #define RV32_TYPE_MASK (0xf << 28) #define RV32_DMODE BIT(27) +#define RV32_DATA_MASK 0x7ffffff #define RV64_TYPE(t) ((uint64_t)(t) << 60) #define RV64_TYPE_MASK (0xfULL << 60) #define RV64_DMODE BIT_ULL(59) +#define RV64_DATA_MASK 0x7ffffffffffffff =20 /* mcontrol field masks */ =20 diff --git a/target/riscv/machine.c b/target/riscv/machine.c index 2a437b29a1..54e523c26c 100644 --- a/target/riscv/machine.c +++ b/target/riscv/machine.c @@ -246,7 +246,7 @@ static const VMStateDescription vmstate_debug =3D { .needed =3D debug_needed, .fields =3D (VMStateField[]) { VMSTATE_UINTTL(env.trigger_cur, RISCVCPU), - VMSTATE_STRUCT_ARRAY(env.type2_trig, RISCVCPU, TRIGGER_TYPE2_NUM, + VMSTATE_STRUCT_ARRAY(env.type2_trig, RISCVCPU, RV_MAX_TRIGGERS, 0, vmstate_debug_type2, type2_trigger_t), VMSTATE_END_OF_LIST() } --=20 2.36.1 From nobody Mon Feb 9 01:11:39 2026 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=1654838394; cv=none; d=zohomail.com; s=zohoarc; b=jPg4NTjsf9Z5+VqAtfLjYh/rLXRP9q0PHWaO5cTiNjKyZPhYy5zPjSPlSPL3loakRBcXGmV9q1risvSZqfNSuA0ndzSVOVKap6N3j+oRxtfsi0qNR4L1X9GNmwYYWF6glYRUoRUcLencpuhKi0h/OOpbVoL9DPlWzkEPfaCXCKw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654838394; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=V2ge7bZK9xSY2snc2hjPAO9/G+RG135skC2HfVo1UCA=; b=leyRm8sVW21lAJff5ppb+BvL83CtEXG7gWZkRlEskxjAkmXjFfs6jweoFU13lkjWKwZqTgQ38gpy/dg+HA/mcg78fNVZnZsvfa+y8RoCvfzC/sXCZv2BBb5laBF9ZikFmS3r9Xz73VIrQfGrMVlOHIZ5a8C11yyyqFf+rueBBes= 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 1654838394387277.3046372374173; Thu, 9 Jun 2022 22:19:54 -0700 (PDT) Received: from localhost ([::1]:58840 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nzX3o-0007Bj-SM for importer@patchew.org; Fri, 10 Jun 2022 01:19:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39858) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nzWxr-0003KP-J5 for qemu-devel@nongnu.org; Fri, 10 Jun 2022 01:13:48 -0400 Received: from mail-pg1-x533.google.com ([2607:f8b0:4864:20::533]:45711) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nzWxp-0007ah-Ii for qemu-devel@nongnu.org; Fri, 10 Jun 2022 01:13:42 -0400 Received: by mail-pg1-x533.google.com with SMTP id 184so7820963pga.12 for ; Thu, 09 Jun 2022 22:13:41 -0700 (PDT) Received: from hsinchu16.internal.sifive.com (59-124-168-89.hinet-ip.hinet.net. [59.124.168.89]) by smtp.gmail.com with ESMTPSA id i13-20020a170902c94d00b0016362da9a03sm17853534pla.245.2022.06.09.22.13.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Jun 2022 22:13:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=V2ge7bZK9xSY2snc2hjPAO9/G+RG135skC2HfVo1UCA=; b=cWa4SJp2oi9+diMwf1lLdbJL8vkBb38akECZaz/bjFSUB7KyZfgubD3lyxJ1I7OtDN /6pFLILnsl7sfbkiy5eN1DzGyAqEFRhrsxFjbmOJTQ2orqE2zvfaP3536q8IuZK+FY8Q 1HdPCXX3SC+QBbsxiiWBtRnXu9F15CLd5p1NmzN4iZoyzHAk5Ln7Egzl2qU5TGVj+2Yj lMiL7hX47QehAwBrsgLaFT7Yrqngo1KNeIv2YhcXp6FIjMaE/pcStOR92fpe5MjBIrV2 LAhKYVhcmRw1V68b4d5SSIBt5l7uBqYmYRMVkd1ZPQK/sgokt2oLFaHhs3EROSnJMppX H+Xg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=V2ge7bZK9xSY2snc2hjPAO9/G+RG135skC2HfVo1UCA=; b=V1m/RhxiEDAq5J+aQywzbWej3H+Mf+HCVKLlpGPVBj9iCu5VgL5WlXI2mt2YNt2ifr +/g6fPbEHvkW4f7htm9DOiMyA1cCFT279emRQuxu2ODXT/Cr/g4giEgQ0sSQHIpkBZ5Y lLFLVEvBvybIYr8w05gNyJKgoOJUfz4eRvx41z/4M/e5Y0gxtBrf3oPxVDMTm1NnxEU2 F9sF1QtNeR6yGYugDCsT/VRypdB4se+YpmO9dLlxG4QbLB4pVxxtrSxuPk0UzIu0hoFV vs+XKCkbb0q+mTi5sxnGD7GwHeIFaLLEuAorAYc2i53uD0AMCT5P0ZVNc9dPDp2pzT3F 7pyA== X-Gm-Message-State: AOAM531BDM19KukQG7Qj8nn3p0oBT2MHGTHb9SkQ73cBEN1xj1undCpl 3d6WTCyJMmXQHMRU3B+aF9UDsIVAGeoBCQ== X-Google-Smtp-Source: ABdhPJyOIIvHgn9pCjF8E6l59Qug0LjsfIIw/LPyoUhG4qaJXeBoedUvQmR8UFZLigawA5f9w18VLw== X-Received: by 2002:a05:6a00:b8b:b0:51b:eefc:7fd2 with SMTP id g11-20020a056a000b8b00b0051beefc7fd2mr33919186pfj.74.1654838019796; Thu, 09 Jun 2022 22:13:39 -0700 (PDT) From: frank.chang@sifive.com To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, Frank Chang , Palmer Dabbelt , Alistair Francis , Bin Meng Subject: [PATCH 2/9] target/riscv: debug: Introduce build_tdata1() to build tdata1 register content Date: Fri, 10 Jun 2022 13:13:19 +0800 Message-Id: <20220610051328.7078-3-frank.chang@sifive.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220610051328.7078-1-frank.chang@sifive.com> References: <20220610051328.7078-1-frank.chang@sifive.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::533; envelope-from=frank.chang@sifive.com; helo=mail-pg1-x533.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=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" X-ZohoMail-DKIM: pass (identity @sifive.com) X-ZM-MESSAGEID: 1654838396042100001 Content-Type: text/plain; charset="utf-8" From: Frank Chang Introduce build_tdata1() to build tdata1 register content, which can be shared among all types of triggers. Signed-off-by: Frank Chang Reviewed-by: Bin Meng --- target/riscv/debug.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/target/riscv/debug.c b/target/riscv/debug.c index abbcd38a17..089aae0696 100644 --- a/target/riscv/debug.c +++ b/target/riscv/debug.c @@ -94,18 +94,23 @@ static inline target_ulong get_trigger_type(CPURISCVSta= te *env, return extract_trigger_type(env, tdata1); } =20 -static inline target_ulong trigger_type(CPURISCVState *env, - trigger_type_t type) +static inline target_ulong build_tdata1(CPURISCVState *env, + trigger_type_t type, + bool dmode, target_ulong data) { target_ulong tdata1; =20 switch (riscv_cpu_mxl(env)) { case MXL_RV32: - tdata1 =3D RV32_TYPE(type); + tdata1 =3D RV32_TYPE(type) | + (dmode ? RV32_DMODE : 0) | + (data & RV32_DATA_MASK); break; case MXL_RV64: case MXL_RV128: - tdata1 =3D RV64_TYPE(type); + tdata1 =3D RV64_TYPE(type) | + (dmode ? RV64_DMODE : 0) | + (data & RV64_DATA_MASK); break; default: g_assert_not_reached(); @@ -490,7 +495,7 @@ bool riscv_cpu_debug_check_watchpoint(CPUState *cs, CPU= Watchpoint *wp) =20 void riscv_trigger_init(CPURISCVState *env) { - target_ulong tdata1 =3D trigger_type(env, TRIGGER_TYPE_AD_MATCH); + target_ulong tdata1 =3D build_tdata1(env, TRIGGER_TYPE_AD_MATCH, 0, 0); int i; =20 /* init to type 2 triggers */ --=20 2.36.1 From nobody Mon Feb 9 01:11:39 2026 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=1654838437; cv=none; d=zohomail.com; s=zohoarc; b=KzVHerKftPHtdMNi6Mr1djbO+NiKFXP8eElFQ3s1MQUXx3DYUNuZmWl5vAxvp23b63wdbK1jpZxYIjRZ2Y3wsx5VAiiqy5NoyUcf91OhG8zXhgz3BPfGA9qQsGgxMDbrjLZ2cFnAF/FQGlCaAG1QiP9u7xpeP2WFYKB1bGrJOqM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654838437; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=nJd16wCPC1aby4umBqx1Uz1gQnaP+7WjNfOep9g6YBQ=; b=U2dhDxd40A/bxAFjwa6rEN86+wYY6QOKdcsNyPosKNkPbGcyRCrYNWsz2w2IsfqI7oeIDnFh/ia1woRf49D+nd/shBs9or/ldpft1HHfP/GxTQnxU3SuthkreUhYW0QkiiJFsmpMBJ90tGTabhGtl5ppf2K4Ny56QHSz2ICL4Mc= 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 1654838437790446.38368560226286; Thu, 9 Jun 2022 22:20:37 -0700 (PDT) Received: from localhost ([::1]:60284 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nzX4W-0008DD-2m for importer@patchew.org; Fri, 10 Jun 2022 01:20:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39928) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nzWxx-0003Lv-Qy for qemu-devel@nongnu.org; Fri, 10 Jun 2022 01:13:50 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]:40782) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nzWxu-0007bG-8S for qemu-devel@nongnu.org; Fri, 10 Jun 2022 01:13:48 -0400 Received: by mail-pl1-x629.google.com with SMTP id i1so21922656plg.7 for ; Thu, 09 Jun 2022 22:13:44 -0700 (PDT) Received: from hsinchu16.internal.sifive.com (59-124-168-89.hinet-ip.hinet.net. [59.124.168.89]) by smtp.gmail.com with ESMTPSA id i13-20020a170902c94d00b0016362da9a03sm17853534pla.245.2022.06.09.22.13.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Jun 2022 22:13:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=nJd16wCPC1aby4umBqx1Uz1gQnaP+7WjNfOep9g6YBQ=; b=flKV39HuI7vHJF6vhbppNUdNLxWzpa24Hf8cc5QMozmFEtYmrRXoPdlacsOgDZ7YaH eIY0LB/K/jz3BDIdKLsvqbbY2FvoCM532lydk7z3NRcCtvcE/2+qWEhFu1ahyff7t2eI ANTmHK1HNrIL7gpdmFSBjdJ144ei/L0WG3MN7fWO1pnpKmBi5ibQj9IBOhQiPqVigvS5 uyHFdbZLiiK751do62xjH4UR1/qyDtnkCJstxLG3KJHcF0GvqNRUP8xyRxNIkv9O6fQ2 TKUJbmp2/UPYGDKTB9hi5NMbnzIgQBy/M8HBrwpFY/D0eNOHgl5n8Ihtbw69zenCxOjn iqFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=nJd16wCPC1aby4umBqx1Uz1gQnaP+7WjNfOep9g6YBQ=; b=yCwCaHJfrp3GYFbtLrekRYGk0Jck466/0+S7ldUL6XxZ/BGjDIZt+Fj7nQ3XQSyNoh XbLShGZcSJMR8cM4v5mCeYmLarYGiRb83t39H5N3tra1Tza+ONPlKFm7IYqOuW6tzvjf O8ZrsRWTQLF/4A2g+bhiFP1iw3EiHtHZcnvC3Ait1VUbfLeUamjWQ5F34KK6tTfAs01Z ekIQ/4Dr2igmxSC4aMA3CsoekvKNflIAF0Qyk9YNfdH94Fi1NyWY55XsikCMfl10rV6q 0/Bw8EVBnXY61QdavRZWbgb3xxofajg+Vq9wapxx/gHQ0IQ2oTiOowNlKJSaaJx8KnOW Tj0g== X-Gm-Message-State: AOAM530PYCOR9AlW1+yYCGO2fRJ+nOobjhRbu9ELuITSI2cO1JC1Pbsd nkOfqSj/W3kQ8YwG0pom8N+2XOuzIy6MLg== X-Google-Smtp-Source: ABdhPJz9s9Vaw1lNrC98Y9E8yTQhs7PnlDrYys9+980VqAvlwq/5h85ATtbA84wKLN4IGh8BtXnOfQ== X-Received: by 2002:a17:90b:3506:b0:1e8:8449:6acb with SMTP id ls6-20020a17090b350600b001e884496acbmr6851980pjb.27.1654838022929; Thu, 09 Jun 2022 22:13:42 -0700 (PDT) From: frank.chang@sifive.com To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, Frank Chang , Palmer Dabbelt , Alistair Francis , Bin Meng Subject: [PATCH 3/9] target/riscv: debug: Introduce tdata1, tdata2, and tdata3 CSRs Date: Fri, 10 Jun 2022 13:13:20 +0800 Message-Id: <20220610051328.7078-4-frank.chang@sifive.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220610051328.7078-1-frank.chang@sifive.com> References: <20220610051328.7078-1-frank.chang@sifive.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::629; envelope-from=frank.chang@sifive.com; helo=mail-pl1-x629.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" X-ZohoMail-DKIM: pass (identity @sifive.com) X-ZM-MESSAGEID: 1654838438099100001 Content-Type: text/plain; charset="utf-8" From: Frank Chang Replace type2_trigger_t with the real tdata1, tdata2, and tdata3 CSRs, which allows us to support more types of triggers in the future. Signed-off-by: Frank Chang --- target/riscv/cpu.h | 6 ++- target/riscv/debug.c | 101 ++++++++++++++++------------------------- target/riscv/debug.h | 7 --- target/riscv/machine.c | 20 ++------ 4 files changed, 48 insertions(+), 86 deletions(-) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 535123a989..bac5f00722 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -289,7 +289,11 @@ struct CPUArchState { =20 /* trigger module */ target_ulong trigger_cur; - type2_trigger_t type2_trig[RV_MAX_TRIGGERS]; + target_ulong tdata1[RV_MAX_TRIGGERS]; + target_ulong tdata2[RV_MAX_TRIGGERS]; + target_ulong tdata3[RV_MAX_TRIGGERS]; + struct CPUBreakpoint *cpu_breakpoint[RV_MAX_TRIGGERS]; + struct CPUWatchpoint *cpu_watchpoint[RV_MAX_TRIGGERS]; =20 /* machine specific rdtime callback */ uint64_t (*rdtime_fn)(void *); diff --git a/target/riscv/debug.c b/target/riscv/debug.c index 089aae0696..6913682f75 100644 --- a/target/riscv/debug.c +++ b/target/riscv/debug.c @@ -90,8 +90,7 @@ static inline target_ulong extract_trigger_type(CPURISCVS= tate *env, static inline target_ulong get_trigger_type(CPURISCVState *env, target_ulong trigger_index) { - target_ulong tdata1 =3D env->type2_trig[trigger_index].mcontrol; - return extract_trigger_type(env, tdata1); + return extract_trigger_type(env, env->tdata1[trigger_index]); } =20 static inline target_ulong build_tdata1(CPURISCVState *env, @@ -187,6 +186,8 @@ static inline void warn_always_zero_bit(target_ulong va= l, target_ulong mask, } } =20 +/* type 2 trigger */ + static uint32_t type2_breakpoint_size(CPURISCVState *env, target_ulong ctr= l) { uint32_t size, sizelo, sizehi =3D 0; @@ -246,8 +247,8 @@ static target_ulong type2_mcontrol_validate(CPURISCVSta= te *env, =20 static void type2_breakpoint_insert(CPURISCVState *env, target_ulong index) { - target_ulong ctrl =3D env->type2_trig[index].mcontrol; - target_ulong addr =3D env->type2_trig[index].maddress; + target_ulong ctrl =3D env->tdata1[index]; + target_ulong addr =3D env->tdata2[index]; bool enabled =3D type2_breakpoint_enabled(ctrl); CPUState *cs =3D env_cpu(env); int flags =3D BP_CPU | BP_STOP_BEFORE_ACCESS; @@ -258,7 +259,7 @@ static void type2_breakpoint_insert(CPURISCVState *env,= target_ulong index) } =20 if (ctrl & TYPE2_EXEC) { - cpu_breakpoint_insert(cs, addr, flags, &env->type2_trig[index].bp); + cpu_breakpoint_insert(cs, addr, flags, &env->cpu_breakpoint[index]= ); } =20 if (ctrl & TYPE2_LOAD) { @@ -272,10 +273,10 @@ static void type2_breakpoint_insert(CPURISCVState *en= v, target_ulong index) size =3D type2_breakpoint_size(env, ctrl); if (size !=3D 0) { cpu_watchpoint_insert(cs, addr, size, flags, - &env->type2_trig[index].wp); + &env->cpu_watchpoint[index]); } else { cpu_watchpoint_insert(cs, addr, 8, flags, - &env->type2_trig[index].wp); + &env->cpu_watchpoint[index]); } } } @@ -284,34 +285,15 @@ static void type2_breakpoint_remove(CPURISCVState *en= v, target_ulong index) { CPUState *cs =3D env_cpu(env); =20 - if (env->type2_trig[index].bp) { - cpu_breakpoint_remove_by_ref(cs, env->type2_trig[index].bp); - env->type2_trig[index].bp =3D NULL; + if (env->cpu_breakpoint[index]) { + cpu_breakpoint_remove_by_ref(cs, env->cpu_breakpoint[index]); + env->cpu_breakpoint[index] =3D NULL; } =20 - if (env->type2_trig[index].wp) { - cpu_watchpoint_remove_by_ref(cs, env->type2_trig[index].wp); - env->type2_trig[index].wp =3D NULL; - } -} - -static target_ulong type2_reg_read(CPURISCVState *env, - target_ulong index, int tdata_index) -{ - target_ulong tdata; - - switch (tdata_index) { - case TDATA1: - tdata =3D env->type2_trig[index].mcontrol; - break; - case TDATA2: - tdata =3D env->type2_trig[index].maddress; - break; - default: - g_assert_not_reached(); + if (env->cpu_watchpoint[index]) { + cpu_watchpoint_remove_by_ref(cs, env->cpu_watchpoint[index]); + env->cpu_watchpoint[index] =3D NULL; } - - return tdata; } =20 static void type2_reg_write(CPURISCVState *env, target_ulong index, @@ -322,19 +304,23 @@ static void type2_reg_write(CPURISCVState *env, targe= t_ulong index, switch (tdata_index) { case TDATA1: new_val =3D type2_mcontrol_validate(env, val); - if (new_val !=3D env->type2_trig[index].mcontrol) { - env->type2_trig[index].mcontrol =3D new_val; + if (new_val !=3D env->tdata1[index]) { + env->tdata1[index] =3D new_val; type2_breakpoint_remove(env, index); type2_breakpoint_insert(env, index); } break; case TDATA2: - if (val !=3D env->type2_trig[index].maddress) { - env->type2_trig[index].maddress =3D val; + if (val !=3D env->tdata2[index]) { + env->tdata2[index] =3D val; type2_breakpoint_remove(env, index); type2_breakpoint_insert(env, index); } break; + case TDATA3: + qemu_log_mask(LOG_UNIMP, + "tdata3 is not supported for type 2 trigger\n"); + break; default: g_assert_not_reached(); } @@ -344,28 +330,16 @@ static void type2_reg_write(CPURISCVState *env, targe= t_ulong index, =20 target_ulong tdata_csr_read(CPURISCVState *env, int tdata_index) { - int trigger_type =3D get_trigger_type(env, env->trigger_cur); - - switch (trigger_type) { - case TRIGGER_TYPE_AD_MATCH: - return type2_reg_read(env, env->trigger_cur, tdata_index); - break; - case TRIGGER_TYPE_INST_CNT: - case TRIGGER_TYPE_INT: - case TRIGGER_TYPE_EXCP: - case TRIGGER_TYPE_AD_MATCH6: - case TRIGGER_TYPE_EXT_SRC: - qemu_log_mask(LOG_UNIMP, "trigger type: %d is not supported\n", - trigger_type); - break; - case TRIGGER_TYPE_NO_EXIST: - case TRIGGER_TYPE_UNAVAIL: - break; + switch (tdata_index) { + case TDATA1: + return env->tdata1[env->trigger_cur]; + case TDATA2: + return env->tdata2[env->trigger_cur]; + case TDATA3: + return env->tdata3[env->trigger_cur]; default: g_assert_not_reached(); } - - return 0; } =20 void tdata_csr_write(CPURISCVState *env, int tdata_index, target_ulong val) @@ -431,8 +405,8 @@ bool riscv_cpu_debug_check_breakpoint(CPUState *cs) =20 switch (trigger_type) { case TRIGGER_TYPE_AD_MATCH: - ctrl =3D env->type2_trig[i].mcontrol; - pc =3D env->type2_trig[i].maddress; + ctrl =3D env->tdata1[i]; + pc =3D env->tdata2[i]; =20 if ((ctrl & TYPE2_EXEC) && (bp->pc =3D=3D pc)) { /* check U/S/M bit against current privilege level */ @@ -466,8 +440,8 @@ bool riscv_cpu_debug_check_watchpoint(CPUState *cs, CPU= Watchpoint *wp) =20 switch (trigger_type) { case TRIGGER_TYPE_AD_MATCH: - ctrl =3D env->type2_trig[i].mcontrol; - addr =3D env->type2_trig[i].maddress; + ctrl =3D env->tdata1[i]; + addr =3D env->tdata2[i]; flags =3D 0; =20 if (ctrl & TYPE2_LOAD) { @@ -513,9 +487,10 @@ void riscv_trigger_init(CPURISCVState *env) * chain =3D 0 (unimplemented, always 0) * match =3D 0 (always 0, when any compare value equals tdata2) */ - env->type2_trig[i].mcontrol =3D tdata1; - env->type2_trig[i].maddress =3D 0; - env->type2_trig[i].bp =3D NULL; - env->type2_trig[i].wp =3D NULL; + env->tdata1[i] =3D tdata1; + env->tdata2[i] =3D 0; + env->tdata3[i] =3D 0; + env->cpu_breakpoint[i] =3D NULL; + env->cpu_watchpoint[i] =3D NULL; } } diff --git a/target/riscv/debug.h b/target/riscv/debug.h index c422553c27..76146f373a 100644 --- a/target/riscv/debug.h +++ b/target/riscv/debug.h @@ -44,13 +44,6 @@ typedef enum { TRIGGER_TYPE_NUM } trigger_type_t; =20 -typedef struct { - target_ulong mcontrol; - target_ulong maddress; - struct CPUBreakpoint *bp; - struct CPUWatchpoint *wp; -} type2_trigger_t; - /* tdata1 field masks */ =20 #define RV32_TYPE(t) ((uint32_t)(t) << 28) diff --git a/target/riscv/machine.c b/target/riscv/machine.c index 54e523c26c..a1db8b9559 100644 --- a/target/riscv/machine.c +++ b/target/riscv/machine.c @@ -228,26 +228,16 @@ static bool debug_needed(void *opaque) return riscv_feature(env, RISCV_FEATURE_DEBUG); } =20 -static const VMStateDescription vmstate_debug_type2 =3D { - .name =3D "cpu/debug/type2", - .version_id =3D 1, - .minimum_version_id =3D 1, - .fields =3D (VMStateField[]) { - VMSTATE_UINTTL(mcontrol, type2_trigger_t), - VMSTATE_UINTTL(maddress, type2_trigger_t), - VMSTATE_END_OF_LIST() - } -}; - static const VMStateDescription vmstate_debug =3D { .name =3D "cpu/debug", - .version_id =3D 1, - .minimum_version_id =3D 1, + .version_id =3D 2, + .minimum_version_id =3D 2, .needed =3D debug_needed, .fields =3D (VMStateField[]) { VMSTATE_UINTTL(env.trigger_cur, RISCVCPU), - VMSTATE_STRUCT_ARRAY(env.type2_trig, RISCVCPU, RV_MAX_TRIGGERS, - 0, vmstate_debug_type2, type2_trigger_t), + VMSTATE_UINTTL_ARRAY(env.tdata1, RISCVCPU, RV_MAX_TRIGGERS), + VMSTATE_UINTTL_ARRAY(env.tdata2, RISCVCPU, RV_MAX_TRIGGERS), + VMSTATE_UINTTL_ARRAY(env.tdata3, RISCVCPU, RV_MAX_TRIGGERS), VMSTATE_END_OF_LIST() } }; --=20 2.36.1 From nobody Mon Feb 9 01:11:39 2026 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=1654838357; cv=none; d=zohomail.com; s=zohoarc; b=GfmHaqkYrxK3AOuzACkBjXZ/lkstqjvVWzqd/4j2NQVSw4IUXHc7vEVvemwOzmGJ4Eln5cNZzxyzt0+Ptd/gt6vFMpfBNsLiDQf+6X5xcXr/J8e5bDpTsWWRuS4++0vcmefWnhDSdDjkfM/SEqJRqgl4T1yUUbVdWhIpi6Dhd9k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654838357; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=2p8l64Jlaec7udx1XYJ9DFcPbvulXsTX1OpQh2oSmd8=; b=FSb5KbEjab4vT74q8m2h6lzD6SPsu5nT5/4R3uXwUUGWxAP1yJuzUcCtXokW7GESDLhLtNm/dA1a1o1gW2cWQO3IAQOG1aelVLG+JXLfzVKdPHXV+Ny6NYv2dihEVoftt8ueuXP4VwLXzxIOeN8PdpOTEzmKKjehjyx9Dsp8o4Q= 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 1654838357828649.6153407669896; Thu, 9 Jun 2022 22:19:17 -0700 (PDT) Received: from localhost ([::1]:58444 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nzX3D-0006vZ-JI for importer@patchew.org; Fri, 10 Jun 2022 01:19:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39930) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nzWxx-0003Lw-RV for qemu-devel@nongnu.org; Fri, 10 Jun 2022 01:13:50 -0400 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]:42887) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nzWxv-0007bZ-Dm for qemu-devel@nongnu.org; Fri, 10 Jun 2022 01:13:49 -0400 Received: by mail-pl1-x62a.google.com with SMTP id f8so2881540plo.9 for ; Thu, 09 Jun 2022 22:13:47 -0700 (PDT) Received: from hsinchu16.internal.sifive.com (59-124-168-89.hinet-ip.hinet.net. [59.124.168.89]) by smtp.gmail.com with ESMTPSA id i13-20020a170902c94d00b0016362da9a03sm17853534pla.245.2022.06.09.22.13.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Jun 2022 22:13:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=2p8l64Jlaec7udx1XYJ9DFcPbvulXsTX1OpQh2oSmd8=; b=kgkU1Innt4ang0oOs+QLfmvaMmiSrLPa5AGFYBqY119YQ2e7Z1TjzFYhHhwO23Drmi x5CQrUZ4c+u5MFblcqv96LgDH+CRgElMGt950rINFPCwo1zvv3qMok6K/vRcraDuG3Ri ek0WoJqVszmMkV2gTlAD//wQwLq4r9tIQvfKyjjEqYxRAjLpnTaoWmfbVH2DGiO+EZvV v54W9vzK19Wttnm2F505uV5rV/O0wn4Towwtls4+14bMc0FC+4CCN2kkKFYROxX0JmMK K5bAkO+4ylfGnRywxEFww0SDDG4Jim3wCKU8TOOjEBTo2zuKOMAuGjfUOYBhxz0D+MEQ TJ6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=2p8l64Jlaec7udx1XYJ9DFcPbvulXsTX1OpQh2oSmd8=; b=WWBsLeGKW3w2lvVpUfFNRKXyOkObOXWW9YlD1IdEFscIrnjyt53JncFfi06f2MXkUo WKSessgrAADj9T2KBzMGpfQ9t9QHPW6Cpvc9X1X2Tx90RMr1/WOT1F4fVMcJ66WV+10A 07qQ9eQHABLIxaff1keMKlv7Uao5+vwguaewcfCglitYvC1VwFGNh26u+VIPfzqisa0E JooZglsCe440j04jhK+cMjJ2L2xOwSAWMlmMNlYELsn556UM5Q+3XR6ou0PIJ2EdxKD5 Cjf0NcVSCEEDpbgbcaj5GwVsVToRagCBk7ddk7i+wDg8MF6n3FoNjxJD9sr47VyGWR/k EMzQ== X-Gm-Message-State: AOAM532PfWwuwFdjILLpQkFLUgq0Mf6KU0RxeRgUnkRzpKNlWMLq2vyi igiUfyAvI31G6tAINKTrm+OpC9U2mMkJ9A== X-Google-Smtp-Source: ABdhPJy+4cSqPZbIh54m+UbdBrsFbDPviY3tXkHvpx7lObb8/JUZiXkBb8vmrYHoNbcv3Sd1jWYlkQ== X-Received: by 2002:a17:90b:1b07:b0:1e8:41d8:fa2 with SMTP id nu7-20020a17090b1b0700b001e841d80fa2mr6924164pjb.204.1654838025942; Thu, 09 Jun 2022 22:13:45 -0700 (PDT) From: frank.chang@sifive.com To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, Frank Chang , Palmer Dabbelt , Alistair Francis , Bin Meng Subject: [PATCH 4/9] target/riscv: debug: Restrict the range of tselect value can be written Date: Fri, 10 Jun 2022 13:13:21 +0800 Message-Id: <20220610051328.7078-5-frank.chang@sifive.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220610051328.7078-1-frank.chang@sifive.com> References: <20220610051328.7078-1-frank.chang@sifive.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::62a; envelope-from=frank.chang@sifive.com; helo=mail-pl1-x62a.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" X-ZohoMail-DKIM: pass (identity @sifive.com) X-ZM-MESSAGEID: 1654838360312100001 Content-Type: text/plain; charset="utf-8" From: Frank Chang The value of tselect CSR can be written should be limited within the range of supported triggers number. Signed-off-by: Frank Chang Reviewed-by: Bin Meng --- target/riscv/debug.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/target/riscv/debug.c b/target/riscv/debug.c index 6913682f75..296192ffc4 100644 --- a/target/riscv/debug.c +++ b/target/riscv/debug.c @@ -126,10 +126,6 @@ bool tdata_available(CPURISCVState *env, int tdata_ind= ex) return false; } =20 - if (unlikely(env->trigger_cur >=3D RV_MAX_TRIGGERS)) { - return false; - } - return tdata_mapping[trigger_type][tdata_index]; } =20 @@ -140,8 +136,9 @@ target_ulong tselect_csr_read(CPURISCVState *env) =20 void tselect_csr_write(CPURISCVState *env, target_ulong val) { - /* all target_ulong bits of tselect are implemented */ - env->trigger_cur =3D val; + if (val < RV_MAX_TRIGGERS) { + env->trigger_cur =3D val; + } } =20 static target_ulong tdata1_validate(CPURISCVState *env, target_ulong val, --=20 2.36.1 From nobody Mon Feb 9 01:11:39 2026 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=1654838635; cv=none; d=zohomail.com; s=zohoarc; b=cCgDwt04y0ZaUf2aQ33FoeDUEQKnmTYjGPUN71NrjRp+6ox+2Pi1DnoYovY0On/EsWe1YandoWNep2v9sGqayRS21Bi5U59fCWGvMutsoGKkveW/g4sk7a1Scm6xEsD7KhwOaXGQTpCLSTcuQvRnrOKQk/E9HpPdKDSNrwuGBqg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654838635; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=b8suD+KlRNISOrVxOA1LK6g6AqsctsKZwbip8bLZz0M=; b=h5NHvPuLwMiFyrVVbuEe3OCZcKrx1h9/7bbZvoEb1dASlVYKFTaUr1B7LQPrYSzriuIQpSADI5kF4WzYWo+DLzdgJ25MMHeqSTqgF/zeeE0TV5GILMfkfEteU2tIS9I85dO1+SSNmxF0uev7P8dCjan3ugRD8Ekuag9pf3Addus= 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 165483863584433.60437749070286; Thu, 9 Jun 2022 22:23:55 -0700 (PDT) Received: from localhost ([::1]:39588 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nzX7i-000629-RJ for importer@patchew.org; Fri, 10 Jun 2022 01:23:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39972) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nzWy0-0003Nw-7f for qemu-devel@nongnu.org; Fri, 10 Jun 2022 01:13:53 -0400 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]:45023) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nzWxy-0007c4-HA for qemu-devel@nongnu.org; Fri, 10 Jun 2022 01:13:51 -0400 Received: by mail-pj1-x1029.google.com with SMTP id gc3-20020a17090b310300b001e33092c737so1176616pjb.3 for ; Thu, 09 Jun 2022 22:13:50 -0700 (PDT) Received: from hsinchu16.internal.sifive.com (59-124-168-89.hinet-ip.hinet.net. [59.124.168.89]) by smtp.gmail.com with ESMTPSA id i13-20020a170902c94d00b0016362da9a03sm17853534pla.245.2022.06.09.22.13.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Jun 2022 22:13:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=b8suD+KlRNISOrVxOA1LK6g6AqsctsKZwbip8bLZz0M=; b=laO8iV0+VvzmLyQBFUDCMYaX1Z5UPaPFtSigK0bE2fLbyOF3mbk7ERNT58kUDVaZvp sX2Khp7bUmjlXDA+DbtGDCZz52TDgFqk6aCHbVoBhr1Nw1rueph19grbud+gzh8Jok5q octXrnEUgjOtf64mOsHj6x6e4UsAr666/nLcZB/5YVUoc2f/HCh0G22YCqJ8kUG4BcDq QJSLSvp0lmJ8670XxSIsIvWOu4zVvocCnAGJ8bZMBHBBIdafVZgWz6Wa6boXXH/yuGXp vojLnKbsMDVRb2lgKPWX5hvT/w0mHKJ/+zf5yHr1+y01ruVkgQlpo10DtlVHz4u1Vyr1 hJQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=b8suD+KlRNISOrVxOA1LK6g6AqsctsKZwbip8bLZz0M=; b=ddXv1HU/R7d5lMTOiGbG+0jlg7pw+VLKkeDl68gxLDvkByj+n86fijM8TZIxnKrEJP f2e2Wnda9CRiCTfeNT4jNfw2J32A95RctBlXgMLO1MTBkcGbgQFg5TooMz3l0OBz3EQo LcEOoUQ0z+oDoTjNpKyNyH+lZnfYkZkRZS4/cVLgEzvV/RqYN7ce3WoWN1J/gfY5CQDr 9w1ffLnIXKNxvlNWsAUk7d904UzUfJRcXeGh8O+TQ5EWq6ALqcLZHbSr7zk/r6OD+wTz zcO8VKvi7Ww4VvKBhzUlcvo5egDpmfc6ciMFdWWgghBPBMHkiX9VJsmRM2OhEt4sb/od Dt+w== X-Gm-Message-State: AOAM531g47ZJIOkCBAVHFOQg+7PLZNXTWIE4ipwdncsRbp4FRiNKZdnj t8LGEqSxAv8TGNYLeiQyjVQzbRsMDjM+XQ== X-Google-Smtp-Source: ABdhPJy+rS8AE1Ek0Rr97s2kucUSKZhaiTq7ZeebzmVeAYn6DOXpfMTMXTX7rzpT35O8vs/sbskY6g== X-Received: by 2002:a17:90a:6847:b0:1ea:7b6b:cd2f with SMTP id e7-20020a17090a684700b001ea7b6bcd2fmr1779755pjm.185.1654838028893; Thu, 09 Jun 2022 22:13:48 -0700 (PDT) From: frank.chang@sifive.com To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, Frank Chang , Palmer Dabbelt , Alistair Francis , Bin Meng Subject: [PATCH 5/9] target/riscv: debug: Introduce tinfo CSR Date: Fri, 10 Jun 2022 13:13:22 +0800 Message-Id: <20220610051328.7078-6-frank.chang@sifive.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220610051328.7078-1-frank.chang@sifive.com> References: <20220610051328.7078-1-frank.chang@sifive.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::1029; envelope-from=frank.chang@sifive.com; helo=mail-pj1-x1029.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" X-ZohoMail-DKIM: pass (identity @sifive.com) X-ZM-MESSAGEID: 1654838637018100001 Content-Type: text/plain; charset="utf-8" From: Frank Chang tinfo.info: One bit for each possible type enumerated in tdata1. If the bit is set, then that type is supported by the currently selected trigger. Signed-off-by: Frank Chang Reviewed-by: Bin Meng --- target/riscv/cpu_bits.h | 1 + target/riscv/csr.c | 8 ++++++++ target/riscv/debug.c | 10 +++++++--- target/riscv/debug.h | 2 ++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index 4d04b20d06..666b4d69ca 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -331,6 +331,7 @@ #define CSR_TDATA1 0x7a1 #define CSR_TDATA2 0x7a2 #define CSR_TDATA3 0x7a3 +#define CSR_TINFO 0x7a4 =20 /* Debug Mode Registers */ #define CSR_DCSR 0x7b0 diff --git a/target/riscv/csr.c b/target/riscv/csr.c index 005ae31a01..823b6bd520 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -2800,6 +2800,13 @@ static RISCVException write_tdata(CPURISCVState *env= , int csrno, return RISCV_EXCP_NONE; } =20 +static RISCVException read_tinfo(CPURISCVState *env, int csrno, + target_ulong *val) +{ + *val =3D tinfo_csr_read(env); + return RISCV_EXCP_NONE; +} + /* * Functions to access Pointer Masking feature registers * We have to check if current priv lvl could modify @@ -3588,6 +3595,7 @@ riscv_csr_operations csr_ops[CSR_TABLE_SIZE] =3D { [CSR_TDATA1] =3D { "tdata1", debug, read_tdata, write_tdata }, [CSR_TDATA2] =3D { "tdata2", debug, read_tdata, write_tdata }, [CSR_TDATA3] =3D { "tdata3", debug, read_tdata, write_tdata }, + [CSR_TINFO] =3D { "tinfo", debug, read_tinfo, write_ignore }, =20 /* User Pointer Masking */ [CSR_UMTE] =3D { "umte", pointer_masking, read_umte, write= _umte }, diff --git a/target/riscv/debug.c b/target/riscv/debug.c index 296192ffc4..1668b8abda 100644 --- a/target/riscv/debug.c +++ b/target/riscv/debug.c @@ -37,9 +37,7 @@ * - tdata1 * - tdata2 * - tdata3 - * - * We don't support writable 'type' field in the tdata1 register, so there= is - * no need to implement the "tinfo" CSR. + * - tinfo * * The following triggers are implemented: * @@ -369,6 +367,12 @@ void tdata_csr_write(CPURISCVState *env, int tdata_ind= ex, target_ulong val) } } =20 +target_ulong tinfo_csr_read(CPURISCVState *env) +{ + /* assume all triggers support the same types of triggers */ + return BIT(TRIGGER_TYPE_AD_MATCH); +} + void riscv_cpu_debug_excp_handler(CPUState *cs) { RISCVCPU *cpu =3D RISCV_CPU(cs); diff --git a/target/riscv/debug.h b/target/riscv/debug.h index 76146f373a..9f69c64591 100644 --- a/target/riscv/debug.h +++ b/target/riscv/debug.h @@ -95,6 +95,8 @@ void tselect_csr_write(CPURISCVState *env, target_ulong v= al); target_ulong tdata_csr_read(CPURISCVState *env, int tdata_index); void tdata_csr_write(CPURISCVState *env, int tdata_index, target_ulong val= ); =20 +target_ulong tinfo_csr_read(CPURISCVState *env); + void riscv_cpu_debug_excp_handler(CPUState *cs); bool riscv_cpu_debug_check_breakpoint(CPUState *cs); bool riscv_cpu_debug_check_watchpoint(CPUState *cs, CPUWatchpoint *wp); --=20 2.36.1 From nobody Mon Feb 9 01:11:39 2026 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=1654838586; cv=none; d=zohomail.com; s=zohoarc; b=iCjZPL/8qJ97/jVxMbHbLEspssHb6e420tib2yDIpa7tQ6BaMIb/UjdlW6lXmPZiJ/iqUo3hCkJRC1VZkzNINVo49HFKioJv3zf7b3UzPhVRMv6e7oLMf4GSYL3f3/houbC949HpV/7GHQpunC2k9+0U7fvOjDRuHX3PAAAw+nM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654838586; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=x4ybjcqHkR8a+A9t7Xq//urAWXotIrk9LTAtx8zaJOY=; b=Vu/7vAvh2ADgNxpQ9LIg11nmBbpp6NNKc80bIjbD1NvQrNfSodTv/RkmKGV694ofIsX8vzHo6VT3x0gQP9PouBoCUZmTkJUSmct0nxRqDSEZRTgOn/z4uPAfP/NpaXRq+gLhffsn88kbbSHqwWX+WOnl9Vq8LePzuJunxjdoqZs= 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 1654838586836469.793428320924; Thu, 9 Jun 2022 22:23:06 -0700 (PDT) Received: from localhost ([::1]:37956 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nzX6u-0004u8-Oz for importer@patchew.org; Fri, 10 Jun 2022 01:23:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40006) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nzWy4-0003Sv-Db for qemu-devel@nongnu.org; Fri, 10 Jun 2022 01:13:56 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]:47021) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nzWy1-0007cX-SO for qemu-devel@nongnu.org; Fri, 10 Jun 2022 01:13:56 -0400 Received: by mail-pj1-x1035.google.com with SMTP id k5-20020a17090a404500b001e8875e6242so1170661pjg.5 for ; Thu, 09 Jun 2022 22:13:53 -0700 (PDT) Received: from hsinchu16.internal.sifive.com (59-124-168-89.hinet-ip.hinet.net. [59.124.168.89]) by smtp.gmail.com with ESMTPSA id i13-20020a170902c94d00b0016362da9a03sm17853534pla.245.2022.06.09.22.13.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Jun 2022 22:13:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=x4ybjcqHkR8a+A9t7Xq//urAWXotIrk9LTAtx8zaJOY=; b=V4EgqlFDyAGf40pq+bEu+ksJv8z0V3tBr/ZPr1BVH12x6Z0ZKzFszE6ki3XZ1tqb9K RmmfFyr8YQDwEwK7m9d+peNe1F4+c1UZ6yim6kz2HYFBUm6mUpEoa+YPqAy24syOH7/I s+1KViC3yRZ8rT5ADqBM0gI653bF6sM7Oq64mhH3jNNadYmmIITY0n3V1XkAaiSNKB2g 7R4eRIihQR5retvQ1Yjond2gRvOJy4dn6Rs2+5ciL94pYMqXMaN6pgoPfxIgM10Qy7uV soq1JibqJW/HKe1JFl77PT0RgNljsS/BoZ/A5JYRxmJ+JNay/bXCxIC9T+L8IivtFpS2 UBWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=x4ybjcqHkR8a+A9t7Xq//urAWXotIrk9LTAtx8zaJOY=; b=SbiCyk0hebjj+B+rRPVLd2HtFEeDrnBjBIODJfu/81s7MmxrlT6AihxXktZR/pk8OT GD3DZIg4PXdeVzaxAqWGzClYXQw1dag16NJybqpS8uCokAc91wymIclbPgKpgjWBbazq vAB8Wqk+e2OJvv6SGsMpbLFfRLbzfIPonC6r7lByoyy436pjmFsZEFDBbtiWJabOG8P9 x+zwgCHlZk200mKkXo2fhYGjO6xg/pjkiPh26cL7Mgjq1+aEOsUm54lACfNha3fspmOF BVm57khrlBQ3jIQ/tpkq8tXHm78rHkbGGdC06E4Q3erELS96OGcNm3WjkCOALPE0hH7S kLNw== X-Gm-Message-State: AOAM530+qGXMJwDXeRZVIk2A5JuPO2Egz1UGx+g9KBinZqJa0JbIOETj cnSej/0Tl0qVMcaxHMTOhGYrhqemlbrP5A== X-Google-Smtp-Source: ABdhPJwcYmBiu8abClgmOn9jGoaRUUEByvXvW6n6ANU1+X+9UDQG8sKn59qOujrQSkvED6/N8KFKAw== X-Received: by 2002:a17:902:9348:b0:167:8e92:272f with SMTP id g8-20020a170902934800b001678e92272fmr19346607plp.77.1654838031979; Thu, 09 Jun 2022 22:13:51 -0700 (PDT) From: frank.chang@sifive.com To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, Frank Chang , Palmer Dabbelt , Alistair Francis , Bin Meng Subject: [PATCH 6/9] target/riscv: debug: Create common trigger actions function Date: Fri, 10 Jun 2022 13:13:23 +0800 Message-Id: <20220610051328.7078-7-frank.chang@sifive.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220610051328.7078-1-frank.chang@sifive.com> References: <20220610051328.7078-1-frank.chang@sifive.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::1035; envelope-from=frank.chang@sifive.com; helo=mail-pj1-x1035.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" X-ZohoMail-DKIM: pass (identity @sifive.com) X-ZM-MESSAGEID: 1654838588796100001 Content-Type: text/plain; charset="utf-8" From: Frank Chang Trigger actions are shared among all triggers. Extract to a common function. Signed-off-by: Frank Chang --- target/riscv/debug.c | 55 ++++++++++++++++++++++++++++++++++++++++++-- target/riscv/debug.h | 13 +++++++++++ 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/target/riscv/debug.c b/target/riscv/debug.c index 1668b8abda..ab23566113 100644 --- a/target/riscv/debug.c +++ b/target/riscv/debug.c @@ -91,6 +91,35 @@ static inline target_ulong get_trigger_type(CPURISCVStat= e *env, return extract_trigger_type(env, env->tdata1[trigger_index]); } =20 +static trigger_action_t get_trigger_action(CPURISCVState *env, + target_ulong trigger_index) +{ + target_ulong tdata1 =3D env->tdata1[trigger_index]; + int trigger_type =3D get_trigger_type(env, trigger_index); + trigger_action_t action =3D DBG_ACTION_NONE; + + switch (trigger_type) { + case TRIGGER_TYPE_AD_MATCH: + action =3D (tdata1 & TYPE2_ACTION) >> 12; + break; + case TRIGGER_TYPE_INST_CNT: + case TRIGGER_TYPE_INT: + case TRIGGER_TYPE_EXCP: + case TRIGGER_TYPE_AD_MATCH6: + case TRIGGER_TYPE_EXT_SRC: + qemu_log_mask(LOG_UNIMP, "trigger type: %d is not supported\n", + trigger_type); + break; + case TRIGGER_TYPE_NO_EXIST: + case TRIGGER_TYPE_UNAVAIL: + break; + default: + g_assert_not_reached(); + } + + return action; +} + static inline target_ulong build_tdata1(CPURISCVState *env, trigger_type_t type, bool dmode, target_ulong data) @@ -181,6 +210,28 @@ static inline void warn_always_zero_bit(target_ulong v= al, target_ulong mask, } } =20 +static void do_trigger_action(CPURISCVState *env, target_ulong trigger_ind= ex) +{ + trigger_action_t action =3D get_trigger_action(env, trigger_index); + + switch (action) { + case DBG_ACTION_BP: + riscv_raise_exception(env, RISCV_EXCP_BREAKPOINT, 0); + break; + case DBG_ACTION_DBG_MODE: + case DBG_ACTION_TRACE0: + case DBG_ACTION_TRACE1: + case DBG_ACTION_TRACE2: + case DBG_ACTION_TRACE3: + case DBG_ACTION_EXT_DBG0: + case DBG_ACTION_EXT_DBG1: + qemu_log_mask(LOG_UNIMP, "action: %d is not supported\n", action); + break; + default: + g_assert_not_reached(); + } +} + /* type 2 trigger */ =20 static uint32_t type2_breakpoint_size(CPURISCVState *env, target_ulong ctr= l) @@ -381,11 +432,11 @@ void riscv_cpu_debug_excp_handler(CPUState *cs) if (cs->watchpoint_hit) { if (cs->watchpoint_hit->flags & BP_CPU) { cs->watchpoint_hit =3D NULL; - riscv_raise_exception(env, RISCV_EXCP_BREAKPOINT, 0); + do_trigger_action(env, DBG_ACTION_BP); } } else { if (cpu_breakpoint_test(cs, env->pc, BP_CPU)) { - riscv_raise_exception(env, RISCV_EXCP_BREAKPOINT, 0); + do_trigger_action(env, DBG_ACTION_BP); } } } diff --git a/target/riscv/debug.h b/target/riscv/debug.h index 9f69c64591..0e4859cf74 100644 --- a/target/riscv/debug.h +++ b/target/riscv/debug.h @@ -44,6 +44,19 @@ typedef enum { TRIGGER_TYPE_NUM } trigger_type_t; =20 +/* actions */ +typedef enum { + DBG_ACTION_NONE =3D -1, /* sentinel value */ + DBG_ACTION_BP =3D 0, + DBG_ACTION_DBG_MODE, + DBG_ACTION_TRACE0, + DBG_ACTION_TRACE1, + DBG_ACTION_TRACE2, + DBG_ACTION_TRACE3, + DBG_ACTION_EXT_DBG0 =3D 8, + DBG_ACTION_EXT_DBG1 +} trigger_action_t; + /* tdata1 field masks */ =20 #define RV32_TYPE(t) ((uint32_t)(t) << 28) --=20 2.36.1 From nobody Mon Feb 9 01:11:39 2026 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=1654838978; cv=none; d=zohomail.com; s=zohoarc; b=RRqLhv7R9jloC5s6lp3CNHRTshOW3uvBqtZ0a1T+1DsJT6YHldYqn7VrK7O6DiM1emQV2ELWr8l5uZa8ZAXqaNjETrhRK9xPlKxq+PJ9+eL1oS1boiR+bvjkJGAt6SK1AtsC/474yH9qw+x7sAPUutRgcfPCoFkdeYDtz4VSASQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654838978; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=5i5gw+GzDy6oIAhwH3Fhk1p6YRw/876cMv2LfmHXtpg=; b=WY5QFWLO6u6a5WajqDsNFowPq1rIiYxbALy9E+lalcTmgDt8nbkNhMdEonj9XL31WLftW9Dn6N+ii2df+dWCaE6aCuWR4whQOi67xbkUHKXmNgO2GpL6OK+zy/V0exUp2XnHwFaVdN3Rg/OeD60AAMnQbqQ1KpzfyDusRVTC3XQ= 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 1654838978338903.1522876770149; Thu, 9 Jun 2022 22:29:38 -0700 (PDT) Received: from localhost ([::1]:46318 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nzXDF-0002Nt-91 for importer@patchew.org; Fri, 10 Jun 2022 01:29:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40038) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nzWy6-0003V0-4n for qemu-devel@nongnu.org; Fri, 10 Jun 2022 01:14:01 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]:40501) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nzWy4-0007dx-QB for qemu-devel@nongnu.org; Fri, 10 Jun 2022 01:13:57 -0400 Received: by mail-pj1-x1032.google.com with SMTP id w13-20020a17090a780d00b001e8961b355dso1216885pjk.5 for ; Thu, 09 Jun 2022 22:13:56 -0700 (PDT) Received: from hsinchu16.internal.sifive.com (59-124-168-89.hinet-ip.hinet.net. [59.124.168.89]) by smtp.gmail.com with ESMTPSA id i13-20020a170902c94d00b0016362da9a03sm17853534pla.245.2022.06.09.22.13.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Jun 2022 22:13:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5i5gw+GzDy6oIAhwH3Fhk1p6YRw/876cMv2LfmHXtpg=; b=hjkfhwk1h5c1zh+qGVvWEuCpfifl+1bE6VOB9nyIikLSH0Rj8XXHl8WuAmL3cwio7V Zv0zQZRryp+dn8Qt23qJjvISR2L7Orxk5zexSSFXtk6E7eIu/Uc/l3Q8t00fgWPSwzGs c/ILxCYD6U+cIPyFvilXhCZ1wdgbtCVc4P4h28m/rD7RIbISUuv+7g0LFhPW0JwdobER anj1pIf0+34DGiIrVszTkTaasNY7s6Wb7JwxSws1z39gjK4T6ZYWNDIUT3iZSKSyKYc1 lNloeg41qpD5yiusJFc8WQfzuQboplcF+wql2cyRBY1C7BMFSHgnG4eqyFIfzvNUlknr vq4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5i5gw+GzDy6oIAhwH3Fhk1p6YRw/876cMv2LfmHXtpg=; b=0qTXMwHf4DYh49bCgpoU0kLJf5uoFix4D9HwTXwVx8r1+HDkI2y9kB0RLqoph45C5F kKhw2OFQ8lYmHcj+xCIifp/Ni4ZOPMhSeEZWJYfjQz6ncQ1jFDH97oqsDwqbVEd3cObB TsRF0fjUpd+/Pr4oSsnLO2Ns8fQ8ZGRpo1vzi1g1lr7gxdOuPOlGXipqJyAeLZH5IcPo zca6fN9Q/jpfTIQO0bNSS46JPgYVxYE84PBfGd+yC79/G6EmQr4UDL8mG1rBVImIuVAe 8+8BRZACNP47fiTOHmX3tQw9j0KK6dwKvrSLKqEO+tM6joltRhZu/9oV3uZt06DSaEMx h/tw== X-Gm-Message-State: AOAM530/EbaG+PrhRNS5fws4yLE63zhVAo+Ols1ZXgixOgNKTw57zPDB PJEnIpJkaX5RzwcFyphOhU4gW8A11ShNHg== X-Google-Smtp-Source: ABdhPJwDPNjTXOEsiEH3Gz3XRwI3TCm44PvdbqBoGcEVIxPQmiQFNgOz14YSq6q1ubQ6Gjxt1gzqFA== X-Received: by 2002:a17:902:f54b:b0:163:e2fd:10a5 with SMTP id h11-20020a170902f54b00b00163e2fd10a5mr43770351plf.28.1654838035093; Thu, 09 Jun 2022 22:13:55 -0700 (PDT) From: frank.chang@sifive.com To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, Frank Chang , Palmer Dabbelt , Alistair Francis , Bin Meng Subject: [PATCH 7/9] target/riscv: debug: Check VU/VS modes for type 2 trigger Date: Fri, 10 Jun 2022 13:13:24 +0800 Message-Id: <20220610051328.7078-8-frank.chang@sifive.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220610051328.7078-1-frank.chang@sifive.com> References: <20220610051328.7078-1-frank.chang@sifive.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::1032; envelope-from=frank.chang@sifive.com; helo=mail-pj1-x1032.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" X-ZohoMail-DKIM: pass (identity @sifive.com) X-ZM-MESSAGEID: 1654838979103100001 Content-Type: text/plain; charset="utf-8" From: Frank Chang Type 2 trigger cannot be fired in VU/VS modes. Signed-off-by: Frank Chang Reviewed-by: Bin Meng --- target/riscv/debug.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/target/riscv/debug.c b/target/riscv/debug.c index ab23566113..ce9ff15d75 100644 --- a/target/riscv/debug.c +++ b/target/riscv/debug.c @@ -457,6 +457,11 @@ bool riscv_cpu_debug_check_breakpoint(CPUState *cs) =20 switch (trigger_type) { case TRIGGER_TYPE_AD_MATCH: + /* type 2 trigger cannot be fired in VU/VS mode */ + if (riscv_cpu_virt_enabled(env)) { + return false; + } + ctrl =3D env->tdata1[i]; pc =3D env->tdata2[i]; =20 @@ -492,6 +497,11 @@ bool riscv_cpu_debug_check_watchpoint(CPUState *cs, CP= UWatchpoint *wp) =20 switch (trigger_type) { case TRIGGER_TYPE_AD_MATCH: + /* type 2 trigger cannot be fired in VU/VS mode */ + if (riscv_cpu_virt_enabled(env)) { + return false; + } + ctrl =3D env->tdata1[i]; addr =3D env->tdata2[i]; flags =3D 0; --=20 2.36.1 From nobody Mon Feb 9 01:11:39 2026 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=1654838946; cv=none; d=zohomail.com; s=zohoarc; b=VX9GHIyfPlEJ6zbMeLJBygJesX98CCyGYZEXz1nPFDGtk0urxfBIvJaqsPVxRM3gXcr7OlPaqYz06DEufug4RoQpraKINUDg3nsii1DLpCys74Ixg9Lgkldq3aPWUZ8MUQinkW2Zuy0uk2tveeUj5vOPDP7yo8iClYYBDPc/JMI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654838946; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=hWKC5tQ4tBOQrwb28nnVJfZM/pEKDjOk1JeW0xU9EVY=; b=RnaIwMRBH5QPaimfiGy6lhIzgFw2d8shg/dzrQOVHPYlYz/J7Hccy8YAJtERD4+HK+g+jicRsIn5rJ8EVzW9nKqLJxLMWa75e5YBtTUgV1IPJgT1gVWqrW16ybmS6sxoUtfsG+e/Jx3539bEzSKWqw6aVIwKEuOlW9o8UfHAl0E= 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 1654838946709535.01203605165; Thu, 9 Jun 2022 22:29:06 -0700 (PDT) Received: from localhost ([::1]:44310 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nzXCj-00010H-K1 for importer@patchew.org; Fri, 10 Jun 2022 01:29:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40092) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nzWyA-0003WX-Ln for qemu-devel@nongnu.org; Fri, 10 Jun 2022 01:14:02 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]:43970) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nzWy8-0007eQ-BG for qemu-devel@nongnu.org; Fri, 10 Jun 2022 01:14:01 -0400 Received: by mail-pf1-x433.google.com with SMTP id x4so14333466pfj.10 for ; Thu, 09 Jun 2022 22:13:59 -0700 (PDT) Received: from hsinchu16.internal.sifive.com (59-124-168-89.hinet-ip.hinet.net. [59.124.168.89]) by smtp.gmail.com with ESMTPSA id i13-20020a170902c94d00b0016362da9a03sm17853534pla.245.2022.06.09.22.13.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Jun 2022 22:13:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=hWKC5tQ4tBOQrwb28nnVJfZM/pEKDjOk1JeW0xU9EVY=; b=PZHIxRFSL5e4IHr1Cc0whdh4DWBE8z1JgRTKIthoJNmcqIARJY6qJpjewp3saye6pj gDvM+LdBDhCohkmO3bJH/gwjQ9k457K5UxTReovL6E1V3hASAwzI3+sYiFRbNpYrLk++ QC1n4EdVhs4T8gZfKRGkgHwt4en6RSgXU0DK1sH/RlThf1e3eZ2GF6KV/hb3mYxkUZNQ qvkHK+7kU/VyH/F/aFkT1/W95/4IoCBHIV6fI+ijwjOBcqvj7SIFkObVS7Fz3RuAMi2r tp6ZrOkqVirDDDchZlACUFKX9oiQJ1WuCVpgvS+S91dGiJWUbrLRwNg+CpjqOfMDVV5N 6dYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=hWKC5tQ4tBOQrwb28nnVJfZM/pEKDjOk1JeW0xU9EVY=; b=iXT+u/5WD9KurJSwoIQx2wkwIujJmlFXav0AC6ze1eXG7D/TyPqKkJXGVVQocprwO5 xtCuXj2xdcD/aq7CT82edBZyyzT6uvcWOzePb+M7SOzDPgvUIbvYlNies/NMdzk+ti/z 0CS3jjnXI9nUfLB1S4GTFNWrPQkthnepO5I7v+H/OV3DKOw63DnshX1w16hsElzAiUpP PCma7aXSrAqtbCIlxqz/J50rFrtn3kKEJkQl+IUleo1sL9w6XgIMjh06dYgiDH+XL3vH 6ssqmZtnmo9lqHwfG10RgvzO0bIQhQePQh3vHd+igsX0qth00F+FAa8ed/XuMoTBCZCH W9kQ== X-Gm-Message-State: AOAM531FDtEsNE2Cvz2s5Dg2NLdRHwBnOMr7inF4OVSu0yHpLWBQpzkQ DPQzDR+vs8oaXdYjrGnQ+Is/WZaRQ0PoHQ== X-Google-Smtp-Source: ABdhPJzL+dNA/gWLHqCQGBElv8AYfnMlHoSUzwz+9Ku9Z3pJqW5u/s+7uADA93W1W/BJaxGYDXekpw== X-Received: by 2002:a63:1543:0:b0:3fa:8e73:d7a5 with SMTP id 3-20020a631543000000b003fa8e73d7a5mr37776119pgv.160.1654838038072; Thu, 09 Jun 2022 22:13:58 -0700 (PDT) From: frank.chang@sifive.com To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, Frank Chang , Palmer Dabbelt , Alistair Francis , Bin Meng Subject: [PATCH 8/9] target/riscv: debug: Return 0 if previous value written to tselect >= number of triggers Date: Fri, 10 Jun 2022 13:13:25 +0800 Message-Id: <20220610051328.7078-9-frank.chang@sifive.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220610051328.7078-1-frank.chang@sifive.com> References: <20220610051328.7078-1-frank.chang@sifive.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::433; envelope-from=frank.chang@sifive.com; helo=mail-pf1-x433.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=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" X-ZohoMail-DKIM: pass (identity @sifive.com) X-ZM-MESSAGEID: 1654838948963100001 Content-Type: text/plain; charset="utf-8" From: Frank Chang If the value written to tselect is greater than or equal to the number of supported triggers, then the following reads of tselect would return value 0. Signed-off-by: Frank Chang --- target/riscv/cpu.h | 1 + target/riscv/debug.c | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index bac5f00722..c7ee3f80e6 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -289,6 +289,7 @@ struct CPUArchState { =20 /* trigger module */ target_ulong trigger_cur; + target_ulong trigger_prev; target_ulong tdata1[RV_MAX_TRIGGERS]; target_ulong tdata2[RV_MAX_TRIGGERS]; target_ulong tdata3[RV_MAX_TRIGGERS]; diff --git a/target/riscv/debug.c b/target/riscv/debug.c index ce9ff15d75..83b72fa1b9 100644 --- a/target/riscv/debug.c +++ b/target/riscv/debug.c @@ -158,6 +158,10 @@ bool tdata_available(CPURISCVState *env, int tdata_ind= ex) =20 target_ulong tselect_csr_read(CPURISCVState *env) { + if (env->trigger_prev >=3D RV_MAX_TRIGGERS) { + return 0; + } + return env->trigger_cur; } =20 @@ -166,6 +170,8 @@ void tselect_csr_write(CPURISCVState *env, target_ulong= val) if (val < RV_MAX_TRIGGERS) { env->trigger_cur =3D val; } + + env->trigger_prev =3D val; } =20 static target_ulong tdata1_validate(CPURISCVState *env, target_ulong val, --=20 2.36.1 From nobody Mon Feb 9 01:11:39 2026 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=1654838979; cv=none; d=zohomail.com; s=zohoarc; b=YofGlLFFE+PPUAEAd1tXD7x6+qUeD7tWCAy4TlnqPz7BJsxhbDBNOhxK/ncuLdiWJAoCGyCGg/+F9fomYlz38DqfaW8BpFMj6L7ytiE5oBifEzz9L7sahwMNI76/PkYKahb/1Dx3NOzxE4MImbdjNCS+cS/gXWut4TKpb8Z0wr8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1654838979; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=tD61SCjoTInN3UAePz2cDVno5eOqaNgm6w/t33s37xY=; b=h43pC0PhXbdDjG7Vwttt3rq4Dk7Bmu9Q8k9LEKdSjsokvj66lxZdlM2/PMHrQhBGG2FaYVSHIloiX2YyDrUyafB7DJSnGWY+64RsSluTrxP0HWpXV2wjCa9ecjC4xJ5DY1a3nwEzOouBoFfkH5SE0EeUresDHRKK6cCO4aY5Ijs= 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 1654838979968424.7797048835371; Thu, 9 Jun 2022 22:29:39 -0700 (PDT) Received: from localhost ([::1]:46468 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nzXDG-0002Tx-RN for importer@patchew.org; Fri, 10 Jun 2022 01:29:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40130) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nzWyC-0003Xk-Ld for qemu-devel@nongnu.org; Fri, 10 Jun 2022 01:14:07 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]:52147) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nzWyA-0007eh-RT for qemu-devel@nongnu.org; Fri, 10 Jun 2022 01:14:04 -0400 Received: by mail-pj1-x102a.google.com with SMTP id cx11so23147668pjb.1 for ; Thu, 09 Jun 2022 22:14:02 -0700 (PDT) Received: from hsinchu16.internal.sifive.com (59-124-168-89.hinet-ip.hinet.net. [59.124.168.89]) by smtp.gmail.com with ESMTPSA id i13-20020a170902c94d00b0016362da9a03sm17853534pla.245.2022.06.09.22.13.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Jun 2022 22:14:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=tD61SCjoTInN3UAePz2cDVno5eOqaNgm6w/t33s37xY=; b=eBq7kGarI8rjiwAM0YjLNoSIk0zXvW4k+6upkcVVQjsUiLSpHkWvrHRU9ZX1tEsNi3 +UMSEDrL/NJPdDF8jAxVINrED6DTlZrkSwBIZXuhlxrIt9Xrew/+7Z18gmPwICLLtusc 9+v8FBoEXtGiW7pUVhnFuyKysCKAaWK7/pDBRWtE9lpqdKayLs3r4N8Z6iQdFG5JOMf2 9cqJi4SjRMhG0rViOiRv+bEyn1SkgPHfFdyW/bRoNkAZ0Ggc51hBoeAW2w3yZ2UwaRjv EltJm8NFjzD5ocDkmb1VcB+UZhMi6Yh5DKdBLcUqb74Ih8hYWLWbiEVl1+sr5vWszjR4 vJDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=tD61SCjoTInN3UAePz2cDVno5eOqaNgm6w/t33s37xY=; b=ntRKlKeyFJvAIjBCFP8dE5Zxu6YiILbonvyPcIFdOgQd9HKNq8C5BNwQOAHggu9OgT 6/F9TJKkXOXo5R9HtmAM5b5gj/X0a7xHQONsjWtSqIA3y+R71VMNXQ29Gr4nW9e0kpKF oNSQhFm0NVPLEyBu4YJMt42D7iP6jhF6ICAYGBbGiIh49EVFdfkBBtf6c5J9ICtjtUe8 Os5O+2I0OrjxTddyjE8Do0snThrjI9e2dbRbv5UGkwuA9Qd8/FUOY1uSPx9hW99E2fvZ 0tgkUC5ceYnHsBg/7R1/uwQVCtUmSTAVdQqYPM9p3MV0Y7y4bcdIgbIc10GCEFfX0TXo EoaQ== X-Gm-Message-State: AOAM531AKdVKOIqYwCi+HH0wZzWFsnr3NryIfmlC9cqed/QRqH8n7DVX B6ubt0yQOpAuNmZ/iVq7SPEfZpO4mxtMxA== X-Google-Smtp-Source: ABdhPJzbPQdt6J5wI5EEourweV6GHl/FD+moMBNik/ZoJB4BIaicohdOAXGV+AS9E1Do8l3E+8FHUQ== X-Received: by 2002:a17:90a:e601:b0:1e8:ad01:1eaa with SMTP id j1-20020a17090ae60100b001e8ad011eaamr6890922pjy.81.1654838041182; Thu, 09 Jun 2022 22:14:01 -0700 (PDT) From: frank.chang@sifive.com To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, Frank Chang , Palmer Dabbelt , Alistair Francis , Bin Meng Subject: [PATCH 9/9] target/riscv: debug: Add initial support of type 6 trigger Date: Fri, 10 Jun 2022 13:13:26 +0800 Message-Id: <20220610051328.7078-10-frank.chang@sifive.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220610051328.7078-1-frank.chang@sifive.com> References: <20220610051328.7078-1-frank.chang@sifive.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::102a; envelope-from=frank.chang@sifive.com; helo=mail-pj1-x102a.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" X-ZohoMail-DKIM: pass (identity @sifive.com) X-ZM-MESSAGEID: 1654838981021100003 Content-Type: text/plain; charset="utf-8" From: Frank Chang Type 6 trigger is similar to a type 2 trigger, but provides additional functionality and should be used instead of type 2 in newer implementations. Signed-off-by: Frank Chang Reviewed-by: Bin Meng --- target/riscv/debug.c | 174 ++++++++++++++++++++++++++++++++++++++++++- target/riscv/debug.h | 18 +++++ 2 files changed, 188 insertions(+), 4 deletions(-) diff --git a/target/riscv/debug.c b/target/riscv/debug.c index 83b72fa1b9..43ee10c1c3 100644 --- a/target/riscv/debug.c +++ b/target/riscv/debug.c @@ -39,7 +39,7 @@ * - tdata3 * - tinfo * - * The following triggers are implemented: + * The following triggers are initialized by default: * * Index | Type | tdata mapping | Description * ------+------+------------------------+------------ @@ -102,10 +102,12 @@ static trigger_action_t get_trigger_action(CPURISCVSt= ate *env, case TRIGGER_TYPE_AD_MATCH: action =3D (tdata1 & TYPE2_ACTION) >> 12; break; + case TRIGGER_TYPE_AD_MATCH6: + action =3D (tdata1 & TYPE6_ACTION) >> 12; + break; case TRIGGER_TYPE_INST_CNT: case TRIGGER_TYPE_INT: case TRIGGER_TYPE_EXCP: - case TRIGGER_TYPE_AD_MATCH6: case TRIGGER_TYPE_EXT_SRC: qemu_log_mask(LOG_UNIMP, "trigger type: %d is not supported\n", trigger_type); @@ -380,6 +382,123 @@ static void type2_reg_write(CPURISCVState *env, targe= t_ulong index, return; } =20 +/* type 6 trigger */ + +static inline bool type6_breakpoint_enabled(target_ulong ctrl) +{ + bool mode =3D !!(ctrl & (TYPE6_VU | TYPE6_VS | TYPE6_U | TYPE6_S | TYP= E6_M)); + bool rwx =3D !!(ctrl & (TYPE6_LOAD | TYPE6_STORE | TYPE6_EXEC)); + + return mode && rwx; +} + +static target_ulong type6_mcontrol6_validate(CPURISCVState *env, + target_ulong ctrl) +{ + target_ulong val; + uint32_t size; + + /* validate the generic part first */ + val =3D tdata1_validate(env, ctrl, TRIGGER_TYPE_AD_MATCH6); + + /* validate unimplemented (always zero) bits */ + warn_always_zero_bit(ctrl, TYPE6_MATCH, "match"); + warn_always_zero_bit(ctrl, TYPE6_CHAIN, "chain"); + warn_always_zero_bit(ctrl, TYPE6_ACTION, "action"); + warn_always_zero_bit(ctrl, TYPE6_TIMING, "timing"); + warn_always_zero_bit(ctrl, TYPE6_SELECT, "select"); + warn_always_zero_bit(ctrl, TYPE6_HIT, "hit"); + + /* validate size encoding */ + size =3D extract32(ctrl, 16, 4); + if (access_size[size] =3D=3D -1) { + qemu_log_mask(LOG_UNIMP, "access size %d is not supported, using S= IZE_ANY\n", + size); + } else { + val |=3D (ctrl & TYPE6_SIZE); + } + + /* keep the mode and attribute bits */ + val |=3D (ctrl & (TYPE6_VU | TYPE6_VS | TYPE6_U | TYPE6_S | TYPE6_M | + TYPE6_LOAD | TYPE6_STORE | TYPE6_EXEC)); + + return val; +} + +static void type6_breakpoint_insert(CPURISCVState *env, target_ulong index) +{ + target_ulong ctrl =3D env->tdata1[index]; + target_ulong addr =3D env->tdata2[index]; + bool enabled =3D type6_breakpoint_enabled(ctrl); + CPUState *cs =3D env_cpu(env); + int flags =3D BP_CPU | BP_STOP_BEFORE_ACCESS; + uint32_t size; + + if (!enabled) { + return; + } + + if (ctrl & TYPE6_EXEC) { + cpu_breakpoint_insert(cs, addr, flags, &env->cpu_breakpoint[index]= ); + } + + if (ctrl & TYPE6_LOAD) { + flags |=3D BP_MEM_READ; + } + + if (ctrl & TYPE6_STORE) { + flags |=3D BP_MEM_WRITE; + } + + if (flags & BP_MEM_ACCESS) { + size =3D extract32(ctrl, 16, 4); + if (size !=3D 0) { + cpu_watchpoint_insert(cs, addr, size, flags, + &env->cpu_watchpoint[index]); + } else { + cpu_watchpoint_insert(cs, addr, 8, flags, + &env->cpu_watchpoint[index]); + } + } +} + +static void type6_breakpoint_remove(CPURISCVState *env, target_ulong index) +{ + type2_breakpoint_remove(env, index); +} + +static void type6_reg_write(CPURISCVState *env, target_ulong index, + int tdata_index, target_ulong val) +{ + target_ulong new_val; + + switch (tdata_index) { + case TDATA1: + new_val =3D type6_mcontrol6_validate(env, val); + if (new_val !=3D env->tdata1[index]) { + env->tdata1[index] =3D new_val; + type6_breakpoint_remove(env, index); + type6_breakpoint_insert(env, index); + } + break; + case TDATA2: + if (val !=3D env->tdata2[index]) { + env->tdata2[index] =3D val; + type6_breakpoint_remove(env, index); + type6_breakpoint_insert(env, index); + } + break; + case TDATA3: + qemu_log_mask(LOG_UNIMP, + "tdata3 is not supported for type 6 trigger\n"); + break; + default: + g_assert_not_reached(); + } + + return; +} + target_ulong tdata_csr_read(CPURISCVState *env, int tdata_index) { switch (tdata_index) { @@ -408,10 +527,12 @@ void tdata_csr_write(CPURISCVState *env, int tdata_in= dex, target_ulong val) case TRIGGER_TYPE_AD_MATCH: type2_reg_write(env, env->trigger_cur, tdata_index, val); break; + case TRIGGER_TYPE_AD_MATCH6: + type6_reg_write(env, env->trigger_cur, tdata_index, val); + break; case TRIGGER_TYPE_INST_CNT: case TRIGGER_TYPE_INT: case TRIGGER_TYPE_EXCP: - case TRIGGER_TYPE_AD_MATCH6: case TRIGGER_TYPE_EXT_SRC: qemu_log_mask(LOG_UNIMP, "trigger type: %d is not supported\n", trigger_type); @@ -427,7 +548,8 @@ void tdata_csr_write(CPURISCVState *env, int tdata_inde= x, target_ulong val) target_ulong tinfo_csr_read(CPURISCVState *env) { /* assume all triggers support the same types of triggers */ - return BIT(TRIGGER_TYPE_AD_MATCH); + return BIT(TRIGGER_TYPE_AD_MATCH) | + BIT(TRIGGER_TYPE_AD_MATCH6); } =20 void riscv_cpu_debug_excp_handler(CPUState *cs) @@ -478,6 +600,24 @@ bool riscv_cpu_debug_check_breakpoint(CPUState *cs) } } break; + case TRIGGER_TYPE_AD_MATCH6: + ctrl =3D env->tdata1[i]; + pc =3D env->tdata2[i]; + + if ((ctrl & TYPE6_EXEC) && (bp->pc =3D=3D pc)) { + if (riscv_cpu_virt_enabled(env)) { + /* check VU/VS bit against current privilege level= */ + if ((ctrl >> 23) & BIT(env->priv)) { + return true; + } + } else { + /* check U/S/M bit against current privilege level= */ + if ((ctrl >> 3) & BIT(env->priv)) { + return true; + } + } + } + break; default: /* other trigger types are not supported or irrelevant */ break; @@ -526,6 +666,32 @@ bool riscv_cpu_debug_check_watchpoint(CPUState *cs, CP= UWatchpoint *wp) } } break; + case TRIGGER_TYPE_AD_MATCH6: + ctrl =3D env->tdata1[i]; + addr =3D env->tdata2[i]; + flags =3D 0; + + if (ctrl & TYPE6_LOAD) { + flags |=3D BP_MEM_READ; + } + if (ctrl & TYPE6_STORE) { + flags |=3D BP_MEM_WRITE; + } + + if ((wp->flags & flags) && (wp->vaddr =3D=3D addr)) { + if (riscv_cpu_virt_enabled(env)) { + /* check VU/VS bit against current privilege level */ + if ((ctrl >> 23) & BIT(env->priv)) { + return true; + } + } else { + /* check U/S/M bit against current privilege level */ + if ((ctrl >> 3) & BIT(env->priv)) { + return true; + } + } + } + break; default: /* other trigger types are not supported */ break; diff --git a/target/riscv/debug.h b/target/riscv/debug.h index 0e4859cf74..a1226b4d29 100644 --- a/target/riscv/debug.h +++ b/target/riscv/debug.h @@ -85,6 +85,24 @@ typedef enum { #define TYPE2_HIT BIT(20) #define TYPE2_SIZEHI (0x3 << 21) /* RV64 only */ =20 +/* mcontrol6 field masks */ + +#define TYPE6_LOAD BIT(0) +#define TYPE6_STORE BIT(1) +#define TYPE6_EXEC BIT(2) +#define TYPE6_U BIT(3) +#define TYPE6_S BIT(4) +#define TYPE6_M BIT(6) +#define TYPE6_MATCH (0xf << 7) +#define TYPE6_CHAIN BIT(11) +#define TYPE6_ACTION (0xf << 12) +#define TYPE6_SIZE (0xf << 16) +#define TYPE6_TIMING BIT(20) +#define TYPE6_SELECT BIT(21) +#define TYPE6_HIT BIT(22) +#define TYPE6_VU BIT(23) +#define TYPE6_VS BIT(24) + /* access size */ enum { SIZE_ANY =3D 0, --=20 2.36.1