qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/4] RISC-V: Modularize common match conditions for trigger
@ 2024-02-27  1:24 Alvin Chang via
  2024-02-27  1:24 ` [PATCH v4 1/4] target/riscv: Add functions for common matching conditions of trigger Alvin Chang via
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Alvin Chang via @ 2024-02-27  1:24 UTC (permalink / raw)
  To: qemu-riscv, qemu-devel
  Cc: alistair.francis, bin.meng, liwei1518, dbarboza, zhiwei_liu,
	Alvin Chang

According to RISC-V Debug specification ratified version 0.13 [1]
(also applied to version 1.0 [2] but it has not been ratified yet), the
enabled privilege levels of the trigger is common match conditions for
all the types of the trigger.

This series modularize the code for checking the privilege levels of
type 2/3/6 triggers by implementing functions trigger_common_match()
and trigger_priv_match().

Additional match conditions, such as CSR tcontrol and textra, can be
further implemented into trigger_common_match() in the future.

[1]: https://github.com/riscv/riscv-debug-spec/releases/tag/task_group_vote
[2]: https://github.com/riscv/riscv-debug-spec/releases/tag/1.0.0-rc1-asciidoc

Changes from v3:
- Change this series to target Debug Spec. version 0.13

Changes from v2:
- Explicitly mention the targeting version of RISC-V Debug Spec.

Changes from v1:
- Fix typo
- Add commit description for changing behavior of looping the triggers
  when we check type 2 triggers.

Alvin Chang (4):
  target/riscv: Add functions for common matching conditions of trigger
  target/riscv: Apply modularized matching conditions for breakpoint
  target/riscv: Apply modularized matching conditions for watchpoint
  target/riscv: Apply modularized matching conditions for icount trigger

 target/riscv/debug.c | 124 +++++++++++++++++++++++++++++--------------
 1 file changed, 83 insertions(+), 41 deletions(-)

-- 
2.34.1



^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v4 1/4] target/riscv: Add functions for common matching conditions of trigger
  2024-02-27  1:24 [PATCH v4 0/4] RISC-V: Modularize common match conditions for trigger Alvin Chang via
@ 2024-02-27  1:24 ` Alvin Chang via
  2024-06-04  0:28   ` Alistair Francis
  2024-02-27  1:24 ` [PATCH v4 2/4] target/riscv: Apply modularized matching conditions for breakpoint Alvin Chang via
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 11+ messages in thread
From: Alvin Chang via @ 2024-02-27  1:24 UTC (permalink / raw)
  To: qemu-riscv, qemu-devel
  Cc: alistair.francis, bin.meng, liwei1518, dbarboza, zhiwei_liu,
	Alvin Chang

According to RISC-V Debug specification version 0.13 [1] (also applied
to version 1.0 [2] but it has not been ratified yet), there are several
common matching conditions before firing a trigger, including the
enabled privilege levels of the trigger.

This commit adds trigger_common_match() to prepare the common matching
conditions for the type 2/3/6 triggers. For now, we just implement
trigger_priv_match() to check if the enabled privilege levels of the
trigger match CPU's current privilege level.

[1]: https://github.com/riscv/riscv-debug-spec/releases/tag/task_group_vote
[2]: https://github.com/riscv/riscv-debug-spec/releases/tag/1.0.0-rc1-asciidoc

Signed-off-by: Alvin Chang <alvinga@andestech.com>
---
 target/riscv/debug.c | 70 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 70 insertions(+)

diff --git a/target/riscv/debug.c b/target/riscv/debug.c
index e30d99cc2f..3891236b82 100644
--- a/target/riscv/debug.c
+++ b/target/riscv/debug.c
@@ -241,6 +241,76 @@ static void do_trigger_action(CPURISCVState *env, target_ulong trigger_index)
     }
 }
 
+/*
+ * Check the privilege level of specific trigger matches CPU's current privilege
+ * level.
+ */
+static bool trigger_priv_match(CPURISCVState *env, trigger_type_t type,
+                               int trigger_index)
+{
+    target_ulong ctrl = env->tdata1[trigger_index];
+
+    switch (type) {
+    case TRIGGER_TYPE_AD_MATCH:
+        /* type 2 trigger cannot be fired in VU/VS mode */
+        if (env->virt_enabled) {
+            return false;
+        }
+        /* check U/S/M bit against current privilege level */
+        if ((ctrl >> 3) & BIT(env->priv)) {
+            return true;
+        }
+        break;
+    case TRIGGER_TYPE_AD_MATCH6:
+        if (env->virt_enabled) {
+            /* 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;
+    case TRIGGER_TYPE_INST_CNT:
+        if (env->virt_enabled) {
+            /* check VU/VS bit against current privilege level */
+            if ((ctrl >> 25) & BIT(env->priv)) {
+                return true;
+            }
+        } else {
+            /* check U/S/M bit against current privilege level */
+            if ((ctrl >> 6) & BIT(env->priv)) {
+                return true;
+            }
+        }
+        break;
+    case TRIGGER_TYPE_INT:
+    case TRIGGER_TYPE_EXCP:
+    case TRIGGER_TYPE_EXT_SRC:
+        qemu_log_mask(LOG_UNIMP, "trigger type: %d is not supported\n", type);
+        break;
+    case TRIGGER_TYPE_NO_EXIST:
+    case TRIGGER_TYPE_UNAVAIL:
+        qemu_log_mask(LOG_GUEST_ERROR, "trigger type: %d does not exist\n",
+                      type);
+        break;
+    default:
+        g_assert_not_reached();
+    }
+
+    return false;
+}
+
+/* Common matching conditions for all types of the triggers. */
+static bool trigger_common_match(CPURISCVState *env, trigger_type_t type,
+                                 int trigger_index)
+{
+    return trigger_priv_match(env, type, trigger_index);
+}
+
 /* type 2 trigger */
 
 static uint32_t type2_breakpoint_size(CPURISCVState *env, target_ulong ctrl)
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v4 2/4] target/riscv: Apply modularized matching conditions for breakpoint
  2024-02-27  1:24 [PATCH v4 0/4] RISC-V: Modularize common match conditions for trigger Alvin Chang via
  2024-02-27  1:24 ` [PATCH v4 1/4] target/riscv: Add functions for common matching conditions of trigger Alvin Chang via
@ 2024-02-27  1:24 ` Alvin Chang via
  2024-02-27  1:24 ` [PATCH v4 3/4] target/riscv: Apply modularized matching conditions for watchpoint Alvin Chang via
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 11+ messages in thread
From: Alvin Chang via @ 2024-02-27  1:24 UTC (permalink / raw)
  To: qemu-riscv, qemu-devel
  Cc: alistair.francis, bin.meng, liwei1518, dbarboza, zhiwei_liu,
	Alvin Chang

We have implemented trigger_common_match(), which checks if the enabled
privilege levels of the trigger match CPU's current privilege level.
Remove the related code in riscv_cpu_debug_check_breakpoint() and invoke
trigger_common_match() to check the privilege levels of the type 2 and
type 6 triggers for the breakpoints.

This commit also changes the behavior of looping the triggers. In
previous implementation, if we have a type 2 trigger and
env->virt_enabled is true, we directly return false to stop the loop.
Now we keep looping all the triggers until we find a matched trigger.

Only the execution bit and the executed PC should be futher checked in
riscv_cpu_debug_check_breakpoint().

Signed-off-by: Alvin Chang <alvinga@andestech.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
---
 target/riscv/debug.c | 26 ++++++--------------------
 1 file changed, 6 insertions(+), 20 deletions(-)

diff --git a/target/riscv/debug.c b/target/riscv/debug.c
index 3891236b82..b7b0fa8945 100644
--- a/target/riscv/debug.c
+++ b/target/riscv/debug.c
@@ -855,21 +855,17 @@ bool riscv_cpu_debug_check_breakpoint(CPUState *cs)
         for (i = 0; i < RV_MAX_TRIGGERS; i++) {
             trigger_type = get_trigger_type(env, i);
 
+            if (!trigger_common_match(env, trigger_type, i)) {
+                continue;
+            }
+
             switch (trigger_type) {
             case TRIGGER_TYPE_AD_MATCH:
-                /* type 2 trigger cannot be fired in VU/VS mode */
-                if (env->virt_enabled) {
-                    return false;
-                }
-
                 ctrl = env->tdata1[i];
                 pc = env->tdata2[i];
 
                 if ((ctrl & TYPE2_EXEC) && (bp->pc == pc)) {
-                    /* check U/S/M bit against current privilege level */
-                    if ((ctrl >> 3) & BIT(env->priv)) {
-                        return true;
-                    }
+                    return true;
                 }
                 break;
             case TRIGGER_TYPE_AD_MATCH6:
@@ -877,17 +873,7 @@ bool riscv_cpu_debug_check_breakpoint(CPUState *cs)
                 pc = env->tdata2[i];
 
                 if ((ctrl & TYPE6_EXEC) && (bp->pc == pc)) {
-                    if (env->virt_enabled) {
-                        /* 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;
-                        }
-                    }
+                    return true;
                 }
                 break;
             default:
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v4 3/4] target/riscv: Apply modularized matching conditions for watchpoint
  2024-02-27  1:24 [PATCH v4 0/4] RISC-V: Modularize common match conditions for trigger Alvin Chang via
  2024-02-27  1:24 ` [PATCH v4 1/4] target/riscv: Add functions for common matching conditions of trigger Alvin Chang via
  2024-02-27  1:24 ` [PATCH v4 2/4] target/riscv: Apply modularized matching conditions for breakpoint Alvin Chang via
@ 2024-02-27  1:24 ` Alvin Chang via
  2024-06-04  0:27   ` Alistair Francis
  2024-02-27  1:24 ` [PATCH v4 4/4] target/riscv: Apply modularized matching conditions for icount trigger Alvin Chang via
  2024-03-07  2:35 ` [PATCH v4 0/4] RISC-V: Modularize common match conditions for trigger Alvin Che-Chia Chang(張哲嘉)
  4 siblings, 1 reply; 11+ messages in thread
From: Alvin Chang via @ 2024-02-27  1:24 UTC (permalink / raw)
  To: qemu-riscv, qemu-devel
  Cc: alistair.francis, bin.meng, liwei1518, dbarboza, zhiwei_liu,
	Alvin Chang

We have implemented trigger_common_match(), which checks if the enabled
privilege levels of the trigger match CPU's current privilege level.
Remove the related code in riscv_cpu_debug_check_watchpoint() and invoke
trigger_common_match() to check the privilege levels of the type 2 and
type 6 triggers for the watchpoints.

This commit also changes the behavior of looping the triggers. In
previous implementation, if we have a type 2 trigger and
env->virt_enabled is true, we directly return false to stop the loop.
Now we keep looping all the triggers until we find a matched trigger.

Only load/store bits and loaded/stored address should be further checked
in riscv_cpu_debug_check_watchpoint().

Signed-off-by: Alvin Chang <alvinga@andestech.com>
---
 target/riscv/debug.c | 26 ++++++--------------------
 1 file changed, 6 insertions(+), 20 deletions(-)

diff --git a/target/riscv/debug.c b/target/riscv/debug.c
index b7b0fa8945..9f9f332019 100644
--- a/target/riscv/debug.c
+++ b/target/riscv/debug.c
@@ -899,13 +899,12 @@ bool riscv_cpu_debug_check_watchpoint(CPUState *cs, CPUWatchpoint *wp)
     for (i = 0; i < RV_MAX_TRIGGERS; i++) {
         trigger_type = get_trigger_type(env, i);
 
+        if (!trigger_common_match(env, trigger_type, i)) {
+            continue;
+        }
+
         switch (trigger_type) {
         case TRIGGER_TYPE_AD_MATCH:
-            /* type 2 trigger cannot be fired in VU/VS mode */
-            if (env->virt_enabled) {
-                return false;
-            }
-
             ctrl = env->tdata1[i];
             addr = env->tdata2[i];
             flags = 0;
@@ -918,10 +917,7 @@ bool riscv_cpu_debug_check_watchpoint(CPUState *cs, CPUWatchpoint *wp)
             }
 
             if ((wp->flags & flags) && (wp->vaddr == addr)) {
-                /* check U/S/M bit against current privilege level */
-                if ((ctrl >> 3) & BIT(env->priv)) {
-                    return true;
-                }
+                return true;
             }
             break;
         case TRIGGER_TYPE_AD_MATCH6:
@@ -937,17 +933,7 @@ bool riscv_cpu_debug_check_watchpoint(CPUState *cs, CPUWatchpoint *wp)
             }
 
             if ((wp->flags & flags) && (wp->vaddr == addr)) {
-                if (env->virt_enabled) {
-                    /* 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;
-                    }
-                }
+                return true;
             }
             break;
         default:
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v4 4/4] target/riscv: Apply modularized matching conditions for icount trigger
  2024-02-27  1:24 [PATCH v4 0/4] RISC-V: Modularize common match conditions for trigger Alvin Chang via
                   ` (2 preceding siblings ...)
  2024-02-27  1:24 ` [PATCH v4 3/4] target/riscv: Apply modularized matching conditions for watchpoint Alvin Chang via
@ 2024-02-27  1:24 ` Alvin Chang via
  2024-06-04  0:27   ` Alistair Francis
  2024-03-07  2:35 ` [PATCH v4 0/4] RISC-V: Modularize common match conditions for trigger Alvin Che-Chia Chang(張哲嘉)
  4 siblings, 1 reply; 11+ messages in thread
From: Alvin Chang via @ 2024-02-27  1:24 UTC (permalink / raw)
  To: qemu-riscv, qemu-devel
  Cc: alistair.francis, bin.meng, liwei1518, dbarboza, zhiwei_liu,
	Alvin Chang

We have implemented trigger_common_match(), which checks if the enabled
privilege levels of the trigger match CPU's current privilege level. We
can invoke trigger_common_match() to check the privilege levels of the
type 3 triggers.

Signed-off-by: Alvin Chang <alvinga@andestech.com>
---
 target/riscv/debug.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/target/riscv/debug.c b/target/riscv/debug.c
index 9f9f332019..eb45e2c147 100644
--- a/target/riscv/debug.c
+++ b/target/riscv/debug.c
@@ -624,7 +624,7 @@ void helper_itrigger_match(CPURISCVState *env)
         if (get_trigger_type(env, i) != TRIGGER_TYPE_INST_CNT) {
             continue;
         }
-        if (check_itrigger_priv(env, i)) {
+        if (!trigger_common_match(env, TRIGGER_TYPE_INST_CNT, i)) {
             continue;
         }
         count = itrigger_get_count(env, i);
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 11+ messages in thread

* RE: [PATCH v4 0/4] RISC-V: Modularize common match conditions for trigger
  2024-02-27  1:24 [PATCH v4 0/4] RISC-V: Modularize common match conditions for trigger Alvin Chang via
                   ` (3 preceding siblings ...)
  2024-02-27  1:24 ` [PATCH v4 4/4] target/riscv: Apply modularized matching conditions for icount trigger Alvin Chang via
@ 2024-03-07  2:35 ` Alvin Che-Chia Chang(張哲嘉)
  2024-06-04  1:58   ` Alistair Francis
  4 siblings, 1 reply; 11+ messages in thread
From: Alvin Che-Chia Chang(張哲嘉) @ 2024-03-07  2:35 UTC (permalink / raw)
  To: qemu-riscv@nongnu.org, qemu-devel@nongnu.org
  Cc: alistair.francis@wdc.com, bin.meng@windriver.com,
	liwei1518@gmail.com, dbarboza@ventanamicro.com,
	zhiwei_liu@linux.alibaba.com

Hi Alistair,

Please also take a look at this series, I guess it is ready to be applied, thanks!


BRs,
Alvin

> -----Original Message-----
> From: Alvin Che-Chia Chang(張哲嘉) <alvinga@andestech.com>
> Sent: Tuesday, February 27, 2024 9:24 AM
> To: qemu-riscv@nongnu.org; qemu-devel@nongnu.org
> Cc: alistair.francis@wdc.com; bin.meng@windriver.com;
> liwei1518@gmail.com; dbarboza@ventanamicro.com;
> zhiwei_liu@linux.alibaba.com; Alvin Che-Chia Chang(張哲嘉)
> <alvinga@andestech.com>
> Subject: [PATCH v4 0/4] RISC-V: Modularize common match conditions for
> trigger
>
> According to RISC-V Debug specification ratified version 0.13 [1] (also applied
> to version 1.0 [2] but it has not been ratified yet), the enabled privilege levels
> of the trigger is common match conditions for all the types of the trigger.
>
> This series modularize the code for checking the privilege levels of type 2/3/6
> triggers by implementing functions trigger_common_match() and
> trigger_priv_match().
>
> Additional match conditions, such as CSR tcontrol and textra, can be further
> implemented into trigger_common_match() in the future.
>
> [1]: https://github.com/riscv/riscv-debug-spec/releases/tag/task_group_vote
> [2]: https://github.com/riscv/riscv-debug-spec/releases/tag/1.0.0-rc1-asciidoc
>
> Changes from v3:
> - Change this series to target Debug Spec. version 0.13
>
> Changes from v2:
> - Explicitly mention the targeting version of RISC-V Debug Spec.
>
> Changes from v1:
> - Fix typo
> - Add commit description for changing behavior of looping the triggers
>   when we check type 2 triggers.
>
> Alvin Chang (4):
>   target/riscv: Add functions for common matching conditions of trigger
>   target/riscv: Apply modularized matching conditions for breakpoint
>   target/riscv: Apply modularized matching conditions for watchpoint
>   target/riscv: Apply modularized matching conditions for icount trigger
>
>  target/riscv/debug.c | 124 +++++++++++++++++++++++++++++--------------
>  1 file changed, 83 insertions(+), 41 deletions(-)
>
> --
> 2.34.1

CONFIDENTIALITY NOTICE:

This e-mail (and its attachments) may contain confidential and legally privileged information or information protected from disclosure. If you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution, or use of the information contained herein is strictly prohibited. In this case, please immediately notify the sender by return e-mail, delete the message (and any accompanying documents) and destroy all printed hard copies. Thank you for your cooperation.

Copyright ANDES TECHNOLOGY CORPORATION - All Rights Reserved.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v4 3/4] target/riscv: Apply modularized matching conditions for watchpoint
  2024-02-27  1:24 ` [PATCH v4 3/4] target/riscv: Apply modularized matching conditions for watchpoint Alvin Chang via
@ 2024-06-04  0:27   ` Alistair Francis
  0 siblings, 0 replies; 11+ messages in thread
From: Alistair Francis @ 2024-06-04  0:27 UTC (permalink / raw)
  To: Alvin Chang
  Cc: qemu-riscv, qemu-devel, alistair.francis, bin.meng, liwei1518,
	dbarboza, zhiwei_liu

On Tue, Feb 27, 2024 at 11:26 AM Alvin Chang via <qemu-devel@nongnu.org> wrote:
>
> We have implemented trigger_common_match(), which checks if the enabled
> privilege levels of the trigger match CPU's current privilege level.
> Remove the related code in riscv_cpu_debug_check_watchpoint() and invoke
> trigger_common_match() to check the privilege levels of the type 2 and
> type 6 triggers for the watchpoints.
>
> This commit also changes the behavior of looping the triggers. In
> previous implementation, if we have a type 2 trigger and
> env->virt_enabled is true, we directly return false to stop the loop.
> Now we keep looping all the triggers until we find a matched trigger.
>
> Only load/store bits and loaded/stored address should be further checked
> in riscv_cpu_debug_check_watchpoint().
>
> Signed-off-by: Alvin Chang <alvinga@andestech.com>

Acked-by: Alistair Francis <alistair.francis@wdc.com>

Alistair

> ---
>  target/riscv/debug.c | 26 ++++++--------------------
>  1 file changed, 6 insertions(+), 20 deletions(-)
>
> diff --git a/target/riscv/debug.c b/target/riscv/debug.c
> index b7b0fa8945..9f9f332019 100644
> --- a/target/riscv/debug.c
> +++ b/target/riscv/debug.c
> @@ -899,13 +899,12 @@ bool riscv_cpu_debug_check_watchpoint(CPUState *cs, CPUWatchpoint *wp)
>      for (i = 0; i < RV_MAX_TRIGGERS; i++) {
>          trigger_type = get_trigger_type(env, i);
>
> +        if (!trigger_common_match(env, trigger_type, i)) {
> +            continue;
> +        }
> +
>          switch (trigger_type) {
>          case TRIGGER_TYPE_AD_MATCH:
> -            /* type 2 trigger cannot be fired in VU/VS mode */
> -            if (env->virt_enabled) {
> -                return false;
> -            }
> -
>              ctrl = env->tdata1[i];
>              addr = env->tdata2[i];
>              flags = 0;
> @@ -918,10 +917,7 @@ bool riscv_cpu_debug_check_watchpoint(CPUState *cs, CPUWatchpoint *wp)
>              }
>
>              if ((wp->flags & flags) && (wp->vaddr == addr)) {
> -                /* check U/S/M bit against current privilege level */
> -                if ((ctrl >> 3) & BIT(env->priv)) {
> -                    return true;
> -                }
> +                return true;
>              }
>              break;
>          case TRIGGER_TYPE_AD_MATCH6:
> @@ -937,17 +933,7 @@ bool riscv_cpu_debug_check_watchpoint(CPUState *cs, CPUWatchpoint *wp)
>              }
>
>              if ((wp->flags & flags) && (wp->vaddr == addr)) {
> -                if (env->virt_enabled) {
> -                    /* 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;
> -                    }
> -                }
> +                return true;
>              }
>              break;
>          default:
> --
> 2.34.1
>
>


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v4 4/4] target/riscv: Apply modularized matching conditions for icount trigger
  2024-02-27  1:24 ` [PATCH v4 4/4] target/riscv: Apply modularized matching conditions for icount trigger Alvin Chang via
@ 2024-06-04  0:27   ` Alistair Francis
  0 siblings, 0 replies; 11+ messages in thread
From: Alistair Francis @ 2024-06-04  0:27 UTC (permalink / raw)
  To: Alvin Chang
  Cc: qemu-riscv, qemu-devel, alistair.francis, bin.meng, liwei1518,
	dbarboza, zhiwei_liu

On Tue, Feb 27, 2024 at 11:25 AM Alvin Chang via <qemu-devel@nongnu.org> wrote:
>
> We have implemented trigger_common_match(), which checks if the enabled
> privilege levels of the trigger match CPU's current privilege level. We
> can invoke trigger_common_match() to check the privilege levels of the
> type 3 triggers.
>
> Signed-off-by: Alvin Chang <alvinga@andestech.com>

Acked-by: Alistair Francis <alistair.francis@wdc.com>

Alistair

> ---
>  target/riscv/debug.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/target/riscv/debug.c b/target/riscv/debug.c
> index 9f9f332019..eb45e2c147 100644
> --- a/target/riscv/debug.c
> +++ b/target/riscv/debug.c
> @@ -624,7 +624,7 @@ void helper_itrigger_match(CPURISCVState *env)
>          if (get_trigger_type(env, i) != TRIGGER_TYPE_INST_CNT) {
>              continue;
>          }
> -        if (check_itrigger_priv(env, i)) {
> +        if (!trigger_common_match(env, TRIGGER_TYPE_INST_CNT, i)) {
>              continue;
>          }
>          count = itrigger_get_count(env, i);
> --
> 2.34.1
>
>


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v4 1/4] target/riscv: Add functions for common matching conditions of trigger
  2024-02-27  1:24 ` [PATCH v4 1/4] target/riscv: Add functions for common matching conditions of trigger Alvin Chang via
@ 2024-06-04  0:28   ` Alistair Francis
  0 siblings, 0 replies; 11+ messages in thread
From: Alistair Francis @ 2024-06-04  0:28 UTC (permalink / raw)
  To: Alvin Chang
  Cc: qemu-riscv, qemu-devel, alistair.francis, bin.meng, liwei1518,
	dbarboza, zhiwei_liu

On Tue, Feb 27, 2024 at 11:26 AM Alvin Chang via <qemu-devel@nongnu.org> wrote:
>
> According to RISC-V Debug specification version 0.13 [1] (also applied
> to version 1.0 [2] but it has not been ratified yet), there are several
> common matching conditions before firing a trigger, including the
> enabled privilege levels of the trigger.
>
> This commit adds trigger_common_match() to prepare the common matching
> conditions for the type 2/3/6 triggers. For now, we just implement
> trigger_priv_match() to check if the enabled privilege levels of the
> trigger match CPU's current privilege level.
>
> [1]: https://github.com/riscv/riscv-debug-spec/releases/tag/task_group_vote
> [2]: https://github.com/riscv/riscv-debug-spec/releases/tag/1.0.0-rc1-asciidoc
>
> Signed-off-by: Alvin Chang <alvinga@andestech.com>

Reviewed-by: Alistair Francis <alistair.francis@wdc.com>

Alistair

> ---
>  target/riscv/debug.c | 70 ++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 70 insertions(+)
>
> diff --git a/target/riscv/debug.c b/target/riscv/debug.c
> index e30d99cc2f..3891236b82 100644
> --- a/target/riscv/debug.c
> +++ b/target/riscv/debug.c
> @@ -241,6 +241,76 @@ static void do_trigger_action(CPURISCVState *env, target_ulong trigger_index)
>      }
>  }
>
> +/*
> + * Check the privilege level of specific trigger matches CPU's current privilege
> + * level.
> + */
> +static bool trigger_priv_match(CPURISCVState *env, trigger_type_t type,
> +                               int trigger_index)
> +{
> +    target_ulong ctrl = env->tdata1[trigger_index];
> +
> +    switch (type) {
> +    case TRIGGER_TYPE_AD_MATCH:
> +        /* type 2 trigger cannot be fired in VU/VS mode */
> +        if (env->virt_enabled) {
> +            return false;
> +        }
> +        /* check U/S/M bit against current privilege level */
> +        if ((ctrl >> 3) & BIT(env->priv)) {
> +            return true;
> +        }
> +        break;
> +    case TRIGGER_TYPE_AD_MATCH6:
> +        if (env->virt_enabled) {
> +            /* 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;
> +    case TRIGGER_TYPE_INST_CNT:
> +        if (env->virt_enabled) {
> +            /* check VU/VS bit against current privilege level */
> +            if ((ctrl >> 25) & BIT(env->priv)) {
> +                return true;
> +            }
> +        } else {
> +            /* check U/S/M bit against current privilege level */
> +            if ((ctrl >> 6) & BIT(env->priv)) {
> +                return true;
> +            }
> +        }
> +        break;
> +    case TRIGGER_TYPE_INT:
> +    case TRIGGER_TYPE_EXCP:
> +    case TRIGGER_TYPE_EXT_SRC:
> +        qemu_log_mask(LOG_UNIMP, "trigger type: %d is not supported\n", type);
> +        break;
> +    case TRIGGER_TYPE_NO_EXIST:
> +    case TRIGGER_TYPE_UNAVAIL:
> +        qemu_log_mask(LOG_GUEST_ERROR, "trigger type: %d does not exist\n",
> +                      type);
> +        break;
> +    default:
> +        g_assert_not_reached();
> +    }
> +
> +    return false;
> +}
> +
> +/* Common matching conditions for all types of the triggers. */
> +static bool trigger_common_match(CPURISCVState *env, trigger_type_t type,
> +                                 int trigger_index)
> +{
> +    return trigger_priv_match(env, type, trigger_index);
> +}
> +
>  /* type 2 trigger */
>
>  static uint32_t type2_breakpoint_size(CPURISCVState *env, target_ulong ctrl)
> --
> 2.34.1
>
>


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v4 0/4] RISC-V: Modularize common match conditions for trigger
  2024-03-07  2:35 ` [PATCH v4 0/4] RISC-V: Modularize common match conditions for trigger Alvin Che-Chia Chang(張哲嘉)
@ 2024-06-04  1:58   ` Alistair Francis
  2024-06-04  4:24     ` Alvin Che-Chia Chang(張哲嘉)
  0 siblings, 1 reply; 11+ messages in thread
From: Alistair Francis @ 2024-06-04  1:58 UTC (permalink / raw)
  To: Alvin Che-Chia Chang(張哲嘉)
  Cc: qemu-riscv@nongnu.org, qemu-devel@nongnu.org,
	alistair.francis@wdc.com, bin.meng@windriver.com,
	liwei1518@gmail.com, dbarboza@ventanamicro.com,
	zhiwei_liu@linux.alibaba.com

On Thu, Mar 7, 2024 at 12:36 PM Alvin Che-Chia Chang(張哲嘉)
<alvinga@andestech.com> wrote:
>
> Hi Alistair,
>
> Please also take a look at this series, I guess it is ready to be applied, thanks!

This is all acked now, do you mind rebasing on
https://github.com/alistair23/qemu/tree/riscv-to-apply.next and
sending a new version

Alistair

>
>
> BRs,
> Alvin
>
> > -----Original Message-----
> > From: Alvin Che-Chia Chang(張哲嘉) <alvinga@andestech.com>
> > Sent: Tuesday, February 27, 2024 9:24 AM
> > To: qemu-riscv@nongnu.org; qemu-devel@nongnu.org
> > Cc: alistair.francis@wdc.com; bin.meng@windriver.com;
> > liwei1518@gmail.com; dbarboza@ventanamicro.com;
> > zhiwei_liu@linux.alibaba.com; Alvin Che-Chia Chang(張哲嘉)
> > <alvinga@andestech.com>
> > Subject: [PATCH v4 0/4] RISC-V: Modularize common match conditions for
> > trigger
> >
> > According to RISC-V Debug specification ratified version 0.13 [1] (also applied
> > to version 1.0 [2] but it has not been ratified yet), the enabled privilege levels
> > of the trigger is common match conditions for all the types of the trigger.
> >
> > This series modularize the code for checking the privilege levels of type 2/3/6
> > triggers by implementing functions trigger_common_match() and
> > trigger_priv_match().
> >
> > Additional match conditions, such as CSR tcontrol and textra, can be further
> > implemented into trigger_common_match() in the future.
> >
> > [1]: https://github.com/riscv/riscv-debug-spec/releases/tag/task_group_vote
> > [2]: https://github.com/riscv/riscv-debug-spec/releases/tag/1.0.0-rc1-asciidoc
> >
> > Changes from v3:
> > - Change this series to target Debug Spec. version 0.13
> >
> > Changes from v2:
> > - Explicitly mention the targeting version of RISC-V Debug Spec.
> >
> > Changes from v1:
> > - Fix typo
> > - Add commit description for changing behavior of looping the triggers
> >   when we check type 2 triggers.
> >
> > Alvin Chang (4):
> >   target/riscv: Add functions for common matching conditions of trigger
> >   target/riscv: Apply modularized matching conditions for breakpoint
> >   target/riscv: Apply modularized matching conditions for watchpoint
> >   target/riscv: Apply modularized matching conditions for icount trigger
> >
> >  target/riscv/debug.c | 124 +++++++++++++++++++++++++++++--------------
> >  1 file changed, 83 insertions(+), 41 deletions(-)
> >
> > --
> > 2.34.1
>
> CONFIDENTIALITY NOTICE:
>
> This e-mail (and its attachments) may contain confidential and legally privileged information or information protected from disclosure. If you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution, or use of the information contained herein is strictly prohibited. In this case, please immediately notify the sender by return e-mail, delete the message (and any accompanying documents) and destroy all printed hard copies. Thank you for your cooperation.
>
> Copyright ANDES TECHNOLOGY CORPORATION - All Rights Reserved.


^ permalink raw reply	[flat|nested] 11+ messages in thread

* RE: [PATCH v4 0/4] RISC-V: Modularize common match conditions for trigger
  2024-06-04  1:58   ` Alistair Francis
@ 2024-06-04  4:24     ` Alvin Che-Chia Chang(張哲嘉)
  0 siblings, 0 replies; 11+ messages in thread
From: Alvin Che-Chia Chang(張哲嘉) @ 2024-06-04  4:24 UTC (permalink / raw)
  To: Alistair Francis
  Cc: qemu-riscv@nongnu.org, qemu-devel@nongnu.org,
	alistair.francis@wdc.com, bin.meng@windriver.com,
	liwei1518@gmail.com, dbarboza@ventanamicro.com,
	zhiwei_liu@linux.alibaba.com

> -----Original Message-----
> From: Alistair Francis <alistair23@gmail.com>
> Sent: Tuesday, June 4, 2024 9:58 AM
> To: Alvin Che-Chia Chang(張哲嘉) <alvinga@andestech.com>
> Cc: qemu-riscv@nongnu.org; qemu-devel@nongnu.org;
> alistair.francis@wdc.com; bin.meng@windriver.com; liwei1518@gmail.com;
> dbarboza@ventanamicro.com; zhiwei_liu@linux.alibaba.com
> Subject: Re: [PATCH v4 0/4] RISC-V: Modularize common match conditions for
> trigger
>
> [EXTERNAL MAIL]
>
> On Thu, Mar 7, 2024 at 12:36 PM Alvin Che-Chia Chang(張哲嘉)
> <alvinga@andestech.com> wrote:
> >
> > Hi Alistair,
> >
> > Please also take a look at this series, I guess it is ready to be applied, thanks!
>
> This is all acked now, do you mind rebasing on
> https://github.com/alistair23/qemu/tree/riscv-to-apply.next and sending a new
> version

Done, please check patch v5.
I also took care of Daniel's latest patch:
https://github.com/alistair23/qemu/commit/0099f6053410f5611796213b723e908cfc8055eb


BRs,
Alvin

>
> Alistair
>
> >
> >
> > BRs,
> > Alvin
> >
> > > -----Original Message-----
> > > From: Alvin Che-Chia Chang(張哲嘉) <alvinga@andestech.com>
> > > Sent: Tuesday, February 27, 2024 9:24 AM
> > > To: qemu-riscv@nongnu.org; qemu-devel@nongnu.org
> > > Cc: alistair.francis@wdc.com; bin.meng@windriver.com;
> > > liwei1518@gmail.com; dbarboza@ventanamicro.com;
> > > zhiwei_liu@linux.alibaba.com; Alvin Che-Chia Chang(張哲嘉)
> > > <alvinga@andestech.com>
> > > Subject: [PATCH v4 0/4] RISC-V: Modularize common match conditions
> > > for trigger
> > >
> > > According to RISC-V Debug specification ratified version 0.13 [1]
> > > (also applied to version 1.0 [2] but it has not been ratified yet),
> > > the enabled privilege levels of the trigger is common match conditions for
> all the types of the trigger.
> > >
> > > This series modularize the code for checking the privilege levels of
> > > type 2/3/6 triggers by implementing functions trigger_common_match()
> > > and trigger_priv_match().
> > >
> > > Additional match conditions, such as CSR tcontrol and textra, can be
> > > further implemented into trigger_common_match() in the future.
> > >
> > > [1]:
> > > https://github.com/riscv/riscv-debug-spec/releases/tag/task_group_vo
> > > te
> > > [2]:
> > > https://github.com/riscv/riscv-debug-spec/releases/tag/1.0.0-rc1-asc
> > > iidoc
> > >
> > > Changes from v3:
> > > - Change this series to target Debug Spec. version 0.13
> > >
> > > Changes from v2:
> > > - Explicitly mention the targeting version of RISC-V Debug Spec.
> > >
> > > Changes from v1:
> > > - Fix typo
> > > - Add commit description for changing behavior of looping the triggers
> > >   when we check type 2 triggers.
> > >
> > > Alvin Chang (4):
> > >   target/riscv: Add functions for common matching conditions of trigger
> > >   target/riscv: Apply modularized matching conditions for breakpoint
> > >   target/riscv: Apply modularized matching conditions for watchpoint
> > >   target/riscv: Apply modularized matching conditions for icount
> > > trigger
> > >
> > >  target/riscv/debug.c | 124
> > > +++++++++++++++++++++++++++++--------------
> > >  1 file changed, 83 insertions(+), 41 deletions(-)
> > >
> > > --
> > > 2.34.1
> >
> > CONFIDENTIALITY NOTICE:
> >
> > This e-mail (and its attachments) may contain confidential and legally
> privileged information or information protected from disclosure. If you are not
> the intended recipient, you are hereby notified that any disclosure, copying,
> distribution, or use of the information contained herein is strictly prohibited. In
> this case, please immediately notify the sender by return e-mail, delete the
> message (and any accompanying documents) and destroy all printed hard
> copies. Thank you for your cooperation.
> >
> > Copyright ANDES TECHNOLOGY CORPORATION - All Rights Reserved.
CONFIDENTIALITY NOTICE:

This e-mail (and its attachments) may contain confidential and legally privileged information or information protected from disclosure. If you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution, or use of the information contained herein is strictly prohibited. In this case, please immediately notify the sender by return e-mail, delete the message (and any accompanying documents) and destroy all printed hard copies. Thank you for your cooperation.

Copyright ANDES TECHNOLOGY CORPORATION - All Rights Reserved.

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2024-06-04  4:25 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-27  1:24 [PATCH v4 0/4] RISC-V: Modularize common match conditions for trigger Alvin Chang via
2024-02-27  1:24 ` [PATCH v4 1/4] target/riscv: Add functions for common matching conditions of trigger Alvin Chang via
2024-06-04  0:28   ` Alistair Francis
2024-02-27  1:24 ` [PATCH v4 2/4] target/riscv: Apply modularized matching conditions for breakpoint Alvin Chang via
2024-02-27  1:24 ` [PATCH v4 3/4] target/riscv: Apply modularized matching conditions for watchpoint Alvin Chang via
2024-06-04  0:27   ` Alistair Francis
2024-02-27  1:24 ` [PATCH v4 4/4] target/riscv: Apply modularized matching conditions for icount trigger Alvin Chang via
2024-06-04  0:27   ` Alistair Francis
2024-03-07  2:35 ` [PATCH v4 0/4] RISC-V: Modularize common match conditions for trigger Alvin Che-Chia Chang(張哲嘉)
2024-06-04  1:58   ` Alistair Francis
2024-06-04  4:24     ` Alvin Che-Chia Chang(張哲嘉)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).