From 1c127fa8e2ff2b034ebf8e50faea2bbc5136afd2 Mon Sep 17 00:00:00 2001 From: Alexey Kardashevskiy Date: Mon, 10 Jan 2022 15:27:45 +1100 Subject: [PATCH 01/34] pseries: Update SLOF firmware image The only change is that SLOF is compiled with -mcpu=power5 to make it work on PPC970 too. Signed-off-by: Alexey Kardashevskiy --- pc-bios/README | 2 +- pc-bios/slof.bin | Bin 991920 -> 992384 bytes roms/SLOF | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pc-bios/README b/pc-bios/README index c51ae58824..ba6c15e769 100644 --- a/pc-bios/README +++ b/pc-bios/README @@ -14,7 +14,7 @@ - SLOF (Slimline Open Firmware) is a free IEEE 1275 Open Firmware implementation for certain IBM POWER hardware. The sources are at https://github.com/aik/SLOF, and the image currently in qemu is - built from git tag qemu-slof-20211112. + built from git tag qemu-slof-20220110. - VOF (Virtual Open Firmware) is a minimalistic firmware to work with -machine pseries,x-vof=on. When enabled, the firmware acts as a slim shim and diff --git a/pc-bios/slof.bin b/pc-bios/slof.bin index 046ca63709aacf7f05c9b95a37535ac2c0b52df3..cbbe23e9107575c64c3264badacfad8b0a7ca090 100644 GIT binary patch delta 267695 zcmeFa3v^UPwl`jNI*<+qXtaRCixU+MUj$10i(Mph1WziZm}Fj5=XN?T~Ix zCx8;gnP3JAMueb%;HVQuGBOGpd>}YF7ajG(kw*}ag!qV#kAwi{|J!xCL!!>yx&OPq zweI@X&03w)ryjd@?b>_Su3fvTYu-!`9!akp-#0P1sA$>nar4H`A2)aYg82)^ja$0# z?)y@!;`zX?mIQ9IOm#h7nZ z$4dRLXPs+_#Ws;T!!irc?8M8##Z6-b|_X$=*AW}p8*eKIq=#=h8`g@e_#>b<5R~6?O#939QXQV{?lFKkCN$X{=W(M@o zQd*O%_D@N+QMUd3#ba*PWxa&;B&b)eQ_#Mnb+LU_Yq5QPE8+2Bm1%0AX9yRxvlwZ4 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 ~k;8br+r}fCe9r!X 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 delta 267618 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 y$A8x&J1W!j|L5G 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

5sR_6e5!(A5f1`q^fbMat8lH~A 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

V#wuXNDFvdA+fx5 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 diff --git a/roms/SLOF b/roms/SLOF index a6906b024c..5b4c5acdcd 160000 --- a/roms/SLOF +++ b/roms/SLOF @@ -1 +1 @@ -Subproject commit a6906b024c6cca5a86496f51eb4bfee3a0c36148 +Subproject commit 5b4c5acdcd552a4e1796aeca6bb700f6cbb0282d From 23ab6d8813685c38fd1d87f573dded9fe37ee17f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Wed, 12 Jan 2022 11:28:26 +0100 Subject: [PATCH 02/34] target/ppc: Add popcntb instruction to POWER5+ processors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit popcntb instruction was added in ISA v2.02. Add support for POWER5+ processors since they implement ISA v2.03. PPC970 CPUs implement v2.01 and do not support popcntb. Signed-off-by: Cédric Le Goater Reviewed-by: Fabiano Rosas Message-Id: <20220105095142.3990430-2-clg@kaod.org> Signed-off-by: Cédric Le Goater --- target/ppc/cpu_init.c | 1 + 1 file changed, 1 insertion(+) diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c index cc93bff3fa..f15a52259c 100644 --- a/target/ppc/cpu_init.c +++ b/target/ppc/cpu_init.c @@ -6957,6 +6957,7 @@ POWERPC_FAMILY(POWER5P)(ObjectClass *oc, void *data) PPC_MEM_SYNC | PPC_MEM_EIEIO | PPC_MEM_TLBIE | PPC_MEM_TLBSYNC | PPC_64B | + PPC_POPCNTB | PPC_SEGMENT_64B | PPC_SLBI; pcc->insns_flags2 = PPC2_FP_CVT_S64; pcc->msr_mask = (1ull << MSR_SF) | From 2460e1d75ba60ee67fadabccd988705b7bb911cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Wed, 12 Jan 2022 11:28:26 +0100 Subject: [PATCH 03/34] spapr: Fix support of POWER5+ processors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POWER5+ (ISA v2.03) processors are supported by the pseries machine but they do not have Altivec instructions. Do not advertise support for it in the DT. To be noted that this test is in contradiction with the assert in cap_vsx_apply(). Signed-off-by: Cédric Le Goater Tested-by: Fabiano Rosas Message-Id: <20220105095142.3990430-3-clg@kaod.org> Signed-off-by: Cédric Le Goater --- hw/ppc/spapr.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 8373429325..72f5dce751 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -723,10 +723,12 @@ static void spapr_dt_cpu(CPUState *cs, void *fdt, int offset, * * Only CPUs for which we create core types in spapr_cpu_core.c * are possible, and all of those have VMX */ - if (spapr_get_cap(spapr, SPAPR_CAP_VSX) != 0) { - _FDT((fdt_setprop_cell(fdt, offset, "ibm,vmx", 2))); - } else { - _FDT((fdt_setprop_cell(fdt, offset, "ibm,vmx", 1))); + if (env->insns_flags & PPC_ALTIVEC) { + if (spapr_get_cap(spapr, SPAPR_CAP_VSX) != 0) { + _FDT((fdt_setprop_cell(fdt, offset, "ibm,vmx", 2))); + } else { + _FDT((fdt_setprop_cell(fdt, offset, "ibm,vmx", 1))); + } } /* Advertise DFP (Decimal Floating Point) if available From 91137619c6555a3c7cdd829f3b91b6da2bf67475 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Wed, 12 Jan 2022 11:28:26 +0100 Subject: [PATCH 04/34] target/ppc: Add extra float instructions to POWER5P processors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ISA v2.03 introduced Floating Round to Integer instructions : frin, friz, frip, and frim. Add them to POWER5+. The PPC_FLOAT_EXT flag also includes the fre (Floating Reciprocal Estimate) instruction which was introduced in ISA v2.0x. The architecture document says its optional and that might be the reason why it has been kept under the PPC_FLOAT_EXT flag. This means 970 CPUs can not use it under QEMU, which doesn't seem to be a problem. Signed-off-by: Cédric Le Goater --- target/ppc/cpu_init.c | 1 + 1 file changed, 1 insertion(+) diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c index f15a52259c..e30e86fe9d 100644 --- a/target/ppc/cpu_init.c +++ b/target/ppc/cpu_init.c @@ -6953,6 +6953,7 @@ POWERPC_FAMILY(POWER5P)(ObjectClass *oc, void *data) PPC_FLOAT | PPC_FLOAT_FSEL | PPC_FLOAT_FRES | PPC_FLOAT_FSQRT | PPC_FLOAT_FRSQRTE | PPC_FLOAT_STFIWX | + PPC_FLOAT_EXT | PPC_CACHE | PPC_CACHE_ICBI | PPC_CACHE_DCBZ | PPC_MEM_SYNC | PPC_MEM_EIEIO | PPC_MEM_TLBIE | PPC_MEM_TLBSYNC | From 808ead89a678789285d45ede951afa09413feda6 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Wed, 12 Jan 2022 11:28:26 +0100 Subject: [PATCH 05/34] docs/system/ppc: Merge the PEF information into the pseries page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Protected Execution Facility is only available with the pseries machine, so let's merge the old ASCII text into the new RST file now. Signed-off-by: Thomas Huth Reviewed-by: Daniel Henrique Barboza Message-Id: <20220105103232.405204-1-thuth@redhat.com> Signed-off-by: Cédric Le Goater --- docs/papr-pef.txt | 30 ------------------------------ docs/system/ppc/pseries.rst | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 30 deletions(-) delete mode 100644 docs/papr-pef.txt diff --git a/docs/papr-pef.txt b/docs/papr-pef.txt deleted file mode 100644 index 72550e9bf8..0000000000 --- a/docs/papr-pef.txt +++ /dev/null @@ -1,30 +0,0 @@ -POWER (PAPR) Protected Execution Facility (PEF) -=============================================== - -Protected Execution Facility (PEF), also known as Secure Guest support -is a feature found on IBM POWER9 and POWER10 processors. - -If a suitable firmware including an Ultravisor is installed, it adds -an extra memory protection mode to the CPU. The ultravisor manages a -pool of secure memory which cannot be accessed by the hypervisor. - -When this feature is enabled in QEMU, a guest can use ultracalls to -enter "secure mode". This transfers most of its memory to secure -memory, where it cannot be eavesdropped by a compromised hypervisor. - -Launching ---------- - -To launch a guest which will be permitted to enter PEF secure mode: - -# ${QEMU} \ - -object pef-guest,id=pef0 \ - -machine confidential-guest-support=pef0 \ - ... - -Live Migration ----------------- - -Live migration is not yet implemented for PEF guests. For -consistency, we currently prevent migration if the PEF feature is -enabled, whether or not the guest has actually entered secure mode. diff --git a/docs/system/ppc/pseries.rst b/docs/system/ppc/pseries.rst index 72e315eff6..16394fa521 100644 --- a/docs/system/ppc/pseries.rst +++ b/docs/system/ppc/pseries.rst @@ -230,6 +230,39 @@ nested. Combinations not shown in the table are not available. .. [3] Introduced on Power10 machines. + +POWER (PAPR) Protected Execution Facility (PEF) +----------------------------------------------- + +Protected Execution Facility (PEF), also known as Secure Guest support +is a feature found on IBM POWER9 and POWER10 processors. + +If a suitable firmware including an Ultravisor is installed, it adds +an extra memory protection mode to the CPU. The ultravisor manages a +pool of secure memory which cannot be accessed by the hypervisor. + +When this feature is enabled in QEMU, a guest can use ultracalls to +enter "secure mode". This transfers most of its memory to secure +memory, where it cannot be eavesdropped by a compromised hypervisor. + +Launching +^^^^^^^^^ + +To launch a guest which will be permitted to enter PEF secure mode:: + + $ qemu-system-ppc64 \ + -object pef-guest,id=pef0 \ + -machine confidential-guest-support=pef0 \ + ... + +Live Migration +^^^^^^^^^^^^^^ + +Live migration is not yet implemented for PEF guests. For +consistency, QEMU currently prevents migration if the PEF feature is +enabled, whether or not the guest has actually entered secure mode. + + Maintainer contact information ------------------------------ From c52887687e057f21b4b748759c2107aa7e3981b6 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Wed, 12 Jan 2022 11:28:26 +0100 Subject: [PATCH 06/34] MAINTAINERS: Improve the PowerPC machines section MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add some documentation files to the corresponding machine sections and mention the machine names in the section titles where it is not so obvious (e.g. that "taihu" is a 405 machine). Signed-off-by: Thomas Huth Reviewed-by: Daniel Henrique Barboza Reviewed-by: Mark Cave-Ayland Message-Id: <20220105104800.407570-1-thuth@redhat.com> Signed-off-by: Cédric Le Goater --- MAINTAINERS | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index c98a61caee..6ccdec7f02 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1245,7 +1245,7 @@ F: hw/openrisc/openrisc_sim.c PowerPC Machines ---------------- -405 +405 (ref405ep and taihu) L: qemu-ppc@nongnu.org S: Orphan F: hw/ppc/ppc405_boards.c @@ -1281,6 +1281,7 @@ New World (mac99) M: Mark Cave-Ayland L: qemu-ppc@nongnu.org S: Odd Fixes +F: docs/system/ppc/powermac.rst F: hw/ppc/mac_newworld.c F: hw/pci-host/uninorth.c F: hw/pci-bridge/dec.[hc] @@ -1299,6 +1300,7 @@ Old World (g3beige) M: Mark Cave-Ayland L: qemu-ppc@nongnu.org S: Odd Fixes +F: docs/system/ppc/powermac.rst F: hw/ppc/mac_oldworld.c F: hw/pci-host/grackle.c F: hw/misc/macio/ @@ -1312,6 +1314,7 @@ PReP M: Hervé Poussineau L: qemu-ppc@nongnu.org S: Maintained +F: docs/system/ppc/prep.rst F: hw/ppc/prep.c F: hw/ppc/prep_systemio.c F: hw/ppc/rs6000_mc.c @@ -1324,7 +1327,7 @@ F: include/hw/isa/pc87312.h F: include/hw/rtc/m48t59.h F: tests/avocado/ppc_prep_40p.py -sPAPR +sPAPR (pseries) M: Cédric Le Goater M: Daniel Henrique Barboza R: David Gibson @@ -1336,8 +1339,8 @@ F: include/hw/*/spapr* F: hw/*/xics* F: include/hw/*/xics* F: pc-bios/slof.bin -F: docs/specs/ppc-spapr-hcalls.txt -F: docs/specs/ppc-spapr-hotplug.txt +F: docs/system/ppc/pseries.rst +F: docs/specs/ppc-spapr-* F: tests/qtest/spapr* F: tests/qtest/libqos/*spapr* F: tests/qtest/rtas* @@ -1348,6 +1351,7 @@ PowerNV (Non-Virtualized) M: Cédric Le Goater L: qemu-ppc@nongnu.org S: Maintained +F: docs/system/ppc/powernv.rst F: hw/ppc/pnv* F: hw/intc/pnv* F: hw/intc/xics_pnv.c From a23a72dd1ec2695cb24dde695666d726d40823ca Mon Sep 17 00:00:00 2001 From: Leonardo Garcia Date: Wed, 12 Jan 2022 11:28:26 +0100 Subject: [PATCH 07/34] docs: Clarifications and formatting changes in ppc docs. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Leonardo Garcia Reviewed-by: Cédric Le Goater Message-Id: <3b228af4785241c7fb4a2c70f0c495d2a9adea83.1641405872.git.lagarcia@br.ibm.com> Signed-off-by: Cédric Le Goater --- docs/specs/ppc-spapr-hcalls.rst | 21 ++++++++--------- docs/system/ppc/pseries.rst | 42 ++++++++++++++++----------------- 2 files changed, 31 insertions(+), 32 deletions(-) diff --git a/docs/specs/ppc-spapr-hcalls.rst b/docs/specs/ppc-spapr-hcalls.rst index 28daf9734a..6cdcef2026 100644 --- a/docs/specs/ppc-spapr-hcalls.rst +++ b/docs/specs/ppc-spapr-hcalls.rst @@ -1,13 +1,12 @@ +====================== sPAPR hypervisor calls ----------------------- +====================== When used with the ``pseries`` machine type, ``qemu-system-ppc64`` implements -a set of hypervisor calls (a.k.a. hcalls) defined in the `Linux on Power -Architecture Reference document (LoPAR) -`_. -This document is a subset of the Power Architecture Platform Reference (PAPR+) -specification (IBM internal only), which is what PowerVM, the IBM proprietary -hypervisor, adheres to. +a set of hypervisor calls (a.k.a. hcalls) defined in the Linux on Power +Architecture Reference ([LoPAR]_) document. This document is a subset of the +Power Architecture Platform Reference (PAPR+) specification (IBM internal only), +which is what PowerVM, the IBM proprietary hypervisor, adheres to. The subset in LoPAR is selected based on the requirements of Linux as a guest. @@ -18,8 +17,8 @@ running in the guest and QEMU. All those hypercalls start at hcall number 0xf000 which correspond to an implementation specific range in PAPR. -H_RTAS (0xf000) -^^^^^^^^^^^^^^^ +``H_RTAS (0xf000)`` +=================== RTAS stands for Run-Time Abstraction Sercies and is a set of runtime services generally provided by the firmware inside the guest to the operating system. It @@ -44,8 +43,8 @@ Returns: ``H_PARAMETER``: Unknown token. -H_LOGICAL_MEMOP (0xf001) -^^^^^^^^^^^^^^^^^^^^^^^^ +``H_LOGICAL_MEMOP (0xf001)`` +============================ When the guest runs in "real mode" (in powerpc terminology this means with MMU disabled, i.e. guest effective address equals to guest physical address), it diff --git a/docs/system/ppc/pseries.rst b/docs/system/ppc/pseries.rst index 16394fa521..1689324815 100644 --- a/docs/system/ppc/pseries.rst +++ b/docs/system/ppc/pseries.rst @@ -1,19 +1,18 @@ +=================================== pSeries family boards (``pseries``) =================================== -The Power machine para-virtualized environment described by the `Linux on Power -Architecture Reference document (LoPAR) -`_ -is called pSeries. This environment is also known as sPAPR, System p guests, or -simply Power Linux guests (although it is capable of running other operating -systems, such as AIX). +The Power machine para-virtualized environment described by the Linux on Power +Architecture Reference ([LoPAR]_) document is called pSeries. This environment +is also known as sPAPR, System p guests, or simply Power Linux guests (although +it is capable of running other operating systems, such as AIX). Even though pSeries is designed to behave as a guest environment, it is also capable of acting as a hypervisor OS, providing, on that role, nested virtualization capabilities. Supported devices ------------------ +================= * Multi processor support for many Power processors generations: POWER7, POWER7+, POWER8, POWER8NVL, POWER9, and Power10. Support for POWER5+ exists, @@ -26,12 +25,12 @@ Supported devices * PCIe device pass through. Missing devices ---------------- +=============== * SPICE support. Firmware --------- +======== `SLOF `_ (Slimline Open Firmware) is an implementation of the `IEEE 1275-1994, Standard for Boot (Initialization @@ -42,14 +41,14 @@ QEMU includes a prebuilt image of SLOF which is updated when a more recent version is required. Build directions ----------------- +================ .. code-block:: bash ./configure --target-list=ppc64-softmmu && make Running instructions --------------------- +==================== Someone can select the pSeries machine type by running QEMU with the following options: @@ -59,7 +58,7 @@ options: qemu-system-ppc64 -M pseries sPAPR devices -------------- +============= The sPAPR specification defines a set of para-virtualized devices, which are also supported by the pSeries machine in QEMU and can be instantiated with the @@ -102,11 +101,9 @@ device, or specify one with an ID NVRAM device with ``-global spapr-nvram.drive=pfid``. sPAPR specification -^^^^^^^^^^^^^^^^^^^ +------------------- -The main source of documentation on the sPAPR standard is the `Linux on Power -Architecture Reference document (LoPAR) -`_. +The main source of documentation on the sPAPR standard is the [LoPAR]_ document. However, documentation specific to QEMU's implementation of the specification can also be found in QEMU documentation: @@ -124,7 +121,7 @@ Other documentation available in QEMU docs directory: (``/docs/specs/ppc-spapr-uv-hcalls.txt``). Switching between the KVM-PR and KVM-HV kernel module ------------------------------------------------------ +===================================================== Currently, there are two implementations of KVM on Power, ``kvm_hv.ko`` and ``kvm_pr.ko``. @@ -139,7 +136,7 @@ possible to switch between the two modes with the ``kvm-type`` parameter: instead. KVM-PR -^^^^^^ +------ KVM-PR uses the so-called **PR**\ oblem state of the PPC CPUs to run the guests, i.e. the virtual machine is run in user mode and all privileged instructions @@ -166,7 +163,7 @@ In order to run KVM-PR guests with POWER9 processors, someone will need to start QEMU with ``kernel_irqchip=off`` command line option. KVM-HV -^^^^^^ +------ KVM-HV uses the hypervisor mode of more recent Power processors, that allow access to the bare metal hardware directly. Although POWER7 had this capability, @@ -188,7 +185,7 @@ CPUs generations, e.g. you can run a POWER7 guest on a POWER8 host by using ``-cpu POWER8,compat=power7`` as parameter to QEMU. Modules support ---------------- +=============== As noticed in the sections above, each module can run in a different environment. The following table shows with which environment each module can @@ -264,8 +261,11 @@ enabled, whether or not the guest has actually entered secure mode. Maintainer contact information ------------------------------- +============================== Cédric Le Goater Daniel Henrique Barboza + +.. [LoPAR] `Linux on Power Architecture Reference document (LoPAR) revision + 2.9 `_. From e4e27df72fba1cde2d1e030b1bedf26ca8cefe46 Mon Sep 17 00:00:00 2001 From: Fabiano Rosas Date: Wed, 12 Jan 2022 11:28:26 +0100 Subject: [PATCH 08/34] target/ppc: powerpc_excp: Extract software TLB logging into a function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabiano Rosas Reviewed-by: David Gibson Reviewed-by: Richard Henderson Message-Id: <20220107222601.4101511-2-farosas@linux.ibm.com> Signed-off-by: Cédric Le Goater --- target/ppc/excp_helper.c | 63 +++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c index a779dc936a..2c5d5470de 100644 --- a/target/ppc/excp_helper.c +++ b/target/ppc/excp_helper.c @@ -135,6 +135,41 @@ static void dump_hcall(CPUPPCState *env) env->nip); } +static void ppc_excp_debug_sw_tlb(CPUPPCState *env, int excp) +{ +#if defined(DEBUG_SOFTWARE_TLB) + const char *es; + target_ulong *miss, *cmp; + int en; + + if (!qemu_log_enabled()) { + return; + } + + if (excp == POWERPC_EXCP_IFTLB) { + es = "I"; + en = 'I'; + miss = &env->spr[SPR_IMISS]; + cmp = &env->spr[SPR_ICMP]; + } else { + if (excp == POWERPC_EXCP_DLTLB) { + es = "DL"; + } else { + es = "DS"; + } + en = 'D'; + miss = &env->spr[SPR_DMISS]; + cmp = &env->spr[SPR_DCMP]; + } + qemu_log("6xx %sTLB miss: %cM " TARGET_FMT_lx " %cC " + TARGET_FMT_lx " H1 " TARGET_FMT_lx " H2 " + TARGET_FMT_lx " %08x\n", es, en, *miss, en, *cmp, + env->spr[SPR_HASH1], env->spr[SPR_HASH2], + env->error_code); +#endif +} + + static int powerpc_reset_wakeup(CPUState *cs, CPUPPCState *env, int excp, target_ulong *msr) { @@ -777,34 +812,8 @@ static void powerpc_excp(PowerPCCPU *cpu, int excp) } /* fall through */ case POWERPC_EXCP_7x5: -#if defined(DEBUG_SOFTWARE_TLB) - if (qemu_log_enabled()) { - const char *es; - target_ulong *miss, *cmp; - int en; + ppc_excp_debug_sw_tlb(env, excp); - if (excp == POWERPC_EXCP_IFTLB) { - es = "I"; - en = 'I'; - miss = &env->spr[SPR_IMISS]; - cmp = &env->spr[SPR_ICMP]; - } else { - if (excp == POWERPC_EXCP_DLTLB) { - es = "DL"; - } else { - es = "DS"; - } - en = 'D'; - miss = &env->spr[SPR_DMISS]; - cmp = &env->spr[SPR_DCMP]; - } - qemu_log("6xx %sTLB miss: %cM " TARGET_FMT_lx " %cC " - TARGET_FMT_lx " H1 " TARGET_FMT_lx " H2 " - TARGET_FMT_lx " %08x\n", es, en, *miss, en, *cmp, - env->spr[SPR_HASH1], env->spr[SPR_HASH2], - env->error_code); - } -#endif msr |= env->crf[0] << 28; msr |= env->error_code; /* key, D/I, S/L bits */ /* Set way using a LRU mechanism */ From 2e089eced81e26bb6b8535776faf1bf265a0cdb4 Mon Sep 17 00:00:00 2001 From: Fabiano Rosas Date: Wed, 12 Jan 2022 11:28:26 +0100 Subject: [PATCH 09/34] target/ppc: powerpc_excp: Keep 60x/7x5 soft MMU logs active MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove the compile time definition and make the logging be controlled by the `-d mmu` option in the cmdline. Signed-off-by: Fabiano Rosas Reviewed-by: Cédric Le Goater Reviewed-by: David Gibson Message-Id: <20220107222601.4101511-3-farosas@linux.ibm.com> Signed-off-by: Cédric Le Goater --- target/ppc/excp_helper.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c index 2c5d5470de..a12ed14c30 100644 --- a/target/ppc/excp_helper.c +++ b/target/ppc/excp_helper.c @@ -30,8 +30,6 @@ #include "exec/cpu_ldst.h" #endif -/* #define DEBUG_SOFTWARE_TLB */ - /*****************************************************************************/ /* Exception processing */ #if !defined(CONFIG_USER_ONLY) @@ -137,12 +135,11 @@ static void dump_hcall(CPUPPCState *env) static void ppc_excp_debug_sw_tlb(CPUPPCState *env, int excp) { -#if defined(DEBUG_SOFTWARE_TLB) const char *es; target_ulong *miss, *cmp; int en; - if (!qemu_log_enabled()) { + if (!qemu_loglevel_mask(CPU_LOG_MMU)) { return; } @@ -166,7 +163,6 @@ static void ppc_excp_debug_sw_tlb(CPUPPCState *env, int excp) TARGET_FMT_lx " %08x\n", es, en, *miss, en, *cmp, env->spr[SPR_HASH1], env->spr[SPR_HASH2], env->error_code); -#endif } From 4dff75fe95e1aa101567d7052301f125a21323e4 Mon Sep 17 00:00:00 2001 From: Fabiano Rosas Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 10/34] target/ppc: powerpc_excp: Group unimplemented exceptions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabiano Rosas Reviewed-by: Cédric Le Goater Reviewed-by: David Gibson Reviewed-by: Richard Henderson Message-Id: <20220107222601.4101511-4-farosas@linux.ibm.com> Signed-off-by: Cédric Le Goater --- target/ppc/excp_helper.c | 77 +++++----------------------------------- 1 file changed, 8 insertions(+), 69 deletions(-) diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c index a12ed14c30..a52340ac0a 100644 --- a/target/ppc/excp_helper.c +++ b/target/ppc/excp_helper.c @@ -700,23 +700,6 @@ static void powerpc_excp(PowerPCCPU *cpu, int excp) 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 */ - /* XXX: TODO */ - cpu_abort(cs, "Embedded floating point data exception " - "is not implemented yet !\n"); - env->spr[SPR_BOOKE_ESR] = ESR_SPV; - break; - case POWERPC_EXCP_EFPRI: /* Embedded floating-point round interrupt */ - /* XXX: TODO */ - cpu_abort(cs, "Embedded floating point round exception " - "is not implemented yet !\n"); - env->spr[SPR_BOOKE_ESR] = ESR_SPV; - break; - case POWERPC_EXCP_EPERFM: /* Embedded performance monitor interrupt */ - /* XXX: TODO */ - cpu_abort(cs, - "Performance counter exception is not implemented yet !\n"); - break; case POWERPC_EXCP_DOORI: /* Embedded doorbell interrupt */ break; case POWERPC_EXCP_DOORCI: /* Embedded doorbell critical interrupt */ @@ -781,19 +764,6 @@ static void powerpc_excp(PowerPCCPU *cpu, int excp) case POWERPC_EXCP_PIT: /* Programmable interval timer interrupt */ trace_ppc_excp_print("PIT"); break; - case POWERPC_EXCP_IO: /* IO error exception */ - /* XXX: TODO */ - cpu_abort(cs, "601 IO error exception is not implemented yet !\n"); - break; - case POWERPC_EXCP_RUNM: /* Run mode exception */ - /* XXX: TODO */ - cpu_abort(cs, "601 run mode exception is not implemented yet !\n"); - break; - case POWERPC_EXCP_EMUL: /* Emulation trap exception */ - /* XXX: TODO */ - cpu_abort(cs, "602 emulation trap exception " - "is not implemented yet !\n"); - break; case POWERPC_EXCP_IFTLB: /* Instruction fetch TLB error */ case POWERPC_EXCP_DLTLB: /* Data load TLB miss */ case POWERPC_EXCP_DSTLB: /* Data store TLB miss */ @@ -820,56 +790,25 @@ static void powerpc_excp(PowerPCCPU *cpu, int excp) break; } break; + case POWERPC_EXCP_EFPDI: /* Embedded floating-point data interrupt */ + case POWERPC_EXCP_EFPRI: /* Embedded floating-point round interrupt */ + case POWERPC_EXCP_EPERFM: /* Embedded performance monitor interrupt */ + case POWERPC_EXCP_IO: /* IO error exception */ + case POWERPC_EXCP_RUNM: /* Run mode exception */ + case POWERPC_EXCP_EMUL: /* Emulation trap exception */ case POWERPC_EXCP_FPA: /* Floating-point assist exception */ - /* XXX: TODO */ - cpu_abort(cs, "Floating point assist exception " - "is not implemented yet !\n"); - break; case POWERPC_EXCP_DABR: /* Data address breakpoint */ - /* XXX: TODO */ - cpu_abort(cs, "DABR exception is not implemented yet !\n"); - break; case POWERPC_EXCP_IABR: /* Instruction address breakpoint */ - /* XXX: TODO */ - cpu_abort(cs, "IABR exception is not implemented yet !\n"); - break; case POWERPC_EXCP_SMI: /* System management interrupt */ - /* XXX: TODO */ - cpu_abort(cs, "SMI exception is not implemented yet !\n"); - break; case POWERPC_EXCP_THERM: /* Thermal interrupt */ - /* XXX: TODO */ - cpu_abort(cs, "Thermal management exception " - "is not implemented yet !\n"); - break; case POWERPC_EXCP_PERFM: /* Embedded performance monitor interrupt */ - /* XXX: TODO */ - cpu_abort(cs, - "Performance counter exception is not implemented yet !\n"); - break; case POWERPC_EXCP_VPUA: /* Vector assist exception */ - /* XXX: TODO */ - cpu_abort(cs, "VPU assist exception is not implemented yet !\n"); - break; case POWERPC_EXCP_SOFTP: /* Soft patch exception */ - /* XXX: TODO */ - cpu_abort(cs, - "970 soft-patch exception is not implemented yet !\n"); - break; case POWERPC_EXCP_MAINT: /* Maintenance exception */ - /* XXX: TODO */ - cpu_abort(cs, - "970 maintenance exception is not implemented yet !\n"); - break; case POWERPC_EXCP_MEXTBR: /* Maskable external breakpoint */ - /* XXX: TODO */ - cpu_abort(cs, "Maskable external exception " - "is not implemented yet !\n"); - break; case POWERPC_EXCP_NMEXTBR: /* Non maskable external breakpoint */ - /* XXX: TODO */ - cpu_abort(cs, "Non maskable external exception " - "is not implemented yet !\n"); + cpu_abort(cs, "%s exception not implemented\n", + powerpc_excp_name(excp)); break; default: excp_invalid: From 516fc1036b06a48042de1309c4e76abda255cf7b Mon Sep 17 00:00:00 2001 From: Fabiano Rosas Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 11/34] target/ppc: Add HV support to ppc_interrupts_little_endian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The ppc_interrupts_little_endian function could be used for interrupts delivered in Hypervisor mode, so add support for powernv8 and powernv9 to it. Also drop the comment because it is inaccurate, all CPUs that can run little endian can have interrupts in little endian. The point is whether they can take interrupts in an endianness different from MSR_LE. This change has no functional impact. Signed-off-by: Fabiano Rosas Reviewed-by: David Gibson Message-Id: <20220107222601.4101511-5-farosas@linux.ibm.com> Signed-off-by: Cédric Le Goater --- target/ppc/arch_dump.c | 2 +- target/ppc/cpu.h | 23 +++++++++++++++-------- target/ppc/excp_helper.c | 2 +- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/target/ppc/arch_dump.c b/target/ppc/arch_dump.c index bb392f6d88..12cde198a3 100644 --- a/target/ppc/arch_dump.c +++ b/target/ppc/arch_dump.c @@ -237,7 +237,7 @@ int cpu_get_dump_info(ArchDumpInfo *info, info->d_machine = PPC_ELF_MACHINE; info->d_class = ELFCLASS; - if (ppc_interrupts_little_endian(cpu)) { + if (ppc_interrupts_little_endian(cpu, false)) { info->d_endian = ELFDATA2LSB; } else { info->d_endian = ELFDATA2MSB; diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h index f20d4ffa6d..a6fc857ad4 100644 --- a/target/ppc/cpu.h +++ b/target/ppc/cpu.h @@ -2728,20 +2728,27 @@ static inline bool ppc_has_spr(PowerPCCPU *cpu, int spr) return cpu->env.spr_cb[spr].name != NULL; } -static inline bool ppc_interrupts_little_endian(PowerPCCPU *cpu) +#if !defined(CONFIG_USER_ONLY) +static inline bool ppc_interrupts_little_endian(PowerPCCPU *cpu, bool hv) { PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu); + CPUPPCState *env = &cpu->env; + bool ile = false; - /* - * Only models that have an LPCR and know about LPCR_ILE can do little - * endian. - */ - if (pcc->lpcr_mask & LPCR_ILE) { - return !!(cpu->env.spr[SPR_LPCR] & LPCR_ILE); + if (hv && env->has_hv_mode) { + if (is_isa300(pcc)) { + ile = !!(env->spr[SPR_HID0] & HID0_POWER9_HILE); + } else { + ile = !!(env->spr[SPR_HID0] & HID0_HILE); + } + + } else if (pcc->lpcr_mask & LPCR_ILE) { + ile = !!(env->spr[SPR_LPCR] & LPCR_ILE); } - return false; + return ile; } +#endif void dump_mmu(CPUPPCState *env); diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c index a52340ac0a..3a430f23d6 100644 --- a/target/ppc/excp_helper.c +++ b/target/ppc/excp_helper.c @@ -1070,7 +1070,7 @@ void ppc_cpu_do_fwnmi_machine_check(CPUState *cs, target_ulong vector) */ msr = (1ULL << MSR_ME); msr |= env->msr & (1ULL << MSR_SF); - if (ppc_interrupts_little_endian(cpu)) { + if (ppc_interrupts_little_endian(cpu, false)) { msr |= (1ULL << MSR_LE); } From 2e89484821883457cc76a576cf398a7efde4e052 Mon Sep 17 00:00:00 2001 From: Fabiano Rosas Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 12/34] target/ppc: Add MSR_ILE support to ppc_interrupts_little_endian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some CPUs set ILE via an MSR bit. We can make ppc_interrupts_little_endian handle that case as well. Now we have a centralized way of determining the endianness of interrupts. This change has no functional impact. Signed-off-by: Fabiano Rosas Reviewed-by: David Gibson Message-Id: <20220107222601.4101511-6-farosas@linux.ibm.com> Signed-off-by: Cédric Le Goater --- target/ppc/cpu.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h index a6fc857ad4..f99cd0ea92 100644 --- a/target/ppc/cpu.h +++ b/target/ppc/cpu.h @@ -2733,7 +2733,7 @@ static inline bool ppc_interrupts_little_endian(PowerPCCPU *cpu, bool hv) { PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu); CPUPPCState *env = &cpu->env; - bool ile = false; + bool ile; if (hv && env->has_hv_mode) { if (is_isa300(pcc)) { @@ -2744,6 +2744,8 @@ static inline bool ppc_interrupts_little_endian(PowerPCCPU *cpu, bool hv) } else if (pcc->lpcr_mask & LPCR_ILE) { ile = !!(env->spr[SPR_LPCR] & LPCR_ILE); + } else { + ile = !!(msr_ile); } return ile; From 19bd7f5747dc75120f7fdaad7a153aa90d468df0 Mon Sep 17 00:00:00 2001 From: Fabiano Rosas Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 13/34] target/ppc: Use ppc_interrupts_little_endian in powerpc_excp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The ppc_interrupts_little_endian function is now suitable for determining the endianness of interrupts for all CPUs. Signed-off-by: Fabiano Rosas Reviewed-by: David Gibson Message-Id: <20220107222601.4101511-7-farosas@linux.ibm.com> Signed-off-by: Cédric Le Goater --- target/ppc/excp_helper.c | 29 +---------------------------- 1 file changed, 1 insertion(+), 28 deletions(-) diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c index 3a430f23d6..3b4123bc65 100644 --- a/target/ppc/excp_helper.c +++ b/target/ppc/excp_helper.c @@ -832,36 +832,9 @@ static void powerpc_excp(PowerPCCPU *cpu, int excp) * Sort out endianness of interrupt, this differs depending on the * CPU, the HV mode, etc... */ -#ifdef TARGET_PPC64 - if (excp_model == POWERPC_EXCP_POWER7) { - if (!(new_msr & MSR_HVB) && (env->spr[SPR_LPCR] & LPCR_ILE)) { - new_msr |= (target_ulong)1 << MSR_LE; - } - } else if (excp_model == POWERPC_EXCP_POWER8) { - if (new_msr & MSR_HVB) { - if (env->spr[SPR_HID0] & HID0_HILE) { - new_msr |= (target_ulong)1 << MSR_LE; - } - } else if (env->spr[SPR_LPCR] & LPCR_ILE) { - new_msr |= (target_ulong)1 << MSR_LE; - } - } else if (excp_model == POWERPC_EXCP_POWER9 || - excp_model == POWERPC_EXCP_POWER10) { - if (new_msr & MSR_HVB) { - if (env->spr[SPR_HID0] & HID0_POWER9_HILE) { - new_msr |= (target_ulong)1 << MSR_LE; - } - } else if (env->spr[SPR_LPCR] & LPCR_ILE) { - new_msr |= (target_ulong)1 << MSR_LE; - } - } else if (msr_ile) { + if (ppc_interrupts_little_endian(cpu, !!(new_msr & MSR_HVB))) { new_msr |= (target_ulong)1 << MSR_LE; } -#else - if (msr_ile) { - new_msr |= (target_ulong)1 << MSR_LE; - } -#endif #if defined(TARGET_PPC64) if (excp_model == POWERPC_EXCP_BOOKE) { From dc88dd0a864b441453934a26a2c672f33c1d6ee7 Mon Sep 17 00:00:00 2001 From: Fabiano Rosas Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 14/34] target/ppc: Introduce a wrapper for powerpc_excp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Next patches will split powerpc_excp in multiple family specific handlers. This patch adds a wrapper to make the transition clearer. Signed-off-by: Fabiano Rosas Reviewed-by: David Gibson Message-Id: <20220107222601.4101511-8-farosas@linux.ibm.com> Signed-off-by: Cédric Le Goater --- target/ppc/excp_helper.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c index 3b4123bc65..bc646c67a0 100644 --- a/target/ppc/excp_helper.c +++ b/target/ppc/excp_helper.c @@ -396,7 +396,7 @@ static void powerpc_set_excp_state(PowerPCCPU *cpu, * Note that this function should be greatly optimized when called * with a constant excp, from ppc_hw_interrupt */ -static void powerpc_excp(PowerPCCPU *cpu, int excp) +static inline void powerpc_excp_legacy(PowerPCCPU *cpu, int excp) { CPUState *cs = CPU(cpu); CPUPPCState *env = &cpu->env; @@ -867,6 +867,16 @@ static void powerpc_excp(PowerPCCPU *cpu, int excp) powerpc_set_excp_state(cpu, vector, new_msr); } +static void powerpc_excp(PowerPCCPU *cpu, int excp) +{ + CPUPPCState *env = &cpu->env; + + switch (env->excp_model) { + default: + powerpc_excp_legacy(cpu, excp); + } +} + void ppc_cpu_do_interrupt(CPUState *cs) { PowerPCCPU *cpu = POWERPC_CPU(cs); From 5609400a422809c89ea788e4d0e13124a617582e Mon Sep 17 00:00:00 2001 From: Fabiano Rosas Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 15/34] target/ppc: Set the correct endianness for powernv memory dumps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We use the endianness of interrupts to determine which endianness to use for the guest kernel memory dump. For machines that support HILE (powernv8 and up) we have been always generating big endian dump files. This patch uses the HILE support recently added to ppc_interrupts_little_endian to fix the endianness of the dumps for powernv machines. Here are two dumps created at different moments: $ file skiboot.dump skiboot.dump: ELF 64-bit MSB core file, 64-bit PowerPC ... $ file kernel.dump kernel.dump: ELF 64-bit LSB core file, 64-bit PowerPC ... Suggested-by: David Gibson Signed-off-by: Fabiano Rosas Reviewed-by: David Gibson Message-Id: <20220107222601.4101511-9-farosas@linux.ibm.com> Signed-off-by: Cédric Le Goater --- target/ppc/arch_dump.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/ppc/arch_dump.c b/target/ppc/arch_dump.c index 12cde198a3..993740897d 100644 --- a/target/ppc/arch_dump.c +++ b/target/ppc/arch_dump.c @@ -237,7 +237,7 @@ int cpu_get_dump_info(ArchDumpInfo *info, info->d_machine = PPC_ELF_MACHINE; info->d_class = ELFCLASS; - if (ppc_interrupts_little_endian(cpu, false)) { + if (ppc_interrupts_little_endian(cpu, cpu->env.has_hv_mode)) { info->d_endian = ELFDATA2LSB; } else { info->d_endian = ELFDATA2MSB; From 392c278302b8e20a7c593708395a6649452d323b Mon Sep 17 00:00:00 2001 From: Daniel Henrique Barboza Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 16/34] pnv_phb3.c: add unique chassis and slot for pnv_phb3_root_port MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When creating a pnv_phb3_root_port using the command line, the first root port is created successfully, but the second fails with the following error: qemu-system-ppc64: -device pnv-phb3-root-port,bus=phb3-root.0,id=pcie.3: Can't add chassis slot, error -16 This error comes from the realize() function of its parent type, rp_realize() from TYPE_PCIE_ROOT_PORT. pcie_chassis_add_slot() fails with -EBUSY if there's an existing PCIESlot that has the same chassis/slot value, regardless of being in a different bus. One way to prevent this error is simply set chassis and slot values in the command line. However, since phb3 root buses only supports a single root port, we can just get an unique chassis/slot value by checking which root bus the pnv_phb3_root_port is going to be attached, get the equivalent phb3 device and use its chip-id and index values, which are guaranteed to be unique. Signed-off-by: Daniel Henrique Barboza Message-Id: <20220105212338.49899-2-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater --- hw/pci-host/pnv_phb3.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/hw/pci-host/pnv_phb3.c b/hw/pci-host/pnv_phb3.c index c78084cce7..3467bbb5d9 100644 --- a/hw/pci-host/pnv_phb3.c +++ b/hw/pci-host/pnv_phb3.c @@ -1142,8 +1142,24 @@ static const TypeInfo pnv_phb3_root_bus_info = { static void pnv_phb3_root_port_realize(DeviceState *dev, Error **errp) { PCIERootPortClass *rpc = PCIE_ROOT_PORT_GET_CLASS(dev); + PCIDevice *pci = PCI_DEVICE(dev); + PCIBus *bus = pci_get_bus(pci); + PnvPHB3 *phb = NULL; Error *local_err = NULL; + phb = (PnvPHB3 *) object_dynamic_cast(OBJECT(bus->qbus.parent), + TYPE_PNV_PHB3); + + if (!phb) { + error_setg(errp, +"pnv_phb3_root_port devices must be connected to pnv-phb3 buses"); + return; + } + + /* Set unique chassis/slot values for the root port */ + qdev_prop_set_uint8(&pci->qdev, "chassis", phb->chip_id); + qdev_prop_set_uint16(&pci->qdev, "slot", phb->phb_id); + rpc->parent_realize(dev, &local_err); if (local_err) { error_propagate(errp, local_err); From 5ff21d94e2ce0a89ca1a490a31929171cf28e92f Mon Sep 17 00:00:00 2001 From: Daniel Henrique Barboza Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 17/34] pnv_phb4.c: add unique chassis and slot for pnv_phb4_root_port MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A similar situation as described previously with pnv_phb3_root_port devices also happens with pnv_phb4_root_ports. The solution is the same: assign an unique chassis/slot combo for them. Signed-off-by: Daniel Henrique Barboza Message-Id: <20220105212338.49899-3-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater --- hw/pci-host/pnv_phb4.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/hw/pci-host/pnv_phb4.c b/hw/pci-host/pnv_phb4.c index 5ba26e250a..836b0c156c 100644 --- a/hw/pci-host/pnv_phb4.c +++ b/hw/pci-host/pnv_phb4.c @@ -1338,8 +1338,23 @@ static void pnv_phb4_root_port_reset(DeviceState *dev) static void pnv_phb4_root_port_realize(DeviceState *dev, Error **errp) { PCIERootPortClass *rpc = PCIE_ROOT_PORT_GET_CLASS(dev); + PCIDevice *pci = PCI_DEVICE(dev); + PCIBus *bus = pci_get_bus(pci); + PnvPHB4 *phb = NULL; Error *local_err = NULL; + phb = (PnvPHB4 *) object_dynamic_cast(OBJECT(bus->qbus.parent), + TYPE_PNV_PHB4); + + if (!phb) { + error_setg(errp, "%s must be connected to pnv-phb4 buses", dev->id); + return; + } + + /* Set unique chassis/slot values for the root port */ + qdev_prop_set_uint8(&pci->qdev, "chassis", phb->chip_id); + qdev_prop_set_uint16(&pci->qdev, "slot", phb->phb_id); + rpc->parent_realize(dev, &local_err); if (local_err) { error_propagate(errp, local_err); From a71cd51e2aae333dde272ff83661f9ef0fe62a30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 18/34] ppc/pnv: Attach PHB3 root port device when defaults are enabled MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This cleanups the PHB3 model a bit more since the root port is an independent device and it will ease our task when adding user created PHB3s. pnv_phb_attach_root_port() is made public in pnv.c so it can be reused with the pnv_phb4 root port later. Signed-off-by: Cédric Le Goater Signed-off-by: Daniel Henrique Barboza Message-Id: <20220105212338.49899-4-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater --- hw/pci-host/pnv_phb3.c | 15 ++++++--------- hw/ppc/pnv.c | 8 ++++++++ include/hw/pci-host/pnv_phb3.h | 2 -- include/hw/ppc/pnv.h | 1 + 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/hw/pci-host/pnv_phb3.c b/hw/pci-host/pnv_phb3.c index 3467bbb5d9..fdc8d0b437 100644 --- a/hw/pci-host/pnv_phb3.c +++ b/hw/pci-host/pnv_phb3.c @@ -19,6 +19,7 @@ #include "hw/irq.h" #include "hw/qdev-properties.h" #include "qom/object.h" +#include "sysemu/sysemu.h" #define phb3_error(phb, fmt, ...) \ qemu_log_mask(LOG_GUEST_ERROR, "phb3[%d:%d]: " fmt "\n", \ @@ -981,10 +982,6 @@ static void pnv_phb3_instance_init(Object *obj) /* Power Bus Common Queue */ object_initialize_child(obj, "pbcq", &phb->pbcq, TYPE_PNV_PBCQ); - /* Root Port */ - object_initialize_child(obj, "root", &phb->root, TYPE_PNV_PHB3_ROOT_PORT); - qdev_prop_set_int32(DEVICE(&phb->root), "addr", PCI_DEVFN(0, 0)); - qdev_prop_set_bit(DEVICE(&phb->root), "multifunction", false); } static void pnv_phb3_realize(DeviceState *dev, Error **errp) @@ -1053,10 +1050,10 @@ static void pnv_phb3_realize(DeviceState *dev, Error **errp) pci_setup_iommu(pci->bus, pnv_phb3_dma_iommu, phb); - /* Add a single Root port */ - qdev_prop_set_uint8(DEVICE(&phb->root), "chassis", phb->chip_id); - qdev_prop_set_uint16(DEVICE(&phb->root), "slot", phb->phb_id); - qdev_realize(DEVICE(&phb->root), BUS(pci->bus), &error_fatal); + if (defaults_enabled()) { + pnv_phb_attach_root_port(PCI_HOST_BRIDGE(phb), + TYPE_PNV_PHB3_ROOT_PORT); + } } void pnv_phb3_update_regions(PnvPHB3 *phb) @@ -1177,7 +1174,7 @@ static void pnv_phb3_root_port_class_init(ObjectClass *klass, void *data) device_class_set_parent_realize(dc, pnv_phb3_root_port_realize, &rpc->parent_realize); - dc->user_creatable = false; + dc->user_creatable = true; k->vendor_id = PCI_VENDOR_ID_IBM; k->device_id = 0x03dc; diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c index 9de8b83530..3a263f631a 100644 --- a/hw/ppc/pnv.c +++ b/hw/ppc/pnv.c @@ -1156,6 +1156,14 @@ static void pnv_chip_icp_realize(Pnv8Chip *chip8, Error **errp) } } +/* Attach a root port device */ +void pnv_phb_attach_root_port(PCIHostState *pci, const char *name) +{ + PCIDevice *root = pci_new(PCI_DEVFN(0, 0), name); + + pci_realize_and_unref(root, pci->bus, &error_fatal); +} + static void pnv_chip_power8_realize(DeviceState *dev, Error **errp) { PnvChipClass *pcc = PNV_CHIP_GET_CLASS(dev); diff --git a/include/hw/pci-host/pnv_phb3.h b/include/hw/pci-host/pnv_phb3.h index e9c13e6bd8..2e423c3890 100644 --- a/include/hw/pci-host/pnv_phb3.h +++ b/include/hw/pci-host/pnv_phb3.h @@ -155,8 +155,6 @@ struct PnvPHB3 { PnvPBCQState pbcq; - PnvPHB3RootPort root; - QLIST_HEAD(, PnvPhb3DMASpace) dma_spaces; PnvChip *chip; diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h index c781525277..c726288e5e 100644 --- a/include/hw/ppc/pnv.h +++ b/include/hw/ppc/pnv.h @@ -177,6 +177,7 @@ DECLARE_INSTANCE_CHECKER(PnvChip, PNV_CHIP_POWER10, TYPE_PNV_CHIP_POWER10) PowerPCCPU *pnv_chip_find_cpu(PnvChip *chip, uint32_t pir); +void pnv_phb_attach_root_port(PCIHostState *pci, const char *name); #define TYPE_PNV_MACHINE MACHINE_TYPE_NAME("powernv") typedef struct PnvMachineClass PnvMachineClass; From 1360fd832b0d41b00d15574a0e9ecd6d513dbeaa Mon Sep 17 00:00:00 2001 From: Daniel Henrique Barboza Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 19/34] pnv_phb4.c: make pnv-phb4-root-port user creatable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We want to create only the absolutely minimal amount of devices when running with -nodefaults. The root port is something that the machine can boot up without. But, to do that, we need to provide a way for the user to add them by hand. This patch makes pnv-phb4-root-port user creatable and then uses the pnv_phb_attach_root_port() helper to add a pnv_phb4_root_port only when running with default settings. Signed-off-by: Daniel Henrique Barboza Message-Id: <20220105212338.49899-5-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater --- hw/pci-host/pnv_phb4.c | 18 +++++++----------- include/hw/pci-host/pnv_phb4.h | 2 -- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/hw/pci-host/pnv_phb4.c b/hw/pci-host/pnv_phb4.c index 836b0c156c..14827f8464 100644 --- a/hw/pci-host/pnv_phb4.c +++ b/hw/pci-host/pnv_phb4.c @@ -22,6 +22,7 @@ #include "hw/irq.h" #include "hw/qdev-properties.h" #include "qom/object.h" +#include "sysemu/sysemu.h" #include "trace.h" #define phb_error(phb, fmt, ...) \ @@ -1159,12 +1160,6 @@ static void pnv_phb4_instance_init(Object *obj) /* XIVE interrupt source object */ object_initialize_child(obj, "source", &phb->xsrc, TYPE_XIVE_SOURCE); - - /* Root Port */ - object_initialize_child(obj, "root", &phb->root, TYPE_PNV_PHB4_ROOT_PORT); - - qdev_prop_set_int32(DEVICE(&phb->root), "addr", PCI_DEVFN(0, 0)); - qdev_prop_set_bit(DEVICE(&phb->root), "multifunction", false); } static void pnv_phb4_realize(DeviceState *dev, Error **errp) @@ -1208,10 +1203,11 @@ static void pnv_phb4_realize(DeviceState *dev, Error **errp) pci_setup_iommu(pci->bus, pnv_phb4_dma_iommu, phb); pci->bus->flags |= PCI_BUS_EXTENDED_CONFIG_SPACE; - /* Add a single Root port */ - qdev_prop_set_uint8(DEVICE(&phb->root), "chassis", phb->chip_id); - qdev_prop_set_uint16(DEVICE(&phb->root), "slot", phb->phb_id); - qdev_realize(DEVICE(&phb->root), BUS(pci->bus), &error_fatal); + /* Add a single Root port if running with defaults */ + if (defaults_enabled()) { + pnv_phb_attach_root_port(PCI_HOST_BRIDGE(phb), + TYPE_PNV_PHB4_ROOT_PORT); + } /* Setup XIVE Source */ if (phb->big_phb) { @@ -1369,7 +1365,7 @@ static void pnv_phb4_root_port_class_init(ObjectClass *klass, void *data) PCIERootPortClass *rpc = PCIE_ROOT_PORT_CLASS(klass); dc->desc = "IBM PHB4 PCIE Root Port"; - dc->user_creatable = false; + dc->user_creatable = true; device_class_set_parent_realize(dc, pnv_phb4_root_port_realize, &rpc->parent_realize); diff --git a/include/hw/pci-host/pnv_phb4.h b/include/hw/pci-host/pnv_phb4.h index 4a19338db3..ea63df9676 100644 --- a/include/hw/pci-host/pnv_phb4.h +++ b/include/hw/pci-host/pnv_phb4.h @@ -78,8 +78,6 @@ OBJECT_DECLARE_SIMPLE_TYPE(PnvPHB4, PNV_PHB4) struct PnvPHB4 { PCIExpressHost parent_obj; - PnvPHB4RootPort root; - uint32_t chip_id; uint32_t phb_id; From e022e5a73a13bf1a67bb044ebbe7376c11ff4d55 Mon Sep 17 00:00:00 2001 From: Daniel Henrique Barboza Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 20/34] pnv_phb4.c: check if root port exists in rc_config functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pnv_phb4_rc_config_read() and pnv_phb4_rc_config_write() are asserting the existence of the root port. The root port is now optional, and there will be cases where a pnv-phb4 device won't have a root port attached. Instead of asserting, check if the root port exists before read/writing into it. Signed-off-by: Daniel Henrique Barboza Message-Id: <20220105212338.49899-6-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater --- hw/pci-host/pnv_phb4.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/hw/pci-host/pnv_phb4.c b/hw/pci-host/pnv_phb4.c index 14827f8464..83dedc878a 100644 --- a/hw/pci-host/pnv_phb4.c +++ b/hw/pci-host/pnv_phb4.c @@ -152,7 +152,10 @@ static void pnv_phb4_rc_config_write(PnvPHB4 *phb, unsigned off, } pdev = pci_find_device(pci->bus, 0, 0); - assert(pdev); + if (!pdev) { + phb_error(phb, "rc_config_write device not found\n"); + return; + } pci_host_config_write_common(pdev, off, PHB_RC_CONFIG_SIZE, bswap32(val), 4); @@ -171,7 +174,10 @@ static uint64_t pnv_phb4_rc_config_read(PnvPHB4 *phb, unsigned off, } pdev = pci_find_device(pci->bus, 0, 0); - assert(pdev); + if (!pdev) { + phb_error(phb, "rc_config_read device not found\n"); + return ~0ull; + } val = pci_host_config_read_common(pdev, off, PHB_RC_CONFIG_SIZE, 4); return bswap32(val); From 1f6a88fffc7533a9fd64c74c298d82590277cb3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 21/34] ppc/pnv: Introduce support for user created PHB3 devices MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PHB3 devices and PCI devices can now be added to the powernv8 machine using : -device pnv-phb3,chip-id=0,index=1 \ -device nec-usb-xhci,bus=pci.1,addr=0x0 The 'index' property identifies the PHB3 in the chip. In case of user created devices, a lookup on 'chip-id' is required to assign the owning chip. Reviewed-by: Daniel Henrique Barboza Signed-off-by: Cédric Le Goater Message-Id: <20220105212338.49899-7-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater --- hw/pci-host/pnv_phb3.c | 11 ++++++++++- hw/ppc/pnv.c | 23 ++++++++++++++++++----- include/hw/ppc/pnv.h | 2 ++ 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/hw/pci-host/pnv_phb3.c b/hw/pci-host/pnv_phb3.c index fdc8d0b437..1ebe43df5d 100644 --- a/hw/pci-host/pnv_phb3.c +++ b/hw/pci-host/pnv_phb3.c @@ -991,6 +991,15 @@ static void pnv_phb3_realize(DeviceState *dev, Error **errp) PnvMachineState *pnv = PNV_MACHINE(qdev_get_machine()); int i; + /* User created devices */ + if (!phb->chip) { + phb->chip = pnv_get_chip(pnv, phb->chip_id); + if (!phb->chip) { + error_setg(errp, "invalid chip id: %d", phb->chip_id); + return; + } + } + if (phb->phb_id >= PNV_CHIP_GET_CLASS(phb->chip)->num_phbs) { error_setg(errp, "invalid PHB index: %d", phb->phb_id); return; @@ -1104,7 +1113,7 @@ static void pnv_phb3_class_init(ObjectClass *klass, void *data) dc->realize = pnv_phb3_realize; device_class_set_props(dc, pnv_phb3_properties); set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); - dc->user_creatable = false; + dc->user_creatable = true; } static const TypeInfo pnv_phb3_type_info = { diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c index 3a263f631a..ad02d56aa7 100644 --- a/hw/ppc/pnv.c +++ b/hw/ppc/pnv.c @@ -1117,14 +1117,14 @@ static void pnv_chip_power8_instance_init(Object *obj) object_initialize_child(obj, "homer", &chip8->homer, TYPE_PNV8_HOMER); - for (i = 0; i < pcc->num_phbs; i++) { + if (defaults_enabled()) { + chip->num_phbs = pcc->num_phbs; + } + + for (i = 0; i < chip->num_phbs; i++) { object_initialize_child(obj, "phb[*]", &chip8->phbs[i], TYPE_PNV_PHB3); } - /* - * Number of PHBs is the chip default - */ - chip->num_phbs = pcc->num_phbs; } static void pnv_chip_icp_realize(Pnv8Chip *chip8, Error **errp) @@ -1814,6 +1814,19 @@ static ICSState *pnv_ics_get(XICSFabric *xi, int irq) return NULL; } +PnvChip *pnv_get_chip(PnvMachineState *pnv, uint32_t chip_id) +{ + int i; + + for (i = 0; i < pnv->num_chips; i++) { + PnvChip *chip = pnv->chips[i]; + if (chip->chip_id == chip_id) { + return chip; + } + } + return NULL; +} + static int pnv_ics_resend_child(Object *child, void *opaque) { PnvPHB3 *phb3 = (PnvPHB3 *) object_dynamic_cast(child, TYPE_PNV_PHB3); diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h index c726288e5e..64bab7112b 100644 --- a/include/hw/ppc/pnv.h +++ b/include/hw/ppc/pnv.h @@ -218,6 +218,8 @@ struct PnvMachineState { hwaddr fw_load_addr; }; +PnvChip *pnv_get_chip(PnvMachineState *pnv, uint32_t chip_id); + #define PNV_FDT_ADDR 0x01000000 #define PNV_TIMEBASE_FREQ 512000000ULL From c29dd0034deafc9772eb256f7b4cea16c5bffd65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 22/34] ppc/pnv: Reparent user created PHB3 devices to the PnvChip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The powernv machine uses the object hierarchy to populate the device tree and each device should be parented to the chip it belongs to. This is not the case for user created devices which are parented to the container "/unattached". Make sure a PHB3 device is parented to its chip by reparenting the object if necessary. Reviewed-by: Daniel Henrique Barboza Reviewed-by: Frederic Barrat Signed-off-by: Cédric Le Goater Message-Id: <20220105212338.49899-8-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater --- hw/pci-host/pnv_phb3.c | 6 ++++++ hw/ppc/pnv.c | 17 +++++++++++++++++ include/hw/ppc/pnv.h | 1 + 3 files changed, 24 insertions(+) diff --git a/hw/pci-host/pnv_phb3.c b/hw/pci-host/pnv_phb3.c index 1ebe43df5d..a52aedcad3 100644 --- a/hw/pci-host/pnv_phb3.c +++ b/hw/pci-host/pnv_phb3.c @@ -998,6 +998,12 @@ static void pnv_phb3_realize(DeviceState *dev, Error **errp) error_setg(errp, "invalid chip id: %d", phb->chip_id); return; } + + /* + * Reparent user created devices to the chip to build + * correctly the device tree. + */ + pnv_chip_parent_fixup(phb->chip, OBJECT(phb), phb->phb_id); } if (phb->phb_id >= PNV_CHIP_GET_CLASS(phb->chip)->num_phbs) { diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c index ad02d56aa7..fa5e7bc751 100644 --- a/hw/ppc/pnv.c +++ b/hw/ppc/pnv.c @@ -1814,6 +1814,23 @@ static ICSState *pnv_ics_get(XICSFabric *xi, int irq) return NULL; } +void pnv_chip_parent_fixup(PnvChip *chip, Object *obj, int index) +{ + Object *parent = OBJECT(chip); + g_autofree char *default_id = + g_strdup_printf("%s[%d]", object_get_typename(obj), index); + + if (obj->parent == parent) { + return; + } + + object_ref(obj); + object_unparent(obj); + object_property_add_child( + parent, DEVICE(obj)->id ? DEVICE(obj)->id : default_id, obj); + object_unref(obj); +} + PnvChip *pnv_get_chip(PnvMachineState *pnv, uint32_t chip_id) { int i; diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h index 64bab7112b..f4219da7c5 100644 --- a/include/hw/ppc/pnv.h +++ b/include/hw/ppc/pnv.h @@ -178,6 +178,7 @@ DECLARE_INSTANCE_CHECKER(PnvChip, PNV_CHIP_POWER10, PowerPCCPU *pnv_chip_find_cpu(PnvChip *chip, uint32_t pir); void pnv_phb_attach_root_port(PCIHostState *pci, const char *name); +void pnv_chip_parent_fixup(PnvChip *chip, Object *obj, int index); #define TYPE_PNV_MACHINE MACHINE_TYPE_NAME("powernv") typedef struct PnvMachineClass PnvMachineClass; From db041b06e67f1010620c696011f8c867275dac42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 23/34] ppc/pnv: Complete user created PHB3 devices MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PHB3s ared SysBus devices and should be allowed to be dynamically created. Reviewed-by: Daniel Henrique Barboza Signed-off-by: Cédric Le Goater Message-Id: <20220105212338.49899-9-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater --- hw/pci-host/pnv_phb3.c | 9 +++++++++ hw/ppc/pnv.c | 2 ++ 2 files changed, 11 insertions(+) diff --git a/hw/pci-host/pnv_phb3.c b/hw/pci-host/pnv_phb3.c index a52aedcad3..7fb35dc031 100644 --- a/hw/pci-host/pnv_phb3.c +++ b/hw/pci-host/pnv_phb3.c @@ -993,6 +993,9 @@ static void pnv_phb3_realize(DeviceState *dev, Error **errp) /* User created devices */ if (!phb->chip) { + Error *local_err = NULL; + BusState *s; + phb->chip = pnv_get_chip(pnv, phb->chip_id); if (!phb->chip) { error_setg(errp, "invalid chip id: %d", phb->chip_id); @@ -1004,6 +1007,12 @@ static void pnv_phb3_realize(DeviceState *dev, Error **errp) * correctly the device tree. */ pnv_chip_parent_fixup(phb->chip, OBJECT(phb), phb->phb_id); + + s = qdev_get_parent_bus(DEVICE(phb->chip)); + if (!qdev_set_parent_bus(DEVICE(phb), s, &local_err)) { + error_propagate(errp, local_err); + return; + } } if (phb->phb_id >= PNV_CHIP_GET_CLASS(phb->chip)->num_phbs) { diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c index fa5e7bc751..8dc6382357 100644 --- a/hw/ppc/pnv.c +++ b/hw/ppc/pnv.c @@ -1941,6 +1941,8 @@ static void pnv_machine_power8_class_init(ObjectClass *oc, void *data) pmc->compat = compat; pmc->compat_size = sizeof(compat); + + machine_class_allow_dynamic_sysbus_dev(mc, TYPE_PNV_PHB3); } static void pnv_machine_power9_class_init(ObjectClass *oc, void *data) From eb93c82888f4d19c00ac1aafaec23346c2e899b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 24/34] ppc/pnv: Move num_phbs under Pnv8Chip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It is not used elsewhere so that's where it belongs. Signed-off-by: Cédric Le Goater Message-Id: <20220105212338.49899-10-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater --- hw/ppc/pnv.c | 7 +++---- include/hw/ppc/pnv.h | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c index 8dc6382357..fe7e67e73a 100644 --- a/hw/ppc/pnv.c +++ b/hw/ppc/pnv.c @@ -1099,7 +1099,6 @@ static void pnv_chip_power10_intc_print_info(PnvChip *chip, PowerPCCPU *cpu, static void pnv_chip_power8_instance_init(Object *obj) { - PnvChip *chip = PNV_CHIP(obj); Pnv8Chip *chip8 = PNV8_CHIP(obj); PnvChipClass *pcc = PNV_CHIP_GET_CLASS(obj); int i; @@ -1118,10 +1117,10 @@ static void pnv_chip_power8_instance_init(Object *obj) object_initialize_child(obj, "homer", &chip8->homer, TYPE_PNV8_HOMER); if (defaults_enabled()) { - chip->num_phbs = pcc->num_phbs; + chip8->num_phbs = pcc->num_phbs; } - for (i = 0; i < chip->num_phbs; i++) { + for (i = 0; i < chip8->num_phbs; i++) { object_initialize_child(obj, "phb[*]", &chip8->phbs[i], TYPE_PNV_PHB3); } @@ -1247,7 +1246,7 @@ static void pnv_chip_power8_realize(DeviceState *dev, Error **errp) &chip8->homer.regs); /* PHB3 controllers */ - for (i = 0; i < chip->num_phbs; i++) { + for (i = 0; i < chip8->num_phbs; i++) { PnvPHB3 *phb = &chip8->phbs[i]; object_property_set_int(OBJECT(phb), "index", i, &error_fatal); diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h index f4219da7c5..0e9e16544f 100644 --- a/include/hw/ppc/pnv.h +++ b/include/hw/ppc/pnv.h @@ -52,7 +52,6 @@ struct PnvChip { uint64_t cores_mask; PnvCore **cores; - uint32_t num_phbs; uint32_t num_pecs; MemoryRegion xscom_mmio; @@ -82,6 +81,7 @@ struct Pnv8Chip { #define PNV8_CHIP_PHB3_MAX 4 PnvPHB3 phbs[PNV8_CHIP_PHB3_MAX]; + uint32_t num_phbs; XICSFabric *xics; }; @@ -136,8 +136,8 @@ struct PnvChipClass { /*< public >*/ uint64_t chip_cfam_id; uint64_t cores_mask; - uint32_t num_phbs; uint32_t num_pecs; + uint32_t num_phbs; DeviceRealize parent_realize; From 41cb8d319df0488f31abd11519f21daf76ee1459 Mon Sep 17 00:00:00 2001 From: Daniel Henrique Barboza Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 25/34] pnv_phb3.h: change TYPE_PNV_PHB3_ROOT_BUS name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The TYPE_PNV_PHB3_ROOT_BUS name is used as the default bus name when the dev has no 'id'. However, pnv-phb3-root-bus is a bit too long to be used as a bus name. Most common QEMU buses and PCI controllers are named based on their bus type (e.g. pSeries spapr-pci-host-bridge is called 'pci'). The most common name for a PCIE bus controller in QEMU is 'pcie'. Naming it 'pcie' would break the documented use of the pnv-phb3 device, since 'pcie.0' would now refer to the root bus instead of the first root port. There's nothing particularly wrong with the 'root-bus' name used before, aside from the fact that 'root-bus' is being used for pnv-phb3 and pnv-phb4 created buses, which is not quite correct since these buses aren't implemented the same way in QEMU - you can't plug a pnv-phb4-root-port into a pnv-phb3 root bus, for example. This patch renames it as 'pnv-phb3-root', which is a compromise between the existing and the previously used name. Creating 3 phbs without ID will result in an "info qtree" output similar to this: bus: main-system-bus type System dev: pnv-phb3, id "" index = 2 (0x2) chip-id = 0 (0x0) x-config-reg-migration-enabled = true bypass-iommu = false bus: pnv-phb3-root.2 type pnv-phb3-root (...) dev: pnv-phb3, id "" index = 1 (0x1) chip-id = 0 (0x0) x-config-reg-migration-enabled = true bypass-iommu = false bus: pnv-phb3-root.1 type pnv-phb3-root (...) dev: pnv-phb3, id "" index = 0 (0x0) chip-id = 0 (0x0) x-config-reg-migration-enabled = true bypass-iommu = false bus: pnv-phb3-root.0 type pnv-phb3-root Signed-off-by: Daniel Henrique Barboza Message-Id: <20220105212338.49899-11-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater --- include/hw/pci-host/pnv_phb3.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/hw/pci-host/pnv_phb3.h b/include/hw/pci-host/pnv_phb3.h index 2e423c3890..af6ec83cf6 100644 --- a/include/hw/pci-host/pnv_phb3.h +++ b/include/hw/pci-host/pnv_phb3.h @@ -105,7 +105,7 @@ struct PnvPBCQState { /* * PHB3 PCIe Root port */ -#define TYPE_PNV_PHB3_ROOT_BUS "pnv-phb3-root-bus" +#define TYPE_PNV_PHB3_ROOT_BUS "pnv-phb3-root" #define TYPE_PNV_PHB3_ROOT_PORT "pnv-phb3-root-port" From 451575816c07284f7620b88e2208086588288925 Mon Sep 17 00:00:00 2001 From: Daniel Henrique Barboza Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 26/34] pnv_phb4.c: change TYPE_PNV_PHB4_ROOT_BUS name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Similar to what was happening with pnv-phb3 buses, TYPE_PNV_PHB4_ROOT_BUS set to "pnv-phb4-root-bus" is a bit too long for a default root bus name. The usual default name for theses buses in QEMU are 'pcie', but we want to make a distinction between pnv-phb4 buses and other PCIE buses, at least as far as default name goes, because not all PCIE devices are attachable to a pnv-phb4 root-bus type. Changing the default to 'pnv-phb4-root' allow us to have a shorter name while making this bus distinct, and the user can always set its own bus naming via the "id" attribute anyway. This is the 'info qtree' output after this change, using a powernv9 domain with 2 sockets and default settings enabled: qemu-system-ppc64 -m 4G -machine powernv9,accel=tcg \ -smp 2,sockets=2,cores=1,threads=1 dev: pnv-phb4, id "" index = 5 (0x5) chip-id = 1 (0x1) version = 704374636546 (0xa400000002) device-id = 1217 (0x4c1) x-config-reg-migration-enabled = true bypass-iommu = false bus: pnv-phb4-root.11 type pnv-phb4-root dev: pnv-phb4-root-port, id "" (...) dev: pnv-phb4, id "" index = 0 (0x0) chip-id = 1 (0x1) version = 704374636546 (0xa400000002) device-id = 1217 (0x4c1) x-config-reg-migration-enabled = true bypass-iommu = false bus: pnv-phb4-root.6 type pnv-phb4-root dev: pnv-phb4-root-port, id "" (..) dev: pnv-phb4, id "" index = 5 (0x5) chip-id = 0 (0x0) version = 704374636546 (0xa400000002) device-id = 1217 (0x4c1) x-config-reg-migration-enabled = true bypass-iommu = false bus: pnv-phb4-root.5 type pnv-phb4-root dev: pnv-phb4-root-port, id "" (...) dev: pnv-phb4, id "" index = 0 (0x0) chip-id = 0 (0x0) version = 704374636546 (0xa400000002) device-id = 1217 (0x4c1) x-config-reg-migration-enabled = true bypass-iommu = false bus: pnv-phb4-root.0 type pnv-phb4-root dev: pnv-phb4-root-port, id "" Reviewed-by: Cédric Le Goater Signed-off-by: Daniel Henrique Barboza Message-Id: <20220110143346.455901-11-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater --- include/hw/pci-host/pnv_phb4.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/hw/pci-host/pnv_phb4.h b/include/hw/pci-host/pnv_phb4.h index ea63df9676..88dc6abb1c 100644 --- a/include/hw/pci-host/pnv_phb4.h +++ b/include/hw/pci-host/pnv_phb4.h @@ -46,7 +46,7 @@ typedef struct PnvPhb4DMASpace { /* * PHB4 PCIe Root port */ -#define TYPE_PNV_PHB4_ROOT_BUS "pnv-phb4-root-bus" +#define TYPE_PNV_PHB4_ROOT_BUS "pnv-phb4-root" #define TYPE_PNV_PHB4_ROOT_PORT "pnv-phb4-root-port" typedef struct PnvPHB4RootPort { From 5032f5d70524af38259a27fb132a57cd3ca40619 Mon Sep 17 00:00:00 2001 From: Daniel Henrique Barboza Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 27/34] pnv_phb4_pec.c: move pnv_pec_phb_offset() to pnv_phb4.c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The logic inside pnv_pec_phb_offset() will be useful in the next patch to determine the stack that should contain a PHB4 device. Move the function to pnv_phb4.c and make it public since there's no pnv_phb4_pec.h header. While we're at it, add 'stack_index' as a parameter and make the function return 'phb-id' directly. And rename it to pnv_phb4_pec_get_phb_id() to be even clearer about the function intent. Reviewed-by: Cédric Le Goater Signed-off-by: Daniel Henrique Barboza Message-Id: <20220110143346.455901-3-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater --- hw/pci-host/pnv_phb4.c | 17 +++++++++++++++++ hw/pci-host/pnv_phb4_pec.c | 15 +-------------- include/hw/pci-host/pnv_phb4.h | 2 ++ 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/hw/pci-host/pnv_phb4.c b/hw/pci-host/pnv_phb4.c index 83dedc878a..2223b985b2 100644 --- a/hw/pci-host/pnv_phb4.c +++ b/hw/pci-host/pnv_phb4.c @@ -1069,6 +1069,23 @@ static const TypeInfo pnv_phb4_iommu_memory_region_info = { .class_init = pnv_phb4_iommu_memory_region_class_init, }; +/* + * Return the index/phb-id of a PHB4 that belongs to a + * pec->stacks[stack_index] stack. + */ +int pnv_phb4_pec_get_phb_id(PnvPhb4PecState *pec, int stack_index) +{ + PnvPhb4PecClass *pecc = PNV_PHB4_PEC_GET_CLASS(pec); + int index = pec->index; + int offset = 0; + + while (index--) { + offset += pecc->num_stacks[index]; + } + + return offset + stack_index; +} + /* * MSI/MSIX memory region implementation. * The handler handles both MSI and MSIX. diff --git a/hw/pci-host/pnv_phb4_pec.c b/hw/pci-host/pnv_phb4_pec.c index f3e4fa0c82..49360de8c8 100644 --- a/hw/pci-host/pnv_phb4_pec.c +++ b/hw/pci-host/pnv_phb4_pec.c @@ -374,19 +374,6 @@ static void pnv_pec_instance_init(Object *obj) } } -static int pnv_pec_phb_offset(PnvPhb4PecState *pec) -{ - PnvPhb4PecClass *pecc = PNV_PHB4_PEC_GET_CLASS(pec); - int index = pec->index; - int offset = 0; - - while (index--) { - offset += pecc->num_stacks[index]; - } - - return offset; -} - static void pnv_pec_realize(DeviceState *dev, Error **errp) { PnvPhb4PecState *pec = PNV_PHB4_PEC(dev); @@ -405,7 +392,7 @@ static void pnv_pec_realize(DeviceState *dev, Error **errp) for (i = 0; i < pec->num_stacks; i++) { PnvPhb4PecStack *stack = &pec->stacks[i]; Object *stk_obj = OBJECT(stack); - int phb_id = pnv_pec_phb_offset(pec) + i; + int phb_id = pnv_phb4_pec_get_phb_id(pec, i); object_property_set_int(stk_obj, "stack-no", i, &error_abort); object_property_set_int(stk_obj, "phb-id", phb_id, &error_abort); diff --git a/include/hw/pci-host/pnv_phb4.h b/include/hw/pci-host/pnv_phb4.h index 88dc6abb1c..5ee996ebc6 100644 --- a/include/hw/pci-host/pnv_phb4.h +++ b/include/hw/pci-host/pnv_phb4.h @@ -15,6 +15,7 @@ #include "hw/ppc/xive.h" #include "qom/object.h" +typedef struct PnvPhb4PecState PnvPhb4PecState; typedef struct PnvPhb4PecStack PnvPhb4PecStack; typedef struct PnvPHB4 PnvPHB4; typedef struct PnvChip PnvChip; @@ -131,6 +132,7 @@ struct PnvPHB4 { void pnv_phb4_pic_print_info(PnvPHB4 *phb, Monitor *mon); void pnv_phb4_update_regions(PnvPhb4PecStack *stack); +int pnv_phb4_pec_get_phb_id(PnvPhb4PecState *pec, int stack_index); extern const MemoryRegionOps pnv_phb4_xscom_ops; /* From d22b0c94e4c9c5bba1224b9fd6dcc23373af0261 Mon Sep 17 00:00:00 2001 From: Daniel Henrique Barboza Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 28/34] pnv_phb4_pec: use pnv_phb4_pec_get_phb_id() in pnv_pec_dt_xscom() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Relying on stack->phb to write the xscom DT of the PEC is something that we won't be able to do with user creatable pnv-phb4 devices. Hopefully, this can be done by using pnv_phb4_pec_get_phb_id(), which is already used by pnv_pec_realize() to set the phb-id of the stack. Use the same idea in pnv_pec_dt_xscom() to write ibm,phb-index without the need to accessing stack->phb, since stack->phb is not granted to be != NULL when user creatable phbs are introduced. Reviewed-by: Cédric Le Goater Signed-off-by: Daniel Henrique Barboza Message-Id: <20220110143346.455901-4-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater --- hw/pci-host/pnv_phb4_pec.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/hw/pci-host/pnv_phb4_pec.c b/hw/pci-host/pnv_phb4_pec.c index 49360de8c8..d64310e7db 100644 --- a/hw/pci-host/pnv_phb4_pec.c +++ b/hw/pci-host/pnv_phb4_pec.c @@ -449,8 +449,7 @@ static int pnv_pec_dt_xscom(PnvXScomInterface *dev, void *fdt, pecc->compat_size))); for (i = 0; i < pec->num_stacks; i++) { - PnvPhb4PecStack *stack = &pec->stacks[i]; - PnvPHB4 *phb = &stack->phb; + int phb_id = pnv_phb4_pec_get_phb_id(pec, i); int stk_offset; name = g_strdup_printf("stack@%x", i); @@ -460,7 +459,7 @@ static int pnv_pec_dt_xscom(PnvXScomInterface *dev, void *fdt, _FDT((fdt_setprop(fdt, stk_offset, "compatible", pecc->stk_compat, pecc->stk_compat_size))); _FDT((fdt_setprop_cell(fdt, stk_offset, "reg", i))); - _FDT((fdt_setprop_cell(fdt, stk_offset, "ibm,phb-index", phb->phb_id))); + _FDT((fdt_setprop_cell(fdt, stk_offset, "ibm,phb-index", phb_id))); } return 0; From b580713a962ecb4b5aa928975799b8c9e970c880 Mon Sep 17 00:00:00 2001 From: Daniel Henrique Barboza Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 29/34] ppc/pnv: set phb4 properties in stk_realize() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Moving all phb4 properties setup to stk_realize() keeps this logic in a single place instead of having it scattered between stk_realize() and pec_realize(). 'phb->index' can be retrieved using stack->stack_no and pnv_phb4_pec_get_phb_id(), deprecating the use of 'phb-id' alias that was being used for this purpose in pec_realize(). Reviewed-by: Cédric Le Goater Signed-off-by: Daniel Henrique Barboza Message-Id: <20220111131027.599784-2-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater --- hw/pci-host/pnv_phb4_pec.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hw/pci-host/pnv_phb4_pec.c b/hw/pci-host/pnv_phb4_pec.c index d64310e7db..f8038dff17 100644 --- a/hw/pci-host/pnv_phb4_pec.c +++ b/hw/pci-host/pnv_phb4_pec.c @@ -392,10 +392,8 @@ static void pnv_pec_realize(DeviceState *dev, Error **errp) for (i = 0; i < pec->num_stacks; i++) { PnvPhb4PecStack *stack = &pec->stacks[i]; Object *stk_obj = OBJECT(stack); - int phb_id = pnv_phb4_pec_get_phb_id(pec, i); object_property_set_int(stk_obj, "stack-no", i, &error_abort); - object_property_set_int(stk_obj, "phb-id", phb_id, &error_abort); object_property_set_link(stk_obj, "pec", OBJECT(pec), &error_abort); if (!qdev_realize(DEVICE(stk_obj), NULL, errp)) { return; @@ -534,7 +532,6 @@ static void pnv_pec_stk_instance_init(Object *obj) PnvPhb4PecStack *stack = PNV_PHB4_PEC_STACK(obj); object_initialize_child(obj, "phb", &stack->phb, TYPE_PNV_PHB4); - object_property_add_alias(obj, "phb-id", OBJECT(&stack->phb), "index"); } static void pnv_pec_stk_realize(DeviceState *dev, Error **errp) @@ -543,6 +540,7 @@ static void pnv_pec_stk_realize(DeviceState *dev, Error **errp) PnvPhb4PecState *pec = stack->pec; PnvPhb4PecClass *pecc = PNV_PHB4_PEC_GET_CLASS(pec); PnvChip *chip = pec->chip; + int phb_id = pnv_phb4_pec_get_phb_id(pec, stack->stack_no); uint32_t pec_nest_base; uint32_t pec_pci_base; char name[64]; @@ -570,6 +568,8 @@ static void pnv_pec_stk_realize(DeviceState *dev, Error **errp) object_property_set_int(OBJECT(&stack->phb), "chip-id", pec->chip_id, &error_fatal); + object_property_set_int(OBJECT(&stack->phb), "index", phb_id, + &error_fatal); object_property_set_int(OBJECT(&stack->phb), "version", pecc->version, &error_fatal); object_property_set_link(OBJECT(&stack->phb), "stack", OBJECT(stack), From 3d2adf1713b298206f831b78c00218a4e6e3ddad Mon Sep 17 00:00:00 2001 From: Daniel Henrique Barboza Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 30/34] ppc/pnv: move PHB4 XSCOM init to phb4_realize() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 'stack->phb_regs_mr' PHB4 passthrough XSCOM initialization relies on 'stack->phb' being not NULL. Moving 'stack->phb_regs_mr' region_init() and add_subregion() to phb4_realize() time is a natural thing to do since it's strictly PHB related. The remaining XSCOM initialization is also related to 'stack->phb' but in a different manner. For instance, 'stack->nest_regs_mr' MemoryRegionOps, 'pnv_pec_stk_nest_xscom_ops', uses pnv_pec_stk_nest_xscom_write() as a write callback. When trying to write the PEC_NEST_STK_BAR_EN reg, pnv_pec_stk_update_map() is called. Inside this function, pnv_phb4_update_regions() is called twice. This function uses 'stack->phb' to manipulate memory regions of the phb. This is not a problem now but, when enabling user creatable phb4s, a stack that doesn't have an associated phb (i.e. stack->phb = NULL) it will cause a SIGINT during boot in pnv_phb4_update_regions(). All this can be avoided if all XSCOM realize is moved to phb4_realize(), when we have certainty about the existence of 'stack->phb'. A lot of code was moved from pnv_phb4_pec.c to pnv_phb4.c due to static constant and variables being used but the cleaner logic is worth the trouble. Reviewed-by: Cédric Le Goater Signed-off-by: Daniel Henrique Barboza Message-Id: <20220111131027.599784-3-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater --- hw/pci-host/pnv_phb4.c | 304 +++++++++++++++++++++++++++++++++++++ hw/pci-host/pnv_phb4_pec.c | 292 ----------------------------------- 2 files changed, 304 insertions(+), 292 deletions(-) diff --git a/hw/pci-host/pnv_phb4.c b/hw/pci-host/pnv_phb4.c index 2223b985b2..8ef58bf2de 100644 --- a/hw/pci-host/pnv_phb4.c +++ b/hw/pci-host/pnv_phb4.c @@ -29,6 +29,10 @@ qemu_log_mask(LOG_GUEST_ERROR, "phb4[%d:%d]: " fmt "\n", \ (phb)->chip_id, (phb)->phb_id, ## __VA_ARGS__) +#define phb_pec_error(pec, fmt, ...) \ + qemu_log_mask(LOG_GUEST_ERROR, "phb4_pec[%d:%d]: " fmt "\n", \ + (pec)->chip_id, (pec)->index, ## __VA_ARGS__) + /* * QEMU version of the GETFIELD/SETFIELD macros * @@ -854,6 +858,258 @@ const MemoryRegionOps pnv_phb4_xscom_ops = { .endianness = DEVICE_BIG_ENDIAN, }; +static uint64_t pnv_pec_stk_nest_xscom_read(void *opaque, hwaddr addr, + unsigned size) +{ + PnvPhb4PecStack *stack = PNV_PHB4_PEC_STACK(opaque); + uint32_t reg = addr >> 3; + + /* TODO: add list of allowed registers and error out if not */ + return stack->nest_regs[reg]; +} + +static void pnv_pec_stk_update_map(PnvPhb4PecStack *stack) +{ + PnvPhb4PecState *pec = stack->pec; + MemoryRegion *sysmem = get_system_memory(); + uint64_t bar_en = stack->nest_regs[PEC_NEST_STK_BAR_EN]; + uint64_t bar, mask, size; + char name[64]; + + /* + * NOTE: This will really not work well if those are remapped + * after the PHB has created its sub regions. We could do better + * if we had a way to resize regions but we don't really care + * that much in practice as the stuff below really only happens + * once early during boot + */ + + /* Handle unmaps */ + if (memory_region_is_mapped(&stack->mmbar0) && + !(bar_en & PEC_NEST_STK_BAR_EN_MMIO0)) { + memory_region_del_subregion(sysmem, &stack->mmbar0); + } + if (memory_region_is_mapped(&stack->mmbar1) && + !(bar_en & PEC_NEST_STK_BAR_EN_MMIO1)) { + memory_region_del_subregion(sysmem, &stack->mmbar1); + } + if (memory_region_is_mapped(&stack->phbbar) && + !(bar_en & PEC_NEST_STK_BAR_EN_PHB)) { + memory_region_del_subregion(sysmem, &stack->phbbar); + } + if (memory_region_is_mapped(&stack->intbar) && + !(bar_en & PEC_NEST_STK_BAR_EN_INT)) { + memory_region_del_subregion(sysmem, &stack->intbar); + } + + /* Update PHB */ + pnv_phb4_update_regions(stack); + + /* Handle maps */ + if (!memory_region_is_mapped(&stack->mmbar0) && + (bar_en & PEC_NEST_STK_BAR_EN_MMIO0)) { + bar = stack->nest_regs[PEC_NEST_STK_MMIO_BAR0] >> 8; + mask = stack->nest_regs[PEC_NEST_STK_MMIO_BAR0_MASK]; + size = ((~mask) >> 8) + 1; + snprintf(name, sizeof(name), "pec-%d.%d-stack-%d-mmio0", + pec->chip_id, pec->index, stack->stack_no); + memory_region_init(&stack->mmbar0, OBJECT(stack), name, size); + memory_region_add_subregion(sysmem, bar, &stack->mmbar0); + stack->mmio0_base = bar; + stack->mmio0_size = size; + } + if (!memory_region_is_mapped(&stack->mmbar1) && + (bar_en & PEC_NEST_STK_BAR_EN_MMIO1)) { + bar = stack->nest_regs[PEC_NEST_STK_MMIO_BAR1] >> 8; + mask = stack->nest_regs[PEC_NEST_STK_MMIO_BAR1_MASK]; + size = ((~mask) >> 8) + 1; + snprintf(name, sizeof(name), "pec-%d.%d-stack-%d-mmio1", + pec->chip_id, pec->index, stack->stack_no); + memory_region_init(&stack->mmbar1, OBJECT(stack), name, size); + memory_region_add_subregion(sysmem, bar, &stack->mmbar1); + stack->mmio1_base = bar; + stack->mmio1_size = size; + } + if (!memory_region_is_mapped(&stack->phbbar) && + (bar_en & PEC_NEST_STK_BAR_EN_PHB)) { + bar = stack->nest_regs[PEC_NEST_STK_PHB_REGS_BAR] >> 8; + size = PNV_PHB4_NUM_REGS << 3; + snprintf(name, sizeof(name), "pec-%d.%d-stack-%d-phb", + pec->chip_id, pec->index, stack->stack_no); + memory_region_init(&stack->phbbar, OBJECT(stack), name, size); + memory_region_add_subregion(sysmem, bar, &stack->phbbar); + } + if (!memory_region_is_mapped(&stack->intbar) && + (bar_en & PEC_NEST_STK_BAR_EN_INT)) { + bar = stack->nest_regs[PEC_NEST_STK_INT_BAR] >> 8; + size = PNV_PHB4_MAX_INTs << 16; + snprintf(name, sizeof(name), "pec-%d.%d-stack-%d-int", + stack->pec->chip_id, stack->pec->index, stack->stack_no); + memory_region_init(&stack->intbar, OBJECT(stack), name, size); + memory_region_add_subregion(sysmem, bar, &stack->intbar); + } + + /* Update PHB */ + pnv_phb4_update_regions(stack); +} + +static void pnv_pec_stk_nest_xscom_write(void *opaque, hwaddr addr, + uint64_t val, unsigned size) +{ + PnvPhb4PecStack *stack = PNV_PHB4_PEC_STACK(opaque); + PnvPhb4PecState *pec = stack->pec; + uint32_t reg = addr >> 3; + + switch (reg) { + case PEC_NEST_STK_PCI_NEST_FIR: + stack->nest_regs[PEC_NEST_STK_PCI_NEST_FIR] = val; + break; + case PEC_NEST_STK_PCI_NEST_FIR_CLR: + stack->nest_regs[PEC_NEST_STK_PCI_NEST_FIR] &= val; + break; + case PEC_NEST_STK_PCI_NEST_FIR_SET: + stack->nest_regs[PEC_NEST_STK_PCI_NEST_FIR] |= val; + break; + case PEC_NEST_STK_PCI_NEST_FIR_MSK: + stack->nest_regs[PEC_NEST_STK_PCI_NEST_FIR_MSK] = val; + break; + case PEC_NEST_STK_PCI_NEST_FIR_MSKC: + stack->nest_regs[PEC_NEST_STK_PCI_NEST_FIR_MSK] &= val; + break; + case PEC_NEST_STK_PCI_NEST_FIR_MSKS: + stack->nest_regs[PEC_NEST_STK_PCI_NEST_FIR_MSK] |= val; + break; + case PEC_NEST_STK_PCI_NEST_FIR_ACT0: + case PEC_NEST_STK_PCI_NEST_FIR_ACT1: + stack->nest_regs[reg] = val; + break; + case PEC_NEST_STK_PCI_NEST_FIR_WOF: + stack->nest_regs[reg] = 0; + break; + case PEC_NEST_STK_ERR_REPORT_0: + case PEC_NEST_STK_ERR_REPORT_1: + case PEC_NEST_STK_PBCQ_GNRL_STATUS: + /* Flag error ? */ + break; + case PEC_NEST_STK_PBCQ_MODE: + stack->nest_regs[reg] = val & 0xff00000000000000ull; + break; + case PEC_NEST_STK_MMIO_BAR0: + case PEC_NEST_STK_MMIO_BAR0_MASK: + case PEC_NEST_STK_MMIO_BAR1: + case PEC_NEST_STK_MMIO_BAR1_MASK: + if (stack->nest_regs[PEC_NEST_STK_BAR_EN] & + (PEC_NEST_STK_BAR_EN_MMIO0 | + PEC_NEST_STK_BAR_EN_MMIO1)) { + phb_pec_error(pec, "Changing enabled BAR unsupported\n"); + } + stack->nest_regs[reg] = val & 0xffffffffff000000ull; + break; + case PEC_NEST_STK_PHB_REGS_BAR: + if (stack->nest_regs[PEC_NEST_STK_BAR_EN] & PEC_NEST_STK_BAR_EN_PHB) { + phb_pec_error(pec, "Changing enabled BAR unsupported\n"); + } + stack->nest_regs[reg] = val & 0xffffffffffc00000ull; + break; + case PEC_NEST_STK_INT_BAR: + if (stack->nest_regs[PEC_NEST_STK_BAR_EN] & PEC_NEST_STK_BAR_EN_INT) { + phb_pec_error(pec, "Changing enabled BAR unsupported\n"); + } + stack->nest_regs[reg] = val & 0xfffffff000000000ull; + break; + case PEC_NEST_STK_BAR_EN: + stack->nest_regs[reg] = val & 0xf000000000000000ull; + pnv_pec_stk_update_map(stack); + break; + case PEC_NEST_STK_DATA_FRZ_TYPE: + case PEC_NEST_STK_PBCQ_TUN_BAR: + /* Not used for now */ + stack->nest_regs[reg] = val; + break; + default: + qemu_log_mask(LOG_UNIMP, "phb4_pec: nest_xscom_write 0x%"HWADDR_PRIx + "=%"PRIx64"\n", addr, val); + } +} + +static const MemoryRegionOps pnv_pec_stk_nest_xscom_ops = { + .read = pnv_pec_stk_nest_xscom_read, + .write = pnv_pec_stk_nest_xscom_write, + .valid.min_access_size = 8, + .valid.max_access_size = 8, + .impl.min_access_size = 8, + .impl.max_access_size = 8, + .endianness = DEVICE_BIG_ENDIAN, +}; + +static uint64_t pnv_pec_stk_pci_xscom_read(void *opaque, hwaddr addr, + unsigned size) +{ + PnvPhb4PecStack *stack = PNV_PHB4_PEC_STACK(opaque); + uint32_t reg = addr >> 3; + + /* TODO: add list of allowed registers and error out if not */ + return stack->pci_regs[reg]; +} + +static void pnv_pec_stk_pci_xscom_write(void *opaque, hwaddr addr, + uint64_t val, unsigned size) +{ + PnvPhb4PecStack *stack = PNV_PHB4_PEC_STACK(opaque); + uint32_t reg = addr >> 3; + + switch (reg) { + case PEC_PCI_STK_PCI_FIR: + stack->nest_regs[reg] = val; + break; + case PEC_PCI_STK_PCI_FIR_CLR: + stack->nest_regs[PEC_PCI_STK_PCI_FIR] &= val; + break; + case PEC_PCI_STK_PCI_FIR_SET: + stack->nest_regs[PEC_PCI_STK_PCI_FIR] |= val; + break; + case PEC_PCI_STK_PCI_FIR_MSK: + stack->nest_regs[reg] = val; + break; + case PEC_PCI_STK_PCI_FIR_MSKC: + stack->nest_regs[PEC_PCI_STK_PCI_FIR_MSK] &= val; + break; + case PEC_PCI_STK_PCI_FIR_MSKS: + stack->nest_regs[PEC_PCI_STK_PCI_FIR_MSK] |= val; + break; + case PEC_PCI_STK_PCI_FIR_ACT0: + case PEC_PCI_STK_PCI_FIR_ACT1: + stack->nest_regs[reg] = val; + break; + case PEC_PCI_STK_PCI_FIR_WOF: + stack->nest_regs[reg] = 0; + break; + case PEC_PCI_STK_ETU_RESET: + stack->nest_regs[reg] = val & 0x8000000000000000ull; + /* TODO: Implement reset */ + break; + case PEC_PCI_STK_PBAIB_ERR_REPORT: + break; + case PEC_PCI_STK_PBAIB_TX_CMD_CRED: + case PEC_PCI_STK_PBAIB_TX_DAT_CRED: + stack->nest_regs[reg] = val; + break; + default: + qemu_log_mask(LOG_UNIMP, "phb4_pec_stk: pci_xscom_write 0x%"HWADDR_PRIx + "=%"PRIx64"\n", addr, val); + } +} + +static const MemoryRegionOps pnv_pec_stk_pci_xscom_ops = { + .read = pnv_pec_stk_pci_xscom_read, + .write = pnv_pec_stk_pci_xscom_write, + .valid.min_access_size = 8, + .valid.max_access_size = 8, + .impl.min_access_size = 8, + .impl.max_access_size = 8, + .endianness = DEVICE_BIG_ENDIAN, +}; + static int pnv_phb4_map_irq(PCIDevice *pci_dev, int irq_num) { /* Check that out properly ... */ @@ -1175,6 +1431,52 @@ static AddressSpace *pnv_phb4_dma_iommu(PCIBus *bus, void *opaque, int devfn) return &ds->dma_as; } +static void pnv_phb4_xscom_realize(PnvPHB4 *phb) +{ + PnvPhb4PecStack *stack = phb->stack; + PnvPhb4PecState *pec = stack->pec; + PnvPhb4PecClass *pecc = PNV_PHB4_PEC_GET_CLASS(pec); + uint32_t pec_nest_base; + uint32_t pec_pci_base; + char name[64]; + + assert(pec); + + /* Initialize the XSCOM regions for the stack registers */ + snprintf(name, sizeof(name), "xscom-pec-%d.%d-nest-stack-%d", + pec->chip_id, pec->index, stack->stack_no); + pnv_xscom_region_init(&stack->nest_regs_mr, OBJECT(stack), + &pnv_pec_stk_nest_xscom_ops, stack, name, + PHB4_PEC_NEST_STK_REGS_COUNT); + + snprintf(name, sizeof(name), "xscom-pec-%d.%d-pci-stack-%d", + pec->chip_id, pec->index, stack->stack_no); + pnv_xscom_region_init(&stack->pci_regs_mr, OBJECT(stack), + &pnv_pec_stk_pci_xscom_ops, stack, name, + PHB4_PEC_PCI_STK_REGS_COUNT); + + /* PHB pass-through */ + snprintf(name, sizeof(name), "xscom-pec-%d.%d-pci-stack-%d-phb", + pec->chip_id, pec->index, stack->stack_no); + pnv_xscom_region_init(&stack->phb_regs_mr, OBJECT(phb), + &pnv_phb4_xscom_ops, phb, name, 0x40); + + pec_nest_base = pecc->xscom_nest_base(pec); + pec_pci_base = pecc->xscom_pci_base(pec); + + /* Populate the XSCOM address space. */ + pnv_xscom_add_subregion(pec->chip, + pec_nest_base + 0x40 * (stack->stack_no + 1), + &stack->nest_regs_mr); + pnv_xscom_add_subregion(pec->chip, + pec_pci_base + 0x40 * (stack->stack_no + 1), + &stack->pci_regs_mr); + pnv_xscom_add_subregion(pec->chip, + pec_pci_base + PNV9_XSCOM_PEC_PCI_STK0 + + 0x40 * stack->stack_no, + &stack->phb_regs_mr); +} + static void pnv_phb4_instance_init(Object *obj) { PnvPHB4 *phb = PNV_PHB4(obj); @@ -1247,6 +1549,8 @@ static void pnv_phb4_realize(DeviceState *dev, Error **errp) pnv_phb4_update_xsrc(phb); phb->qirqs = qemu_allocate_irqs(xive_source_set_irq, xsrc, xsrc->nr_irqs); + + pnv_phb4_xscom_realize(phb); } static const char *pnv_phb4_root_bus_path(PCIHostState *host_bridge, diff --git a/hw/pci-host/pnv_phb4_pec.c b/hw/pci-host/pnv_phb4_pec.c index f8038dff17..bf0fdf33fd 100644 --- a/hw/pci-host/pnv_phb4_pec.c +++ b/hw/pci-host/pnv_phb4_pec.c @@ -111,258 +111,6 @@ static const MemoryRegionOps pnv_pec_pci_xscom_ops = { .endianness = DEVICE_BIG_ENDIAN, }; -static uint64_t pnv_pec_stk_nest_xscom_read(void *opaque, hwaddr addr, - unsigned size) -{ - PnvPhb4PecStack *stack = PNV_PHB4_PEC_STACK(opaque); - uint32_t reg = addr >> 3; - - /* TODO: add list of allowed registers and error out if not */ - return stack->nest_regs[reg]; -} - -static void pnv_pec_stk_update_map(PnvPhb4PecStack *stack) -{ - PnvPhb4PecState *pec = stack->pec; - MemoryRegion *sysmem = get_system_memory(); - uint64_t bar_en = stack->nest_regs[PEC_NEST_STK_BAR_EN]; - uint64_t bar, mask, size; - char name[64]; - - /* - * NOTE: This will really not work well if those are remapped - * after the PHB has created its sub regions. We could do better - * if we had a way to resize regions but we don't really care - * that much in practice as the stuff below really only happens - * once early during boot - */ - - /* Handle unmaps */ - if (memory_region_is_mapped(&stack->mmbar0) && - !(bar_en & PEC_NEST_STK_BAR_EN_MMIO0)) { - memory_region_del_subregion(sysmem, &stack->mmbar0); - } - if (memory_region_is_mapped(&stack->mmbar1) && - !(bar_en & PEC_NEST_STK_BAR_EN_MMIO1)) { - memory_region_del_subregion(sysmem, &stack->mmbar1); - } - if (memory_region_is_mapped(&stack->phbbar) && - !(bar_en & PEC_NEST_STK_BAR_EN_PHB)) { - memory_region_del_subregion(sysmem, &stack->phbbar); - } - if (memory_region_is_mapped(&stack->intbar) && - !(bar_en & PEC_NEST_STK_BAR_EN_INT)) { - memory_region_del_subregion(sysmem, &stack->intbar); - } - - /* Update PHB */ - pnv_phb4_update_regions(stack); - - /* Handle maps */ - if (!memory_region_is_mapped(&stack->mmbar0) && - (bar_en & PEC_NEST_STK_BAR_EN_MMIO0)) { - bar = stack->nest_regs[PEC_NEST_STK_MMIO_BAR0] >> 8; - mask = stack->nest_regs[PEC_NEST_STK_MMIO_BAR0_MASK]; - size = ((~mask) >> 8) + 1; - snprintf(name, sizeof(name), "pec-%d.%d-stack-%d-mmio0", - pec->chip_id, pec->index, stack->stack_no); - memory_region_init(&stack->mmbar0, OBJECT(stack), name, size); - memory_region_add_subregion(sysmem, bar, &stack->mmbar0); - stack->mmio0_base = bar; - stack->mmio0_size = size; - } - if (!memory_region_is_mapped(&stack->mmbar1) && - (bar_en & PEC_NEST_STK_BAR_EN_MMIO1)) { - bar = stack->nest_regs[PEC_NEST_STK_MMIO_BAR1] >> 8; - mask = stack->nest_regs[PEC_NEST_STK_MMIO_BAR1_MASK]; - size = ((~mask) >> 8) + 1; - snprintf(name, sizeof(name), "pec-%d.%d-stack-%d-mmio1", - pec->chip_id, pec->index, stack->stack_no); - memory_region_init(&stack->mmbar1, OBJECT(stack), name, size); - memory_region_add_subregion(sysmem, bar, &stack->mmbar1); - stack->mmio1_base = bar; - stack->mmio1_size = size; - } - if (!memory_region_is_mapped(&stack->phbbar) && - (bar_en & PEC_NEST_STK_BAR_EN_PHB)) { - bar = stack->nest_regs[PEC_NEST_STK_PHB_REGS_BAR] >> 8; - size = PNV_PHB4_NUM_REGS << 3; - snprintf(name, sizeof(name), "pec-%d.%d-stack-%d-phb", - pec->chip_id, pec->index, stack->stack_no); - memory_region_init(&stack->phbbar, OBJECT(stack), name, size); - memory_region_add_subregion(sysmem, bar, &stack->phbbar); - } - if (!memory_region_is_mapped(&stack->intbar) && - (bar_en & PEC_NEST_STK_BAR_EN_INT)) { - bar = stack->nest_regs[PEC_NEST_STK_INT_BAR] >> 8; - size = PNV_PHB4_MAX_INTs << 16; - snprintf(name, sizeof(name), "pec-%d.%d-stack-%d-int", - stack->pec->chip_id, stack->pec->index, stack->stack_no); - memory_region_init(&stack->intbar, OBJECT(stack), name, size); - memory_region_add_subregion(sysmem, bar, &stack->intbar); - } - - /* Update PHB */ - pnv_phb4_update_regions(stack); -} - -static void pnv_pec_stk_nest_xscom_write(void *opaque, hwaddr addr, - uint64_t val, unsigned size) -{ - PnvPhb4PecStack *stack = PNV_PHB4_PEC_STACK(opaque); - PnvPhb4PecState *pec = stack->pec; - uint32_t reg = addr >> 3; - - switch (reg) { - case PEC_NEST_STK_PCI_NEST_FIR: - stack->nest_regs[PEC_NEST_STK_PCI_NEST_FIR] = val; - break; - case PEC_NEST_STK_PCI_NEST_FIR_CLR: - stack->nest_regs[PEC_NEST_STK_PCI_NEST_FIR] &= val; - break; - case PEC_NEST_STK_PCI_NEST_FIR_SET: - stack->nest_regs[PEC_NEST_STK_PCI_NEST_FIR] |= val; - break; - case PEC_NEST_STK_PCI_NEST_FIR_MSK: - stack->nest_regs[PEC_NEST_STK_PCI_NEST_FIR_MSK] = val; - break; - case PEC_NEST_STK_PCI_NEST_FIR_MSKC: - stack->nest_regs[PEC_NEST_STK_PCI_NEST_FIR_MSK] &= val; - break; - case PEC_NEST_STK_PCI_NEST_FIR_MSKS: - stack->nest_regs[PEC_NEST_STK_PCI_NEST_FIR_MSK] |= val; - break; - case PEC_NEST_STK_PCI_NEST_FIR_ACT0: - case PEC_NEST_STK_PCI_NEST_FIR_ACT1: - stack->nest_regs[reg] = val; - break; - case PEC_NEST_STK_PCI_NEST_FIR_WOF: - stack->nest_regs[reg] = 0; - break; - case PEC_NEST_STK_ERR_REPORT_0: - case PEC_NEST_STK_ERR_REPORT_1: - case PEC_NEST_STK_PBCQ_GNRL_STATUS: - /* Flag error ? */ - break; - case PEC_NEST_STK_PBCQ_MODE: - stack->nest_regs[reg] = val & 0xff00000000000000ull; - break; - case PEC_NEST_STK_MMIO_BAR0: - case PEC_NEST_STK_MMIO_BAR0_MASK: - case PEC_NEST_STK_MMIO_BAR1: - case PEC_NEST_STK_MMIO_BAR1_MASK: - if (stack->nest_regs[PEC_NEST_STK_BAR_EN] & - (PEC_NEST_STK_BAR_EN_MMIO0 | - PEC_NEST_STK_BAR_EN_MMIO1)) { - phb_pec_error(pec, "Changing enabled BAR unsupported\n"); - } - stack->nest_regs[reg] = val & 0xffffffffff000000ull; - break; - case PEC_NEST_STK_PHB_REGS_BAR: - if (stack->nest_regs[PEC_NEST_STK_BAR_EN] & PEC_NEST_STK_BAR_EN_PHB) { - phb_pec_error(pec, "Changing enabled BAR unsupported\n"); - } - stack->nest_regs[reg] = val & 0xffffffffffc00000ull; - break; - case PEC_NEST_STK_INT_BAR: - if (stack->nest_regs[PEC_NEST_STK_BAR_EN] & PEC_NEST_STK_BAR_EN_INT) { - phb_pec_error(pec, "Changing enabled BAR unsupported\n"); - } - stack->nest_regs[reg] = val & 0xfffffff000000000ull; - break; - case PEC_NEST_STK_BAR_EN: - stack->nest_regs[reg] = val & 0xf000000000000000ull; - pnv_pec_stk_update_map(stack); - break; - case PEC_NEST_STK_DATA_FRZ_TYPE: - case PEC_NEST_STK_PBCQ_TUN_BAR: - /* Not used for now */ - stack->nest_regs[reg] = val; - break; - default: - qemu_log_mask(LOG_UNIMP, "phb4_pec: nest_xscom_write 0x%"HWADDR_PRIx - "=%"PRIx64"\n", addr, val); - } -} - -static const MemoryRegionOps pnv_pec_stk_nest_xscom_ops = { - .read = pnv_pec_stk_nest_xscom_read, - .write = pnv_pec_stk_nest_xscom_write, - .valid.min_access_size = 8, - .valid.max_access_size = 8, - .impl.min_access_size = 8, - .impl.max_access_size = 8, - .endianness = DEVICE_BIG_ENDIAN, -}; - -static uint64_t pnv_pec_stk_pci_xscom_read(void *opaque, hwaddr addr, - unsigned size) -{ - PnvPhb4PecStack *stack = PNV_PHB4_PEC_STACK(opaque); - uint32_t reg = addr >> 3; - - /* TODO: add list of allowed registers and error out if not */ - return stack->pci_regs[reg]; -} - -static void pnv_pec_stk_pci_xscom_write(void *opaque, hwaddr addr, - uint64_t val, unsigned size) -{ - PnvPhb4PecStack *stack = PNV_PHB4_PEC_STACK(opaque); - uint32_t reg = addr >> 3; - - switch (reg) { - case PEC_PCI_STK_PCI_FIR: - stack->nest_regs[reg] = val; - break; - case PEC_PCI_STK_PCI_FIR_CLR: - stack->nest_regs[PEC_PCI_STK_PCI_FIR] &= val; - break; - case PEC_PCI_STK_PCI_FIR_SET: - stack->nest_regs[PEC_PCI_STK_PCI_FIR] |= val; - break; - case PEC_PCI_STK_PCI_FIR_MSK: - stack->nest_regs[reg] = val; - break; - case PEC_PCI_STK_PCI_FIR_MSKC: - stack->nest_regs[PEC_PCI_STK_PCI_FIR_MSK] &= val; - break; - case PEC_PCI_STK_PCI_FIR_MSKS: - stack->nest_regs[PEC_PCI_STK_PCI_FIR_MSK] |= val; - break; - case PEC_PCI_STK_PCI_FIR_ACT0: - case PEC_PCI_STK_PCI_FIR_ACT1: - stack->nest_regs[reg] = val; - break; - case PEC_PCI_STK_PCI_FIR_WOF: - stack->nest_regs[reg] = 0; - break; - case PEC_PCI_STK_ETU_RESET: - stack->nest_regs[reg] = val & 0x8000000000000000ull; - /* TODO: Implement reset */ - break; - case PEC_PCI_STK_PBAIB_ERR_REPORT: - break; - case PEC_PCI_STK_PBAIB_TX_CMD_CRED: - case PEC_PCI_STK_PBAIB_TX_DAT_CRED: - stack->nest_regs[reg] = val; - break; - default: - qemu_log_mask(LOG_UNIMP, "phb4_pec_stk: pci_xscom_write 0x%"HWADDR_PRIx - "=%"PRIx64"\n", addr, val); - } -} - -static const MemoryRegionOps pnv_pec_stk_pci_xscom_ops = { - .read = pnv_pec_stk_pci_xscom_read, - .write = pnv_pec_stk_pci_xscom_write, - .valid.min_access_size = 8, - .valid.max_access_size = 8, - .impl.min_access_size = 8, - .impl.max_access_size = 8, - .endianness = DEVICE_BIG_ENDIAN, -}; - static void pnv_pec_instance_init(Object *obj) { PnvPhb4PecState *pec = PNV_PHB4_PEC(obj); @@ -539,32 +287,7 @@ static void pnv_pec_stk_realize(DeviceState *dev, Error **errp) PnvPhb4PecStack *stack = PNV_PHB4_PEC_STACK(dev); PnvPhb4PecState *pec = stack->pec; PnvPhb4PecClass *pecc = PNV_PHB4_PEC_GET_CLASS(pec); - PnvChip *chip = pec->chip; int phb_id = pnv_phb4_pec_get_phb_id(pec, stack->stack_no); - uint32_t pec_nest_base; - uint32_t pec_pci_base; - char name[64]; - - assert(pec); - - /* Initialize the XSCOM regions for the stack registers */ - snprintf(name, sizeof(name), "xscom-pec-%d.%d-nest-stack-%d", - pec->chip_id, pec->index, stack->stack_no); - pnv_xscom_region_init(&stack->nest_regs_mr, OBJECT(stack), - &pnv_pec_stk_nest_xscom_ops, stack, name, - PHB4_PEC_NEST_STK_REGS_COUNT); - - snprintf(name, sizeof(name), "xscom-pec-%d.%d-pci-stack-%d", - pec->chip_id, pec->index, stack->stack_no); - pnv_xscom_region_init(&stack->pci_regs_mr, OBJECT(stack), - &pnv_pec_stk_pci_xscom_ops, stack, name, - PHB4_PEC_PCI_STK_REGS_COUNT); - - /* PHB pass-through */ - snprintf(name, sizeof(name), "xscom-pec-%d.%d-pci-stack-%d-phb", - pec->chip_id, pec->index, stack->stack_no); - pnv_xscom_region_init(&stack->phb_regs_mr, OBJECT(&stack->phb), - &pnv_phb4_xscom_ops, &stack->phb, name, 0x40); object_property_set_int(OBJECT(&stack->phb), "chip-id", pec->chip_id, &error_fatal); @@ -577,21 +300,6 @@ static void pnv_pec_stk_realize(DeviceState *dev, Error **errp) if (!sysbus_realize(SYS_BUS_DEVICE(&stack->phb), errp)) { return; } - - pec_nest_base = pecc->xscom_nest_base(pec); - pec_pci_base = pecc->xscom_pci_base(pec); - - /* Populate the XSCOM address space. */ - pnv_xscom_add_subregion(chip, - pec_nest_base + 0x40 * (stack->stack_no + 1), - &stack->nest_regs_mr); - pnv_xscom_add_subregion(chip, - pec_pci_base + 0x40 * (stack->stack_no + 1), - &stack->pci_regs_mr); - pnv_xscom_add_subregion(chip, - pec_pci_base + PNV9_XSCOM_PEC_PCI_STK0 + - 0x40 * stack->stack_no, - &stack->phb_regs_mr); } static Property pnv_pec_stk_properties[] = { From dc8e2914ab27e09ce6483fa41be6822b2ff3b650 Mon Sep 17 00:00:00 2001 From: Daniel Henrique Barboza Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 31/34] ppc/pnv: turn 'phb' into a pointer in struct PnvPhb4PecStack MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit At this moment, stack->phb is the plain PnvPHB4 device itself instead of a pointer to the device. This will present a problem when adding user creatable devices because we can't deal with this struct and the realize() callback from the user creatable device. We can't get rid of this attribute, similar to what we did when enabling pnv-phb3 user creatable devices, because pnv_phb4_update_regions() needs to access stack->phb to do its job. This function is called twice in pnv_pec_stk_update_map(), which is one of the nested xscom write callbacks (via pnv_pec_stk_nest_xscom_write()). In fact, pnv_pec_stk_update_map() code comment is explicit about how the order of the unmap/map operations relates with the PHB subregions. All of this indicates that this code is tied together in a way that we either go on a crusade, featuring lots of refactories and redesign and considerable pain, to decouple stack and phb mapping, or we allow stack update_map operations to access the associated PHB as it is today even after introducing pnv-phb4 user devices. This patch chooses the latter. Instead of getting rid of stack->phb, turn it into a PHB pointer. This will allow us to assign an user created PHB to an existing stack later. In this process, pnv_pec_stk_instance_init() is removed because stack->phb is being initialized in stk_realize() instead. Reviewed-by: Cédric Le Goater Signed-off-by: Daniel Henrique Barboza Message-Id: <20220111131027.599784-4-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater --- hw/pci-host/pnv_phb4.c | 2 +- hw/pci-host/pnv_phb4_pec.c | 20 +++++++------------- include/hw/pci-host/pnv_phb4.h | 7 +++++-- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/hw/pci-host/pnv_phb4.c b/hw/pci-host/pnv_phb4.c index 8ef58bf2de..e25adb8860 100644 --- a/hw/pci-host/pnv_phb4.c +++ b/hw/pci-host/pnv_phb4.c @@ -1728,7 +1728,7 @@ type_init(pnv_phb4_register_types); void pnv_phb4_update_regions(PnvPhb4PecStack *stack) { - PnvPHB4 *phb = &stack->phb; + PnvPHB4 *phb = stack->phb; /* Unmap first always */ if (memory_region_is_mapped(&phb->mr_regs)) { diff --git a/hw/pci-host/pnv_phb4_pec.c b/hw/pci-host/pnv_phb4_pec.c index bf0fdf33fd..d4c52a5d28 100644 --- a/hw/pci-host/pnv_phb4_pec.c +++ b/hw/pci-host/pnv_phb4_pec.c @@ -275,13 +275,6 @@ static const TypeInfo pnv_pec_type_info = { } }; -static void pnv_pec_stk_instance_init(Object *obj) -{ - PnvPhb4PecStack *stack = PNV_PHB4_PEC_STACK(obj); - - object_initialize_child(obj, "phb", &stack->phb, TYPE_PNV_PHB4); -} - static void pnv_pec_stk_realize(DeviceState *dev, Error **errp) { PnvPhb4PecStack *stack = PNV_PHB4_PEC_STACK(dev); @@ -289,15 +282,17 @@ static void pnv_pec_stk_realize(DeviceState *dev, Error **errp) PnvPhb4PecClass *pecc = PNV_PHB4_PEC_GET_CLASS(pec); int phb_id = pnv_phb4_pec_get_phb_id(pec, stack->stack_no); - object_property_set_int(OBJECT(&stack->phb), "chip-id", pec->chip_id, + stack->phb = PNV_PHB4(qdev_new(TYPE_PNV_PHB4)); + + object_property_set_int(OBJECT(stack->phb), "chip-id", pec->chip_id, &error_fatal); - object_property_set_int(OBJECT(&stack->phb), "index", phb_id, + object_property_set_int(OBJECT(stack->phb), "index", phb_id, &error_fatal); - object_property_set_int(OBJECT(&stack->phb), "version", pecc->version, + object_property_set_int(OBJECT(stack->phb), "version", pecc->version, &error_fatal); - object_property_set_link(OBJECT(&stack->phb), "stack", OBJECT(stack), + object_property_set_link(OBJECT(stack->phb), "stack", OBJECT(stack), &error_abort); - if (!sysbus_realize(SYS_BUS_DEVICE(&stack->phb), errp)) { + if (!sysbus_realize(SYS_BUS_DEVICE(stack->phb), errp)) { return; } } @@ -324,7 +319,6 @@ static const TypeInfo pnv_pec_stk_type_info = { .name = TYPE_PNV_PHB4_PEC_STACK, .parent = TYPE_DEVICE, .instance_size = sizeof(PnvPhb4PecStack), - .instance_init = pnv_pec_stk_instance_init, .class_init = pnv_pec_stk_class_init, .interfaces = (InterfaceInfo[]) { { TYPE_PNV_XSCOM_INTERFACE }, diff --git a/include/hw/pci-host/pnv_phb4.h b/include/hw/pci-host/pnv_phb4.h index 5ee996ebc6..82f054cf21 100644 --- a/include/hw/pci-host/pnv_phb4.h +++ b/include/hw/pci-host/pnv_phb4.h @@ -177,8 +177,11 @@ struct PnvPhb4PecStack { /* The owner PEC */ PnvPhb4PecState *pec; - /* The actual PHB */ - PnvPHB4 phb; + /* + * PHB4 pointer. pnv_phb4_update_regions() needs to access + * the PHB4 via a PnvPhb4PecStack pointer. + */ + PnvPHB4 *phb; }; struct PnvPhb4PecState { From 5bc67b052b511ef042bd420857227e1e5173c88a Mon Sep 17 00:00:00 2001 From: Daniel Henrique Barboza Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 32/34] ppc/pnv: Introduce user creatable pnv-phb4 devices MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch introduces pnv-phb4 user creatable devices that are created in a similar manner as pnv-phb3 devices, allowing the user to interact with the PHBs directly instead of creating PCI Express Controllers that will create a certain amount of PHBs per controller index. We accomplish this by doing the following: - add a pnv_phb4_get_stack() helper to retrieve which stack an user created phb4 would occupy; - when dealing with an user created pnv-phb4 (detected by checking if phb->stack is NULL at the start of phb4_realize()), retrieve its stack and initialize its properties as done in stk_realize(); - use 'defaults_enabled()' in stk_realize() to avoid creating and initializing a 'stack->phb' qdev that might be overwritten by an user created pnv-phb4 device. This process is wrapped into a new helper called pnv_pec_stk_default_phb_realize(). Reviewed-by: Cédric Le Goater Signed-off-by: Daniel Henrique Barboza Message-Id: <20220111131027.599784-5-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater --- hw/pci-host/pnv_phb4.c | 74 ++++++++++++++++++++++++++++++++++++-- hw/pci-host/pnv_phb4_pec.c | 17 +++++++-- hw/ppc/pnv.c | 2 ++ 3 files changed, 89 insertions(+), 4 deletions(-) diff --git a/hw/pci-host/pnv_phb4.c b/hw/pci-host/pnv_phb4.c index e25adb8860..ffa1453eee 100644 --- a/hw/pci-host/pnv_phb4.c +++ b/hw/pci-host/pnv_phb4.c @@ -1487,15 +1487,85 @@ static void pnv_phb4_instance_init(Object *obj) object_initialize_child(obj, "source", &phb->xsrc, TYPE_XIVE_SOURCE); } +static PnvPhb4PecStack *pnv_phb4_get_stack(PnvChip *chip, PnvPHB4 *phb, + Error **errp) +{ + Pnv9Chip *chip9 = PNV9_CHIP(chip); + int chip_id = phb->chip_id; + int index = phb->phb_id; + int i, j; + + for (i = 0; i < chip->num_pecs; i++) { + /* + * For each PEC, check the amount of stacks it supports + * and see if the given phb4 index matches a stack. + */ + PnvPhb4PecState *pec = &chip9->pecs[i]; + + for (j = 0; j < pec->num_stacks; j++) { + if (index == pnv_phb4_pec_get_phb_id(pec, j)) { + return &pec->stacks[j]; + } + } + } + + error_setg(errp, + "pnv-phb4 chip-id %d index %d didn't match any existing PEC", + chip_id, index); + + return NULL; +} + static void pnv_phb4_realize(DeviceState *dev, Error **errp) { PnvPHB4 *phb = PNV_PHB4(dev); PCIHostState *pci = PCI_HOST_BRIDGE(dev); XiveSource *xsrc = &phb->xsrc; + Error *local_err = NULL; int nr_irqs; char name[32]; - assert(phb->stack); + /* User created PHB */ + if (!phb->stack) { + PnvMachineState *pnv = PNV_MACHINE(qdev_get_machine()); + PnvChip *chip = pnv_get_chip(pnv, phb->chip_id); + PnvPhb4PecClass *pecc; + BusState *s; + + if (!chip) { + error_setg(errp, "invalid chip id: %d", phb->chip_id); + return; + } + + phb->stack = pnv_phb4_get_stack(chip, phb, &local_err); + if (local_err) { + error_propagate(errp, local_err); + return; + } + + /* All other phb properties but 'version' are already set */ + pecc = PNV_PHB4_PEC_GET_CLASS(phb->stack->pec); + object_property_set_int(OBJECT(phb), "version", pecc->version, + &error_fatal); + + /* + * Assign stack->phb since pnv_phb4_update_regions() uses it + * to access the phb. + */ + phb->stack->phb = phb; + + /* + * Reparent user created devices to the chip to build + * correctly the device tree. + */ + pnv_chip_parent_fixup(chip, OBJECT(phb), phb->phb_id); + + s = qdev_get_parent_bus(DEVICE(chip)); + if (!qdev_set_parent_bus(DEVICE(phb), s, &local_err)) { + error_propagate(errp, local_err); + return; + } + } /* Set the "big_phb" flag */ phb->big_phb = phb->phb_id == 0 || phb->phb_id == 3; @@ -1600,7 +1670,7 @@ static void pnv_phb4_class_init(ObjectClass *klass, void *data) dc->realize = pnv_phb4_realize; device_class_set_props(dc, pnv_phb4_properties); set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); - dc->user_creatable = false; + dc->user_creatable = true; xfc->notify = pnv_phb4_xive_notify; } diff --git a/hw/pci-host/pnv_phb4_pec.c b/hw/pci-host/pnv_phb4_pec.c index d4c52a5d28..7fe7f1f007 100644 --- a/hw/pci-host/pnv_phb4_pec.c +++ b/hw/pci-host/pnv_phb4_pec.c @@ -19,6 +19,7 @@ #include "hw/pci/pci_bus.h" #include "hw/ppc/pnv.h" #include "hw/qdev-properties.h" +#include "sysemu/sysemu.h" #include @@ -275,9 +276,9 @@ static const TypeInfo pnv_pec_type_info = { } }; -static void pnv_pec_stk_realize(DeviceState *dev, Error **errp) +static void pnv_pec_stk_default_phb_realize(PnvPhb4PecStack *stack, + Error **errp) { - PnvPhb4PecStack *stack = PNV_PHB4_PEC_STACK(dev); PnvPhb4PecState *pec = stack->pec; PnvPhb4PecClass *pecc = PNV_PHB4_PEC_GET_CLASS(pec); int phb_id = pnv_phb4_pec_get_phb_id(pec, stack->stack_no); @@ -292,11 +293,23 @@ static void pnv_pec_stk_realize(DeviceState *dev, Error **errp) &error_fatal); object_property_set_link(OBJECT(stack->phb), "stack", OBJECT(stack), &error_abort); + if (!sysbus_realize(SYS_BUS_DEVICE(stack->phb), errp)) { return; } } +static void pnv_pec_stk_realize(DeviceState *dev, Error **errp) +{ + PnvPhb4PecStack *stack = PNV_PHB4_PEC_STACK(dev); + + if (!defaults_enabled()) { + return; + } + + pnv_pec_stk_default_phb_realize(stack, errp); +} + static Property pnv_pec_stk_properties[] = { DEFINE_PROP_UINT32("stack-no", PnvPhb4PecStack, stack_no, 0), DEFINE_PROP_LINK("pec", PnvPhb4PecStack, pec, TYPE_PNV_PHB4_PEC, diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c index fe7e67e73a..837146a2fb 100644 --- a/hw/ppc/pnv.c +++ b/hw/ppc/pnv.c @@ -1960,6 +1960,8 @@ static void pnv_machine_power9_class_init(ObjectClass *oc, void *data) pmc->compat = compat; pmc->compat_size = sizeof(compat); pmc->dt_power_mgt = pnv_dt_power_mgt; + + machine_class_allow_dynamic_sysbus_dev(mc, TYPE_PNV_PHB4); } static void pnv_machine_power10_class_init(ObjectClass *oc, void *data) From 7e1e0912ec67f813473a7191274d52cab1fe476d Mon Sep 17 00:00:00 2001 From: Daniel Henrique Barboza Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 33/34] ppc/pnv: turn pnv_phb4_update_regions() into static MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Its only callers are inside pnv_phb4.c. Reviewed-by: Cédric Le Goater Signed-off-by: Daniel Henrique Barboza Message-Id: <20220111131027.599784-6-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater --- hw/pci-host/pnv_phb4.c | 52 +++++++++++++++++----------------- include/hw/pci-host/pnv_phb4.h | 1 - 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/hw/pci-host/pnv_phb4.c b/hw/pci-host/pnv_phb4.c index ffa1453eee..be29174f13 100644 --- a/hw/pci-host/pnv_phb4.c +++ b/hw/pci-host/pnv_phb4.c @@ -868,6 +868,32 @@ static uint64_t pnv_pec_stk_nest_xscom_read(void *opaque, hwaddr addr, return stack->nest_regs[reg]; } +static void pnv_phb4_update_regions(PnvPhb4PecStack *stack) +{ + PnvPHB4 *phb = stack->phb; + + /* Unmap first always */ + if (memory_region_is_mapped(&phb->mr_regs)) { + memory_region_del_subregion(&stack->phbbar, &phb->mr_regs); + } + if (memory_region_is_mapped(&phb->xsrc.esb_mmio)) { + memory_region_del_subregion(&stack->intbar, &phb->xsrc.esb_mmio); + } + + /* Map registers if enabled */ + if (memory_region_is_mapped(&stack->phbbar)) { + memory_region_add_subregion(&stack->phbbar, 0, &phb->mr_regs); + } + + /* Map ESB if enabled */ + if (memory_region_is_mapped(&stack->intbar)) { + memory_region_add_subregion(&stack->intbar, 0, &phb->xsrc.esb_mmio); + } + + /* Check/update m32 */ + pnv_phb4_check_all_mbt(phb); +} + static void pnv_pec_stk_update_map(PnvPhb4PecStack *stack) { PnvPhb4PecState *pec = stack->pec; @@ -1796,32 +1822,6 @@ static void pnv_phb4_register_types(void) type_init(pnv_phb4_register_types); -void pnv_phb4_update_regions(PnvPhb4PecStack *stack) -{ - PnvPHB4 *phb = stack->phb; - - /* Unmap first always */ - if (memory_region_is_mapped(&phb->mr_regs)) { - memory_region_del_subregion(&stack->phbbar, &phb->mr_regs); - } - if (memory_region_is_mapped(&phb->xsrc.esb_mmio)) { - memory_region_del_subregion(&stack->intbar, &phb->xsrc.esb_mmio); - } - - /* Map registers if enabled */ - if (memory_region_is_mapped(&stack->phbbar)) { - memory_region_add_subregion(&stack->phbbar, 0, &phb->mr_regs); - } - - /* Map ESB if enabled */ - if (memory_region_is_mapped(&stack->intbar)) { - memory_region_add_subregion(&stack->intbar, 0, &phb->xsrc.esb_mmio); - } - - /* Check/update m32 */ - pnv_phb4_check_all_mbt(phb); -} - void pnv_phb4_pic_print_info(PnvPHB4 *phb, Monitor *mon) { uint32_t offset = phb->regs[PHB_INT_NOTIFY_INDEX >> 3]; diff --git a/include/hw/pci-host/pnv_phb4.h b/include/hw/pci-host/pnv_phb4.h index 82f054cf21..4b7ce8a723 100644 --- a/include/hw/pci-host/pnv_phb4.h +++ b/include/hw/pci-host/pnv_phb4.h @@ -131,7 +131,6 @@ struct PnvPHB4 { }; void pnv_phb4_pic_print_info(PnvPHB4 *phb, Monitor *mon); -void pnv_phb4_update_regions(PnvPhb4PecStack *stack); int pnv_phb4_pec_get_phb_id(PnvPhb4PecState *pec, int stack_index); extern const MemoryRegionOps pnv_phb4_xscom_ops; From f83460bb203a49dd1693bf8b664d2a935a5be621 Mon Sep 17 00:00:00 2001 From: Daniel Henrique Barboza Date: Wed, 12 Jan 2022 11:28:27 +0100 Subject: [PATCH 34/34] ppc/pnv: use stack->pci_regs[] in pnv_pec_stk_pci_xscom_write() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pnv_pec_stk_pci_xscom_write() is pnv_pec_stk_pci_xscom_ops write callback. It writes values into regs in the stack->nest_regs[] array. The pnv_pec_stk_pci_xscom_read read callback, on the other hand, returns values of the stack->pci_regs[]. In fact, at this moment, the only use of stack->pci_regs[] is in pnv_pec_stk_pci_xscom_read(). There's no code that is written anything in stack->pci_regs[], which is suspicious. Considering that stack->nest_regs[] is widely used by the nested MemoryOps pnv_pec_stk_nest_xscom_ops, in both read and write callbacks, the conclusion is that we're writing the wrong array in pnv_pec_stk_pci_xscom_write(). This function should write stack->pci_regs[] instead. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Frederic Barrat Message-Id: <20220111200132.633896-2-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater --- hw/pci-host/pnv_phb4.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/hw/pci-host/pnv_phb4.c b/hw/pci-host/pnv_phb4.c index be29174f13..a7b638831e 100644 --- a/hw/pci-host/pnv_phb4.c +++ b/hw/pci-host/pnv_phb4.c @@ -1086,39 +1086,39 @@ static void pnv_pec_stk_pci_xscom_write(void *opaque, hwaddr addr, switch (reg) { case PEC_PCI_STK_PCI_FIR: - stack->nest_regs[reg] = val; + stack->pci_regs[reg] = val; break; case PEC_PCI_STK_PCI_FIR_CLR: - stack->nest_regs[PEC_PCI_STK_PCI_FIR] &= val; + stack->pci_regs[PEC_PCI_STK_PCI_FIR] &= val; break; case PEC_PCI_STK_PCI_FIR_SET: - stack->nest_regs[PEC_PCI_STK_PCI_FIR] |= val; + stack->pci_regs[PEC_PCI_STK_PCI_FIR] |= val; break; case PEC_PCI_STK_PCI_FIR_MSK: - stack->nest_regs[reg] = val; + stack->pci_regs[reg] = val; break; case PEC_PCI_STK_PCI_FIR_MSKC: - stack->nest_regs[PEC_PCI_STK_PCI_FIR_MSK] &= val; + stack->pci_regs[PEC_PCI_STK_PCI_FIR_MSK] &= val; break; case PEC_PCI_STK_PCI_FIR_MSKS: - stack->nest_regs[PEC_PCI_STK_PCI_FIR_MSK] |= val; + stack->pci_regs[PEC_PCI_STK_PCI_FIR_MSK] |= val; break; case PEC_PCI_STK_PCI_FIR_ACT0: case PEC_PCI_STK_PCI_FIR_ACT1: - stack->nest_regs[reg] = val; + stack->pci_regs[reg] = val; break; case PEC_PCI_STK_PCI_FIR_WOF: - stack->nest_regs[reg] = 0; + stack->pci_regs[reg] = 0; break; case PEC_PCI_STK_ETU_RESET: - stack->nest_regs[reg] = val & 0x8000000000000000ull; + stack->pci_regs[reg] = val & 0x8000000000000000ull; /* TODO: Implement reset */ break; case PEC_PCI_STK_PBAIB_ERR_REPORT: break; case PEC_PCI_STK_PBAIB_TX_CMD_CRED: case PEC_PCI_STK_PBAIB_TX_DAT_CRED: - stack->nest_regs[reg] = val; + stack->pci_regs[reg] = val; break; default: qemu_log_mask(LOG_UNIMP, "phb4_pec_stk: pci_xscom_write 0x%"HWADDR_PRIx