{"id":2229690,"url":"http://patchwork.ozlabs.org/api/1.1/patches/2229690/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260428160103.3551125-5-jim.shu@sifive.com/","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/1.1/projects/14/?format=json","name":"QEMU Development","link_name":"qemu-devel","list_id":"qemu-devel.nongnu.org","list_email":"qemu-devel@nongnu.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20260428160103.3551125-5-jim.shu@sifive.com>","date":"2026-04-28T16:01:03","name":"[4/4] hw/intc: riscv_aplic: add trace events of APLIC read/write function","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"ef989ab025e8aebd920e3a9950caeccf04fd9f4d","submitter":{"id":83153,"url":"http://patchwork.ozlabs.org/api/1.1/people/83153/?format=json","name":"Jim Shu","email":"jim.shu@sifive.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260428160103.3551125-5-jim.shu@sifive.com/mbox/","series":[{"id":501889,"url":"http://patchwork.ozlabs.org/api/1.1/series/501889/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=501889","date":"2026-04-28T16:01:00","name":"Minor fixes and enhancements of RISC-V AIA devices","version":1,"mbox":"http://patchwork.ozlabs.org/series/501889/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2229690/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2229690/checks/","tags":{},"headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=sifive.com header.i=@sifive.com header.a=rsa-sha256\n header.s=google header.b=I6cf0xLZ;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g4lbq6GL9z1xvV\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 29 Apr 2026 02:03:51 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wHku0-0003wN-3G; Tue, 28 Apr 2026 12:03:12 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <jim.shu@sifive.com>)\n id 1wHksU-00039w-A7\n for qemu-devel@nongnu.org; Tue, 28 Apr 2026 12:01:41 -0400","from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <jim.shu@sifive.com>)\n id 1wHksP-0003lH-57\n for qemu-devel@nongnu.org; Tue, 28 Apr 2026 12:01:37 -0400","by mail-pf1-x42f.google.com with SMTP id\n d2e1a72fcca58-8296dabef74so9658538b3a.1\n for <qemu-devel@nongnu.org>; Tue, 28 Apr 2026 09:01:32 -0700 (PDT)","from hsinchu26.internal.sifive.com ([210.176.154.34])\n by smtp.gmail.com with ESMTPSA id\n d2e1a72fcca58-834daf30fbfsm3002331b3a.33.2026.04.28.09.01.28\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Tue, 28 Apr 2026 09:01:30 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=sifive.com; s=google; t=1777392091; x=1777996891; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=/Hx21rvPtv3e1ezzyiyMTIiO3uaK5NV82dpiR14Fe1A=;\n b=I6cf0xLZ2xEBIqzjR+6APzJjiFFPGJOUbR0J0z3b5UILgXFyZi174TgpejsvxMhsO6\n KAisXGrB5SRt5/Q1ZcwnU0ST1wLvUjixhUiuKdnxoE03CtB+xINYFzFy1Ugm6NGHkVKL\n npwpME9m6tQd13DqR5rkRUcXl4UjIv3Xx5LyiICBz4WCC16emxk2ki8EM/NB4r7kt5b8\n Het4+RGisVQOElvW9Ok6IC0z6DljyZFfm8BZdqMa5DCm0z73VIHVVa7RXUZjgSgORJE4\n yKE7XmMILbDOSyjyyO0ECYTVzgJcXMFuSFSnPy3zOx2WAhjVwOOQ7C3qqaOkBfXzLybi\n NHGQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777392091; x=1777996891;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=/Hx21rvPtv3e1ezzyiyMTIiO3uaK5NV82dpiR14Fe1A=;\n b=JSwbmnoRtdZODMfq444dOWyTm/wiL/KiAMbIhXCwQsr2R21u7VOC0y09JK7KQN9Raj\n A+avl4oxMPHZkS3Xclp1XgMON32/4YWgcy2+2zXjps/eJ8MvfUFN6jsHIXVl4rbmrIRS\n PIfUzHiQEKobKs9JzQGEJxu83wLKmcPENRsWO5qqxrXYaNR564sKDDiiQaM5tx0AUgqt\n a/V4mGkLk1s25l2SThRLgxUQ6MU3JZuIUKiRlcF6naioXv7J0d8sE6zOC1/HePI/EoPq\n ws3TbuaMkncHYTLjInlR0yLaTQX0W337XBSjQ+8PD/TDYE9MShD5x1VNkpnTYQ+rtXTF\n sWkA==","X-Gm-Message-State":"AOJu0Yy5tVOdHTRIbX+66IpLV7COQAUf1PEwjzo2TIbFFHl8JcVulPJj\n 6wLWDFbv55zPWo/SSlG1YB6qbIB6lKKaP9DotQQ1pKVYFQxhpsl1xq3mo0BOpoZkVWklHsCU2tk\n PQUU1blfVS1+ZsvdrhBecnVvSVhNbogLUlxZVD4o586kcgxSs+5nFqxc+ADf2L1WLLdYJtzxeHj\n fgwKwjhEzSXF25dY/sEKb11KehAMphcRqX1SpJlE+l","X-Gm-Gg":"AeBDiev8dlfvT9G0LT5qN991WqxFTLp+xH9BpInl9p/KlKwPoEpARHaaU0xxBEZONy4\n cDD6EWnuxIH+OvunNFsY5aEpelPPuql4fiEvGdSfBIHl4FIyahkVZUgHzbAxXsuHyTCH9VRkxnW\n 1v2gW2FYsJl3iATT8QppIJh6ar4AfZDDCRncsJaoC9hWeMZ5FmmbKuHo9DYXqFayKGyC/80srmn\n SVOgbym7wRaJir0+HwEjvI08/Vxd99wLcOChjWTUlr1rwgOrx02gVR0e8cheZO1LaBXDuGpxiZF\n rP8KNmHRSPCAOFZScOigFwb52MUeKDTwjfOGZ4l6w8nMdxKAlvbVy3uL4xA+dt4DkBkALuZs6MN\n 4D+pJaho6GBsS5Ic9owXwTSsu1dzW92Lonl5RFSea4E4VMyUfvqA4uG0iMzZZpR4U8vnaG6nBhQ\n Z7Hcy6CRrSsOXitQvEM0zhi7UMLKkDGHRtMinpLgX+gGzUd3UMIgfI4P0=","X-Received":"by 2002:a05:6a00:3989:b0:82f:8a29:e3b4 with SMTP id\n d2e1a72fcca58-834ddc9558amr3530183b3a.50.1777392090710;\n Tue, 28 Apr 2026 09:01:30 -0700 (PDT)","From":"Jim Shu <jim.shu@sifive.com>","To":"qemu-devel@nongnu.org,\n\tqemu-riscv@nongnu.org","Cc":"Palmer Dabbelt <palmer@dabbelt.com>,\n Alistair Francis <alistair.francis@wdc.com>,\n Weiwei Li <liwei1518@gmail.com>,\n Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>,\n Liu Zhiwei <zhiwei_liu@linux.alibaba.com>,\n Chao Liu <chao.liu.zevorn@gmail.com>, Jim Shu <jim.shu@sifive.com>","Subject":"[PATCH 4/4] hw/intc: riscv_aplic: add trace events of APLIC\n read/write function","Date":"Wed, 29 Apr 2026 00:01:03 +0800","Message-ID":"<20260428160103.3551125-5-jim.shu@sifive.com>","X-Mailer":"git-send-email 2.43.0","In-Reply-To":"<20260428160103.3551125-1-jim.shu@sifive.com>","References":"<20260428160103.3551125-1-jim.shu@sifive.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Received-SPF":"pass client-ip=2607:f8b0:4864:20::42f;\n envelope-from=jim.shu@sifive.com; helo=mail-pf1-x42f.google.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"},"content":"Add the trace events for APLIC read/write functions.\n\nSigned-off-by: Jim Shu <jim.shu@sifive.com>\n---\n hw/intc/riscv_aplic.c | 63 ++++++++++++++++++++++++++-----------------\n hw/intc/trace-events  |  4 +++\n 2 files changed, 42 insertions(+), 25 deletions(-)","diff":"diff --git a/hw/intc/riscv_aplic.c b/hw/intc/riscv_aplic.c\nindex a04e0e1a898..55515d1a085 100644\n--- a/hw/intc/riscv_aplic.c\n+++ b/hw/intc/riscv_aplic.c\n@@ -35,6 +35,7 @@\n #include \"system/tcg.h\"\n #include \"kvm/kvm_riscv.h\"\n #include \"migration/vmstate.h\"\n+#include \"trace.h\"\n \n #define APLIC_MAX_IDC                  (1UL << 14)\n #define APLIC_MAX_SOURCE               1024\n@@ -626,6 +627,7 @@ static void riscv_aplic_request(void *opaque, int irq, int level)\n static uint64_t riscv_aplic_read(void *opaque, hwaddr addr, unsigned size)\n {\n     uint32_t irq, word, idc;\n+    uint64_t val;\n     RISCVAPLICState *aplic = opaque;\n \n     /* Reads must be 4 byte words */\n@@ -634,18 +636,18 @@ static uint64_t riscv_aplic_read(void *opaque, hwaddr addr, unsigned size)\n     }\n \n     if (addr == APLIC_DOMAINCFG) {\n-        return APLIC_DOMAINCFG_RDONLY | aplic->domaincfg |\n-               (aplic->msimode ? APLIC_DOMAINCFG_DM : 0);\n+        val = APLIC_DOMAINCFG_RDONLY | aplic->domaincfg |\n+              (aplic->msimode ? APLIC_DOMAINCFG_DM : 0);\n     } else if ((APLIC_SOURCECFG_BASE <= addr) &&\n             (addr < (APLIC_SOURCECFG_BASE + (aplic->num_irqs - 1) * 4))) {\n         irq  = ((addr - APLIC_SOURCECFG_BASE) >> 2) + 1;\n-        return aplic->sourcecfg[irq];\n+        val = aplic->sourcecfg[irq];\n     } else if (aplic->mmode && aplic->msimode &&\n                (addr == APLIC_MMSICFGADDR)) {\n-        return aplic->mmsicfgaddr;\n+        val = aplic->mmsicfgaddr;\n     } else if (aplic->mmode && aplic->msimode &&\n                (addr == APLIC_MMSICFGADDRH)) {\n-        return aplic->mmsicfgaddrH;\n+        val = aplic->mmsicfgaddrH;\n     } else if (aplic->mmode && aplic->msimode &&\n                (addr == APLIC_SMSICFGADDR)) {\n         /*\n@@ -657,65 +659,74 @@ static uint64_t riscv_aplic_read(void *opaque, hwaddr addr, unsigned size)\n          *     only zero in at least one of the supervisor-level child\n          * domains).\n          */\n-        return (aplic->num_children) ? aplic->smsicfgaddr : 0;\n+        val = (aplic->num_children) ? aplic->smsicfgaddr : 0;\n     } else if (aplic->mmode && aplic->msimode &&\n                (addr == APLIC_SMSICFGADDRH)) {\n-        return (aplic->num_children) ? aplic->smsicfgaddrH : 0;\n+        val = (aplic->num_children) ? aplic->smsicfgaddrH : 0;\n     } else if ((APLIC_SETIP_BASE <= addr) &&\n             (addr < (APLIC_SETIP_BASE + aplic->bitfield_words * 4))) {\n         word = (addr - APLIC_SETIP_BASE) >> 2;\n-        return riscv_aplic_read_pending_word(aplic, word);\n+        val = riscv_aplic_read_pending_word(aplic, word);\n     } else if (addr == APLIC_SETIPNUM) {\n-        return 0;\n+        val = 0;\n     } else if ((APLIC_CLRIP_BASE <= addr) &&\n             (addr < (APLIC_CLRIP_BASE + aplic->bitfield_words * 4))) {\n         word = (addr - APLIC_CLRIP_BASE) >> 2;\n-        return riscv_aplic_read_input_word(aplic, word);\n+        val = riscv_aplic_read_input_word(aplic, word);\n     } else if (addr == APLIC_CLRIPNUM) {\n-        return 0;\n+        val = 0;\n     } else if ((APLIC_SETIE_BASE <= addr) &&\n             (addr < (APLIC_SETIE_BASE + aplic->bitfield_words * 4))) {\n         word = (addr - APLIC_SETIE_BASE) >> 2;\n-        return riscv_aplic_read_enabled_word(aplic, word);\n+        val = riscv_aplic_read_enabled_word(aplic, word);\n     } else if (addr == APLIC_SETIENUM) {\n-        return 0;\n+        val = 0;\n     } else if ((APLIC_CLRIE_BASE <= addr) &&\n             (addr < (APLIC_CLRIE_BASE + aplic->bitfield_words * 4))) {\n-        return 0;\n+        val = 0;\n     } else if (addr == APLIC_CLRIENUM) {\n-        return 0;\n+        val = 0;\n     } else if (addr == APLIC_SETIPNUM_LE) {\n-        return 0;\n+        val = 0;\n     } else if (addr == APLIC_SETIPNUM_BE) {\n-        return 0;\n+        val = 0;\n     } else if (addr == APLIC_GENMSI) {\n-        return (aplic->msimode) ? aplic->genmsi : 0;\n+        val = (aplic->msimode) ? aplic->genmsi : 0;\n     } else if ((APLIC_TARGET_BASE <= addr) &&\n             (addr < (APLIC_TARGET_BASE + (aplic->num_irqs - 1) * 4))) {\n         irq = ((addr - APLIC_TARGET_BASE) >> 2) + 1;\n         if (!riscv_aplic_source_active(aplic, irq)) {\n-            return 0;\n+            val = 0;\n+        } else {\n+            val = aplic->target[irq];\n         }\n-        return aplic->target[irq];\n     } else if (!aplic->msimode && (APLIC_IDC_BASE <= addr) &&\n             (addr < (APLIC_IDC_BASE + aplic->num_harts * APLIC_IDC_SIZE))) {\n         idc = (addr - APLIC_IDC_BASE) / APLIC_IDC_SIZE;\n         switch (addr - (APLIC_IDC_BASE + idc * APLIC_IDC_SIZE)) {\n         case APLIC_IDC_IDELIVERY:\n-            return aplic->idelivery[idc];\n+            val = aplic->idelivery[idc];\n+            break;\n         case APLIC_IDC_IFORCE:\n-            return aplic->iforce[idc];\n+            val = aplic->iforce[idc];\n+            break;\n         case APLIC_IDC_ITHRESHOLD:\n-            return aplic->ithreshold[idc];\n+            val = aplic->ithreshold[idc];\n+            break;\n         case APLIC_IDC_TOPI:\n-            return riscv_aplic_idc_topi(aplic, idc);\n+            val = riscv_aplic_idc_topi(aplic, idc);\n+            break;\n         case APLIC_IDC_CLAIMI:\n-            return riscv_aplic_idc_claimi(aplic, idc);\n+            val = riscv_aplic_idc_claimi(aplic, idc);\n+            break;\n         default:\n             goto err;\n         };\n     }\n \n+    trace_riscv_aplic_read(addr, size, val);\n+    return val;\n+\n err:\n     qemu_log_mask(LOG_GUEST_ERROR,\n                   \"%s: Invalid register read 0x%\" HWADDR_PRIx \"\\n\",\n@@ -734,6 +745,8 @@ static void riscv_aplic_write(void *opaque, hwaddr addr, uint64_t value,\n         goto err;\n     }\n \n+    trace_riscv_aplic_write(addr, size, value);\n+\n     if (addr == APLIC_DOMAINCFG) {\n         /* Only IE bit writable at the moment */\n         value &= APLIC_DOMAINCFG_IE;\ndiff --git a/hw/intc/trace-events b/hw/intc/trace-events\nindex 018c609ca5e..36ea75049ab 100644\n--- a/hw/intc/trace-events\n+++ b/hw/intc/trace-events\n@@ -330,3 +330,7 @@ loongarch_msi_set_irq(int irq_num) \"set msi irq %d\"\n loongarch_extioi_setirq(int irq, int level) \"set extirq irq %d level %d\"\n loongarch_extioi_readw(uint64_t addr, uint64_t val) \"addr: 0x%\"PRIx64 \"val: 0x%\" PRIx64\n loongarch_extioi_writew(uint64_t addr, uint64_t val) \"addr: 0x%\"PRIx64 \"val: 0x%\" PRIx64\n+\n+# riscv_aplic.c\n+riscv_aplic_read(uint64_t offset, unsigned size, uint64_t value) \"offset: 0x%\" PRIx64 \", size: %u, value: 0x%\" PRIx64\n+riscv_aplic_write(uint64_t offset, unsigned size, uint64_t value) \"offset: 0x%\" PRIx64 \", size: %u, value: 0x%\" PRIx64\n","prefixes":["4/4"]}