qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Cédric Le Goater" <clg@kaod.org>
To: qemu-ppc@nongnu.org, qemu-devel@nongnu.org
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Cédric Le Goater" <clg@kaod.org>,
	mario@locati.it, "Fabiano Rosas" <farosas@linux.ibm.com>
Subject: [PULL 079/102] target/ppc: Fix e6500 boot
Date: Wed, 15 Dec 2021 18:03:34 +0100	[thread overview]
Message-ID: <20211215170357.321643-67-clg@kaod.org> (raw)
In-Reply-To: <20211215170357.321643-1-clg@kaod.org>

From: Fabiano Rosas <farosas@linux.ibm.com>

When Altivec support was added to the e6500 kernel in 2012[1], the
QEMU code was not changed, so we don't register the VPU/VPUA
exceptions for the e6500:

  qemu: fatal: Raised an exception without defined vector 73

Note that the error message says 73, instead of 32, which is the IVOR
for VPU. This is because QEMU knows only knows about the VPU interrupt
for the 7400s. In theory, we should not be raising _that_ VPU
interrupt, but instead another one specific for the e6500.

We unfortunately cannot register e6500-specific VPU/VPUA interrupts
because the SPEU/EFPDI interrupts also use IVOR32/33. These are
present only in the e500v1/2 versions. From the user manual:

e500v1, e500v2: only SPEU/EFPDI/EFPRI
e500mc, e5500:  no SPEU/EFPDI/EFPRI/VPU/VPUA
e6500:          only VPU/VPUA

So I'm leaving IVOR32/33 as SPEU/EFPDI, but altering the dispatch code
to convert the VPU #73 to a #32 when we're in the e6500. Since the
handling for SPEU and VPU is the same this is the only change that's
needed. The EFPDI is not implemented and will cause an abort. I don't
think it worth it changing the error message to take VPUA into
consideration, so I'm not changing anything there.

This bug was discussed in the thread:
https://lists.gnu.org/archive/html/qemu-ppc/2021-06/msg00222.html

1- https://git.kernel.org/torvalds/c/cd66cc2ee52

Reported-by: <mario@locati.it>
Signed-off-by: Fabiano Rosas <farosas@linux.ibm.com>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Message-Id: <20211213133542.2608540-1-farosas@linux.ibm.com>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
---
 target/ppc/cpu_init.c    |  6 ++++++
 target/ppc/excp_helper.c | 12 +++++++++++-
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c
index 96034889dd02..c8e6868389cb 100644
--- a/target/ppc/cpu_init.c
+++ b/target/ppc/cpu_init.c
@@ -2065,8 +2065,14 @@ static void init_excp_e200(CPUPPCState *env, target_ulong ivpr_mask)
     env->excp_vectors[POWERPC_EXCP_DTLB]     = 0x00000000;
     env->excp_vectors[POWERPC_EXCP_ITLB]     = 0x00000000;
     env->excp_vectors[POWERPC_EXCP_DEBUG]    = 0x00000000;
+    /*
+     * These two are the same IVOR as POWERPC_EXCP_VPU and
+     * POWERPC_EXCP_VPUA. We deal with that when dispatching at
+     * powerpc_excp().
+     */
     env->excp_vectors[POWERPC_EXCP_SPEU]     = 0x00000000;
     env->excp_vectors[POWERPC_EXCP_EFPDI]    = 0x00000000;
+
     env->excp_vectors[POWERPC_EXCP_EFPRI]    = 0x00000000;
     env->ivor_mask = 0x0000FFF7UL;
     env->ivpr_mask = ivpr_mask;
diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c
index cbd88f74c9df..feb3fd42e26c 100644
--- a/target/ppc/excp_helper.c
+++ b/target/ppc/excp_helper.c
@@ -344,6 +344,16 @@ static inline void powerpc_excp(PowerPCCPU *cpu, int excp_model, int excp)
         excp = POWERPC_EXCP_PROGRAM;
     }
 
+#ifdef TARGET_PPC64
+    /*
+     * SPEU and VPU share the same IVOR but they exist in different
+     * processors. SPEU is e500v1/2 only and VPU is e6500 only.
+     */
+    if (excp_model == POWERPC_EXCP_BOOKE && excp == POWERPC_EXCP_VPU) {
+        excp = POWERPC_EXCP_SPEU;
+    }
+#endif
+
     switch (excp) {
     case POWERPC_EXCP_NONE:
         /* Should never happen */
@@ -569,7 +579,7 @@ static inline void powerpc_excp(PowerPCCPU *cpu, int excp_model, int excp)
             cpu_abort(cs, "Debug exception triggered on unsupported model\n");
         }
         break;
-    case POWERPC_EXCP_SPEU:      /* SPE/embedded floating-point unavailable  */
+    case POWERPC_EXCP_SPEU:   /* SPE/embedded floating-point unavailable/VPU  */
         env->spr[SPR_BOOKE_ESR] = ESR_SPV;
         break;
     case POWERPC_EXCP_EFPDI:     /* Embedded floating-point data interrupt   */
-- 
2.31.1



  parent reply	other threads:[~2021-12-15 18:30 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   ` Cédric Le Goater [this message]
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   ` [PULL 083/102] target/ppc: PMU basic cycle count for pseries TCG Cédric Le Goater
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-67-clg@kaod.org \
    --to=clg@kaod.org \
    --cc=farosas@linux.ibm.com \
    --cc=mario@locati.it \
    --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).