From: "Cédric Le Goater" <clg@kaod.org>
To: qemu-ppc@nongnu.org, qemu-devel@nongnu.org
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
"Daniel Henrique Barboza" <danielhb413@gmail.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Cédric Le Goater" <clg@kaod.org>,
"David Gibson" <david@gibson.dropbear.id.au>
Subject: [PULL 083/102] target/ppc: PMU basic cycle count for pseries TCG
Date: Wed, 15 Dec 2021 18:03:38 +0100 [thread overview]
Message-ID: <20211215170357.321643-71-clg@kaod.org> (raw)
In-Reply-To: <20211215170357.321643-1-clg@kaod.org>
From: Daniel Henrique Barboza <danielhb413@gmail.com>
This patch adds the barebones of the PMU logic by enabling cycle
counting. The overall logic goes as follows:
- MMCR0 reg initial value is set to 0x80000000 (MMCR0_FC set) to avoid
having to spin the PMU right at system init;
- to retrieve the events that are being profiled, pmc_get_event() will
check the current MMCR0 and MMCR1 value and return the appropriate
PMUEventType. For PMCs 1-4, event 0x2 is the implementation dependent
value of PMU_EVENT_INSTRUCTIONS and event 0x1E is the implementation
dependent value of PMU_EVENT_CYCLES. These events are supported by IBM
Power chips since Power8, at least, and the Linux Perf driver makes use
of these events until kernel v5.15. For PMC1, event 0xF0 is the
architected PowerISA event for cycles. Event 0xFE is the architected
PowerISA event for instructions;
- if the counter is frozen, either via the global MMCR0_FC bit or its
individual frozen counter bits, PMU_EVENT_INACTIVE is returned;
- pmu_update_cycles() will go through each counter and update the
values of all PMCs that are counting cycles. This function will be
called every time a MMCR0 update is done to keep counters values
up to date. Upcoming patches will use this function to allow the
counters to be properly updated during read/write of the PMCs
and MMCR1 writes.
Given that the base CPU frequency is fixed at 1Ghz for both powernv and
pseries clock, cycle calculation assumes that 1 nanosecond equals 1 CPU
cycle. Cycle value is then calculated by adding the elapsed time, in
nanoseconds, of the last cycle update done via pmu_update_cycles().
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Message-Id: <20211201151734.654994-3-danielhb413@gmail.com>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
---
target/ppc/cpu.h | 20 ++++++
target/ppc/helper.h | 1 +
target/ppc/spr_tcg.h | 1 +
target/ppc/cpu_init.c | 6 +-
target/ppc/power8-pmu.c | 110 +++++++++++++++++++++++++++++++
target/ppc/power8-pmu-regs.c.inc | 23 ++++++-
6 files changed, 157 insertions(+), 4 deletions(-)
diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h
index 39fadca564bb..69cfb2e5f930 100644
--- a/target/ppc/cpu.h
+++ b/target/ppc/cpu.h
@@ -360,6 +360,9 @@ typedef enum {
#define MMCR0_FCECE PPC_BIT(38) /* FC on Enabled Cond or Event */
#define MMCR0_PMCC0 PPC_BIT(44) /* PMC Control bit 0 */
#define MMCR0_PMCC1 PPC_BIT(45) /* PMC Control bit 1 */
+#define MMCR0_PMCC PPC_BITMASK(44, 45) /* PMC Control */
+#define MMCR0_FC14 PPC_BIT(58) /* PMC Freeze Counters 1-4 bit */
+#define MMCR0_FC56 PPC_BIT(59) /* PMC Freeze Counters 5-6 bit */
/* MMCR0 userspace r/w mask */
#define MMCR0_UREG_MASK (MMCR0_FC | MMCR0_PMAO | MMCR0_PMAE)
/* MMCR2 userspace r/w mask */
@@ -372,6 +375,17 @@ typedef enum {
#define MMCR2_UREG_MASK (MMCR2_FC1P0 | MMCR2_FC2P0 | MMCR2_FC3P0 | \
MMCR2_FC4P0 | MMCR2_FC5P0 | MMCR2_FC6P0)
+#define MMCR1_EVT_SIZE 8
+/* extract64() does a right shift before extracting */
+#define MMCR1_PMC1SEL_START 32
+#define MMCR1_PMC1EVT_EXTR (64 - MMCR1_PMC1SEL_START - MMCR1_EVT_SIZE)
+#define MMCR1_PMC2SEL_START 40
+#define MMCR1_PMC2EVT_EXTR (64 - MMCR1_PMC2SEL_START - MMCR1_EVT_SIZE)
+#define MMCR1_PMC3SEL_START 48
+#define MMCR1_PMC3EVT_EXTR (64 - MMCR1_PMC3SEL_START - MMCR1_EVT_SIZE)
+#define MMCR1_PMC4SEL_START 56
+#define MMCR1_PMC4EVT_EXTR (64 - MMCR1_PMC4SEL_START - MMCR1_EVT_SIZE)
+
/* LPCR bits */
#define LPCR_VPM0 PPC_BIT(0)
#define LPCR_VPM1 PPC_BIT(1)
@@ -1210,6 +1224,12 @@ struct CPUPPCState {
* when counting cycles.
*/
QEMUTimer *pmu_cyc_overflow_timers[PMU_COUNTERS_NUM];
+
+ /*
+ * PMU base time value used by the PMU to calculate
+ * running cycles.
+ */
+ uint64_t pmu_base_time;
};
#define SET_FIT_PERIOD(a_, b_, c_, d_) \
diff --git a/target/ppc/helper.h b/target/ppc/helper.h
index d166323b641c..0e6cf2d09d4e 100644
--- a/target/ppc/helper.h
+++ b/target/ppc/helper.h
@@ -20,6 +20,7 @@ DEF_HELPER_1(rfscv, void, env)
DEF_HELPER_1(hrfid, void, env)
DEF_HELPER_2(store_lpcr, void, env, tl)
DEF_HELPER_2(store_pcr, void, env, tl)
+DEF_HELPER_2(store_mmcr0, void, env, tl)
#endif
DEF_HELPER_1(check_tlb_flush_local, void, env)
DEF_HELPER_1(check_tlb_flush_global, void, env)
diff --git a/target/ppc/spr_tcg.h b/target/ppc/spr_tcg.h
index 520f1ef23336..eb1d0c2bf0dc 100644
--- a/target/ppc/spr_tcg.h
+++ b/target/ppc/spr_tcg.h
@@ -25,6 +25,7 @@
void spr_noaccess(DisasContext *ctx, int gprn, int sprn);
void spr_read_generic(DisasContext *ctx, int gprn, int sprn);
void spr_write_generic(DisasContext *ctx, int sprn, int gprn);
+void spr_write_MMCR0(DisasContext *ctx, int sprn, int gprn);
void spr_read_xer(DisasContext *ctx, int gprn, int sprn);
void spr_write_xer(DisasContext *ctx, int sprn, int gprn);
void spr_read_lr(DisasContext *ctx, int gprn, int sprn);
diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c
index 7c47ffd6e19b..cfa605a76b84 100644
--- a/target/ppc/cpu_init.c
+++ b/target/ppc/cpu_init.c
@@ -6254,8 +6254,8 @@ static void register_book3s_pmu_sup_sprs(CPUPPCState *env)
{
spr_register_kvm(env, SPR_POWER_MMCR0, "MMCR0",
SPR_NOACCESS, SPR_NOACCESS,
- &spr_read_generic, &spr_write_generic,
- KVM_REG_PPC_MMCR0, 0x00000000);
+ &spr_read_generic, &spr_write_MMCR0,
+ KVM_REG_PPC_MMCR0, 0x80000000);
spr_register_kvm(env, SPR_POWER_MMCR1, "MMCR1",
SPR_NOACCESS, SPR_NOACCESS,
&spr_read_generic, &spr_write_generic,
@@ -6303,7 +6303,7 @@ static void register_book3s_pmu_user_sprs(CPUPPCState *env)
spr_register(env, SPR_POWER_UMMCR0, "UMMCR0",
&spr_read_MMCR0_ureg, &spr_write_MMCR0_ureg,
&spr_read_ureg, &spr_write_ureg,
- 0x00000000);
+ 0x80000000);
spr_register(env, SPR_POWER_UMMCR1, "UMMCR1",
&spr_read_ureg, SPR_NOACCESS,
&spr_read_ureg, &spr_write_ureg,
diff --git a/target/ppc/power8-pmu.c b/target/ppc/power8-pmu.c
index d443bcb6c6ca..5e689144d712 100644
--- a/target/ppc/power8-pmu.c
+++ b/target/ppc/power8-pmu.c
@@ -23,6 +23,116 @@
#if defined(TARGET_PPC64) && !defined(CONFIG_USER_ONLY)
+static bool pmc_is_inactive(CPUPPCState *env, int sprn)
+{
+ if (env->spr[SPR_POWER_MMCR0] & MMCR0_FC) {
+ return true;
+ }
+
+ if (sprn < SPR_POWER_PMC5) {
+ return env->spr[SPR_POWER_MMCR0] & MMCR0_FC14;
+ }
+
+ return env->spr[SPR_POWER_MMCR0] & MMCR0_FC56;
+}
+
+/*
+ * For PMCs 1-4, IBM POWER chips has support for an implementation
+ * dependent event, 0x1E, that enables cycle counting. The Linux kernel
+ * makes extensive use of 0x1E, so let's also support it.
+ *
+ * Likewise, event 0x2 is an implementation-dependent event that IBM
+ * POWER chips implement (at least since POWER8) that is equivalent to
+ * PM_INST_CMPL. Let's support this event on PMCs 1-4 as well.
+ */
+static PMUEventType pmc_get_event(CPUPPCState *env, int sprn)
+{
+ uint8_t mmcr1_evt_extr[] = { MMCR1_PMC1EVT_EXTR, MMCR1_PMC2EVT_EXTR,
+ MMCR1_PMC3EVT_EXTR, MMCR1_PMC4EVT_EXTR };
+ PMUEventType evt_type = PMU_EVENT_INVALID;
+ uint8_t pmcsel;
+ int i;
+
+ if (pmc_is_inactive(env, sprn)) {
+ return PMU_EVENT_INACTIVE;
+ }
+
+ if (sprn == SPR_POWER_PMC5) {
+ return PMU_EVENT_INSTRUCTIONS;
+ }
+
+ if (sprn == SPR_POWER_PMC6) {
+ return PMU_EVENT_CYCLES;
+ }
+
+ i = sprn - SPR_POWER_PMC1;
+ pmcsel = extract64(env->spr[SPR_POWER_MMCR1], mmcr1_evt_extr[i],
+ MMCR1_EVT_SIZE);
+
+ switch (pmcsel) {
+ case 0x2:
+ evt_type = PMU_EVENT_INSTRUCTIONS;
+ break;
+ case 0x1E:
+ evt_type = PMU_EVENT_CYCLES;
+ break;
+ case 0xF0:
+ /*
+ * PMC1SEL = 0xF0 is the architected PowerISA v3.1
+ * event that counts cycles using PMC1.
+ */
+ if (sprn == SPR_POWER_PMC1) {
+ evt_type = PMU_EVENT_CYCLES;
+ }
+ break;
+ case 0xFE:
+ /*
+ * PMC1SEL = 0xFE is the architected PowerISA v3.1
+ * event to sample instructions using PMC1.
+ */
+ if (sprn == SPR_POWER_PMC1) {
+ evt_type = PMU_EVENT_INSTRUCTIONS;
+ }
+ break;
+ default:
+ break;
+ }
+
+ return evt_type;
+}
+
+static void pmu_update_cycles(CPUPPCState *env)
+{
+ uint64_t now = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
+ uint64_t time_delta = now - env->pmu_base_time;
+ int sprn;
+
+ for (sprn = SPR_POWER_PMC1; sprn <= SPR_POWER_PMC6; sprn++) {
+ if (pmc_get_event(env, sprn) != PMU_EVENT_CYCLES) {
+ continue;
+ }
+
+ /*
+ * The pseries and powernv clock runs at 1Ghz, meaning
+ * that 1 nanosec equals 1 cycle.
+ */
+ env->spr[sprn] += time_delta;
+ }
+
+ /* Update base_time for future calculations */
+ env->pmu_base_time = now;
+}
+
+void helper_store_mmcr0(CPUPPCState *env, target_ulong value)
+{
+ pmu_update_cycles(env);
+
+ env->spr[SPR_POWER_MMCR0] = value;
+
+ /* MMCR0 writes can change HFLAGS_PMCCCLEAR */
+ hreg_compute_hflags(env);
+}
+
static void fire_PMC_interrupt(PowerPCCPU *cpu)
{
CPUPPCState *env = &cpu->env;
diff --git a/target/ppc/power8-pmu-regs.c.inc b/target/ppc/power8-pmu-regs.c.inc
index 739185123827..fbb89776414e 100644
--- a/target/ppc/power8-pmu-regs.c.inc
+++ b/target/ppc/power8-pmu-regs.c.inc
@@ -104,6 +104,17 @@ void spr_read_MMCR0_ureg(DisasContext *ctx, int gprn, int sprn)
tcg_temp_free(t0);
}
+static void write_MMCR0_common(DisasContext *ctx, TCGv val)
+{
+ /*
+ * helper_store_mmcr0 will make clock based operations that
+ * will cause 'bad icount read' errors if we do not execute
+ * gen_icount_io_start() beforehand.
+ */
+ gen_icount_io_start(ctx);
+ gen_helper_store_mmcr0(cpu_env, val);
+}
+
void spr_write_MMCR0_ureg(DisasContext *ctx, int sprn, int gprn)
{
TCGv masked_gprn;
@@ -119,7 +130,7 @@ void spr_write_MMCR0_ureg(DisasContext *ctx, int sprn, int gprn)
*/
masked_gprn = masked_gprn_for_spr_write(gprn, SPR_POWER_MMCR0,
MMCR0_UREG_MASK);
- gen_store_spr(SPR_POWER_MMCR0, masked_gprn);
+ write_MMCR0_common(ctx, masked_gprn);
tcg_temp_free(masked_gprn);
}
@@ -219,6 +230,11 @@ void spr_write_PMC56_ureg(DisasContext *ctx, int sprn, int gprn)
/* The remaining steps are similar to PMCs 1-4 userspace write */
spr_write_PMC14_ureg(ctx, sprn, gprn);
}
+
+void spr_write_MMCR0(DisasContext *ctx, int sprn, int gprn)
+{
+ write_MMCR0_common(ctx, cpu_gpr[gprn]);
+}
#else
void spr_read_MMCR0_ureg(DisasContext *ctx, int gprn, int sprn)
{
@@ -259,4 +275,9 @@ void spr_write_PMC56_ureg(DisasContext *ctx, int sprn, int gprn)
{
spr_noaccess(ctx, gprn, sprn);
}
+
+void spr_write_MMCR0(DisasContext *ctx, int sprn, int gprn)
+{
+ spr_write_generic(ctx, sprn, gprn);
+}
#endif /* defined(TARGET_PPC64) && !defined(CONFIG_USER_ONLY) */
--
2.31.1
next prev parent reply other threads:[~2021-12-15 18:48 UTC|newest]
Thread overview: 111+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-15 16:57 [PULL 000/102] ppc queue Cédric Le Goater
2021-12-15 16:57 ` [PULL 001/102] pseries: Update SLOF firmware image Cédric Le Goater
2021-12-15 16:57 ` [PULL 002/102] hw/ppc/mac.h: Remove MAX_CPUS macro Cédric Le Goater
2021-12-15 16:57 ` [PULL 003/102] target/ppc: Fixed call to deferred exception Cédric Le Goater
2021-12-15 16:57 ` [PULL 004/102] test/tcg/ppc64le: test mtfsf Cédric Le Goater
2021-12-15 16:57 ` [PULL 005/102] target/ppc: ppc_store_fpscr doesn't update bits 0 to 28 and 52 Cédric Le Goater
2021-12-15 16:57 ` [PULL 006/102] target/ppc: Implement Vector Expand Mask Cédric Le Goater
2021-12-15 16:57 ` [PULL 007/102] target/ppc: Implement Vector Extract Mask Cédric Le Goater
2021-12-15 16:57 ` [PULL 008/102] target/ppc: Implement Vector Mask Move insns Cédric Le Goater
2021-12-15 16:57 ` [PULL 009/102] ivshmem.c: change endianness to LITTLE_ENDIAN Cédric Le Goater
2021-12-15 16:57 ` [PULL 010/102] ivshmem-test.c: enable test_ivshmem_server for ppc64 arch Cédric Le Goater
2021-12-15 16:57 ` [PULL 011/102] pci-host: Allow extended config space access for PowerNV PHB4 model Cédric Le Goater
2021-12-15 16:57 ` [PULL 012/102] docs: Minor updates on the powernv documentation Cédric Le Goater
2021-12-15 16:57 ` [PULL 013/102] ppc/pnv.c: add a friendly warning when accel=kvm is used Cédric Le Goater
2021-12-15 17:02 ` Cédric Le Goater
2021-12-15 17:02 ` [PULL 014/102] docs/system/ppc/powernv.rst: document KVM support status Cédric Le Goater
2021-12-15 17:02 ` [PULL 015/102] ppc/pnv.c: fix "system-id" FDT when -uuid is set Cédric Le Goater
2021-12-15 17:02 ` [PULL 016/102] docs: Introducing pseries documentation Cédric Le Goater
2021-12-15 17:02 ` [PULL 017/102] docs: rSTify ppc-spapr-hcalls.txt Cédric Le Goater
2021-12-15 17:02 ` [PULL 018/102] docs: Rename ppc-spapr-hcalls.txt to ppc-spapr-hcalls.rst Cédric Le Goater
2021-12-15 17:02 ` [PULL 019/102] Link new ppc-spapr-hcalls.rst file to pseries.rst Cédric Le Goater
2021-12-15 17:02 ` [PULL 020/102] softfloat: Extend float_exception_flags to 16 bits Cédric Le Goater
2021-12-15 17:02 ` [PULL 021/102] softfloat: Add flag specific to Inf - Inf Cédric Le Goater
2021-12-15 17:02 ` [PULL 022/102] softfloat: Add flag specific to Inf * 0 Cédric Le Goater
2021-12-15 17:02 ` [PULL 023/102] softfloat: Add flags specific to Inf / Inf and 0 / 0 Cédric Le Goater
2021-12-15 17:02 ` [PULL 024/102] softfloat: Add flag specific to sqrt(-x) Cédric Le Goater
2021-12-15 17:02 ` [PULL 025/102] softfloat: Add flag specific to convert non-nan to int Cédric Le Goater
2021-12-15 17:02 ` [PULL 026/102] softfloat: Add flag specific to signaling nans Cédric Le Goater
2021-12-15 17:02 ` [PULL 027/102] target/ppc: Update float_invalid_op_addsub for new flags Cédric Le Goater
2021-12-15 17:02 ` [PULL 028/102] target/ppc: Update float_invalid_op_mul " Cédric Le Goater
2021-12-15 17:02 ` [PULL 029/102] target/ppc: Update float_invalid_op_div " Cédric Le Goater
2021-12-15 17:02 ` [PULL 030/102] target/ppc: Move float_check_status from FPU_FCTI to translate Cédric Le Goater
2021-12-15 17:02 ` [PULL 031/102] target/ppc: Update float_invalid_cvt for new flags Cédric Le Goater
2021-12-15 17:02 ` [PULL 032/102] target/ppc: Fix VXCVI return value Cédric Le Goater
2021-12-15 17:02 ` [PULL 033/102] target/ppc: Remove inline from do_fri Cédric Le Goater
2021-12-15 17:02 ` [PULL 034/102] target/ppc: Use FloatRoundMode in do_fri Cédric Le Goater
2021-12-15 17:02 ` [PULL 035/102] target/ppc: Tidy inexact handling " Cédric Le Goater
2021-12-15 17:02 ` [PULL 036/102] target/ppc: Clean up do_fri Cédric Le Goater
2021-12-15 17:02 ` [PULL 037/102] target/ppc: Update fmadd for new flags Cédric Le Goater
2021-12-15 17:02 ` [PULL 038/102] target/ppc: Split out do_fmadd Cédric Le Goater
2021-12-15 17:02 ` [PULL 039/102] target/ppc: Do not call do_float_check_status from do_fmadd Cédric Le Goater
2021-12-15 17:02 ` [PULL 040/102] target/ppc: Split out do_frsp Cédric Le Goater
2021-12-15 17:02 ` [PULL 041/102] target/ppc: Update do_frsp for new flags Cédric Le Goater
2021-12-15 17:02 ` [PULL 042/102] target/ppc: Use helper_todouble in do_frsp Cédric Le Goater
2021-12-15 17:02 ` [PULL 043/102] target/ppc: Update sqrt for new flags Cédric Le Goater
2021-12-15 17:02 ` [PULL 044/102] target/ppc: Update xsrqpi and xsrqpxp to " Cédric Le Goater
2021-12-15 17:03 ` [PULL 045/102] target/ppc: Update fre " Cédric Le Goater
2021-12-15 17:03 ` [PULL 046/102] softfloat: Add float64r32 arithmetic routines Cédric Le Goater
2021-12-15 17:03 ` [PULL 047/102] target/ppc: Add helpers for fmadds et al Cédric Le Goater
2021-12-15 17:03 ` [PULL 048/102] target/ppc: Add helper for fsqrts Cédric Le Goater
2021-12-15 17:03 ` [PULL 049/102] target/ppc: Add helpers for fadds, fsubs, fdivs Cédric Le Goater
2021-12-15 17:03 ` [PULL 050/102] target/ppc: Add helper for fmuls Cédric Le Goater
2021-12-15 17:03 ` [PULL 051/102] target/ppc: Add helper for frsqrtes Cédric Le Goater
2021-12-15 17:03 ` [PULL 052/102] target/ppc: Update fres to new flags and float64r32 Cédric Le Goater
2021-12-15 17:03 ` [PULL 053/102] target/ppc: Use helper_todouble/tosingle in helper_xststdcsp Cédric Le Goater
2021-12-15 17:03 ` [PULL 054/102] target/ppc: Disable software TLB for the 7450 family Cédric Le Goater
2021-12-15 17:03 ` [PULL 055/102] target/ppc: Disable unused facilities in the e600 CPU Cédric Le Goater
2021-12-15 17:03 ` [PULL 056/102] target/ppc: Remove the software TLB model of 7450 CPUs Cédric Le Goater
2021-12-15 17:03 ` [PULL 057/102] target/ppc: Fix MPCxxx FPU interrupt address Cédric Le Goater
2021-12-15 17:03 ` [PULL 058/102] target/ppc: Remove 603e exception model Cédric Le Goater
2021-12-15 17:03 ` [PULL 059/102] target/ppc: Set 601v exception model id Cédric Le Goater
2021-12-15 17:03 ` [PULL 060/102] target/ppc: remove 401/403 CPUs Cédric Le Goater
2021-12-15 17:03 ` [PULL 061/102] ppc/ppc405: Change kernel load address Cédric Le Goater
2021-12-15 17:03 ` [PULL 062/102] ppc: Mark the 'taihu' machine as deprecated Cédric Le Goater
2021-12-15 17:03 ` [PULL 063/102] ppc: Add trace-events for DCR accesses Cédric Le Goater
2021-12-15 17:03 ` [PULL 064/102] ppc/ppc405: Convert printfs to trace-events Cédric Le Goater
2021-12-15 17:03 ` [PULL 065/102] ppc/ppc405: Drop flag parameter in ppc405_set_bootinfo() Cédric Le Goater
2021-12-15 17:03 ` [PULL 066/102] ppc/ppc405: Change ppc405ep_init() return value Cédric Le Goater
2021-12-15 17:03 ` [PULL 067/102] ppc/ppc405: Add some address space definitions Cédric Le Goater
2021-12-15 17:03 ` [PULL 068/102] ppc/ppc405: Remove flash support Cédric Le Goater
2021-12-15 17:03 ` [PULL 069/102] ppc/ppc405: Rework FW load Cédric Le Goater
2021-12-15 17:03 ` [PULL 070/102] ppc/ppc405: Introduce ppc405_set_default_bootinfo() Cédric Le Goater
2021-12-15 17:03 ` [PULL 071/102] ppc/ppc405: Fix boot from kernel Cédric Le Goater
2021-12-15 17:03 ` [PULL 072/102] ppc/ppc405: Change default PLL values at reset Cédric Le Goater
2021-12-15 17:03 ` [PULL 073/102] ppc/ppc405: Fix bi_pci_enetaddr2 field in U-Boot board information Cédric Le Goater
2021-12-15 17:03 ` [PULL 074/102] ppc/ppc405: Add update of bi_procfreq field Cédric Le Goater
2021-12-15 17:03 ` [PULL 075/102] target/ppc: Fix xs{max, min}[cj]dp to use VSX registers Cédric Le Goater
2021-12-15 17:03 ` [PULL 076/102] target/ppc: Move xs{max,min}[cj]dp to decodetree Cédric Le Goater
2021-12-15 17:03 ` [PULL 077/102] target/ppc: fix xscvqpdp register access Cédric Le Goater
2021-12-15 17:03 ` [PULL 078/102] target/ppc: move xscvqpdp to decodetree Cédric Le Goater
2021-12-15 17:03 ` [PULL 079/102] target/ppc: Fix e6500 boot Cédric Le Goater
2021-12-15 17:03 ` [PULL 080/102] Revert "target/ppc: Move SPR_DSISR setting to powerpc_excp" Cédric Le Goater
2021-12-15 17:03 ` [PULL 081/102] target/ppc: do not silence SNaN in xscvspdpn Cédric Le Goater
2021-12-15 17:03 ` [PULL 082/102] target/ppc: introduce PMUEventType and PMU overflow timers Cédric Le Goater
2021-12-15 17:03 ` Cédric Le Goater [this message]
2021-12-15 17:03 ` [PULL 084/102] target/ppc: PMU: update counters on PMCs r/w Cédric Le Goater
2021-12-15 17:03 ` [PULL 085/102] target/ppc: PMU: update counters on MMCR1 write Cédric Le Goater
2021-12-15 17:03 ` [PULL 086/102] target/ppc: enable PMU counter overflow with cycle events Cédric Le Goater
2021-12-15 17:03 ` [PULL 087/102] target/ppc: enable PMU instruction count Cédric Le Goater
2021-12-15 17:03 ` [PULL 088/102] target/ppc/power8-pmu.c: add PM_RUN_INST_CMPL (0xFA) event Cédric Le Goater
2021-12-15 17:03 ` [PULL 089/102] PPC64/TCG: Implement 'rfebb' instruction Cédric Le Goater
2021-12-15 17:03 ` [PULL 090/102] ppc/pnv: Introduce a "chip" property under PHB3 Cédric Le Goater
2021-12-15 17:03 ` [PULL 091/102] ppc/pnv: Use the chip class to check the index of PHB3 devices Cédric Le Goater
2021-12-15 17:03 ` [PULL 092/102] ppc/pnv: Drop the "num-phbs" property Cédric Le Goater
2021-12-15 17:03 ` [PULL 093/102] ppc/pnv: Move mapping of the PHB3 CQ regions under pnv_pbcq_realize() Cédric Le Goater
2021-12-15 17:03 ` [PULL 094/102] ppc/pnv: Use QOM hierarchy to scan PHB3 devices Cédric Le Goater
2021-12-15 17:03 ` [PULL 095/102] ppc/pnv: Introduce a num_pecs class attribute for PHB4 PEC devices Cédric Le Goater
2021-12-15 17:03 ` [PULL 096/102] ppc/pnv: Introduce version and device_id class atributes for PHB4 devices Cédric Le Goater
2021-12-15 17:03 ` [PULL 097/102] ppc/pnv: Introduce a "chip" property under the PHB4 model Cédric Le Goater
2021-12-15 17:03 ` [PULL 098/102] ppc/pnv: Introduce a num_stack class attribute Cédric Le Goater
2021-12-15 17:03 ` [PULL 099/102] ppc/pnv: Compute the PHB index from the PHB4 PEC model Cédric Le Goater
2021-12-15 17:03 ` [PULL 100/102] ppc/pnv: Remove "system-memory" property from PHB4 PEC Cédric Le Goater
2021-12-15 17:03 ` [PULL 101/102] ppc/pnv: Move realize of PEC stacks under the PEC model Cédric Le Goater
2021-12-15 17:03 ` [PULL 102/102] ppc/pnv: Use QOM hierarchy to scan PEC PHB4 devices Cédric Le Goater
2021-12-16 3:53 ` [PULL 000/102] ppc queue Richard Henderson
2021-12-16 6:18 ` Cédric Le Goater
2021-12-16 7:02 ` Cédric Le Goater
2021-12-16 12:21 ` Richard Henderson
2021-12-16 17:51 ` Cédric Le Goater
2021-12-16 18:18 ` Richard Henderson
2021-12-16 19:18 ` Cédric Le Goater
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211215170357.321643-71-clg@kaod.org \
--to=clg@kaod.org \
--cc=danielhb413@gmail.com \
--cc=david@gibson.dropbear.id.au \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=richard.henderson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).