From 32a2003af9cb0cb11b3992fd3248cb89752c53e9 Mon Sep 17 00:00:00 2001 From: Alex Barcelo Date: Thu, 9 Feb 2012 23:55:46 +0000 Subject: [PATCH 01/16] Bad zero comparison for sas_ss_flags on powerpc All architectures work the same way, and all check for sas_ss_flags == 0. The powerpc lines are wrong, and do the check the other way round (it's a qemu internal check, which is done wrong only for this architecture, it's more a typo than a bug). It's NOT ppc specific, it's POSIX standard (sigaltstack) and qemu internal. I have a test source that I will send in a follow-up (it's longer than I would have wished, I'm sure that a better test case can be written if needed) Signed-off-by: Alex Barcelo Signed-off-by: Alexander Graf --- linux-user/signal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux-user/signal.c b/linux-user/signal.c index fca51e2b11..b1e139d6fd 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -4118,7 +4118,7 @@ static target_ulong get_sigframe(struct target_sigaction *ka, oldsp = env->gpr[1]; if ((ka->sa_flags & TARGET_SA_ONSTACK) && - (sas_ss_flags(oldsp))) { + (sas_ss_flags(oldsp) == 0)) { oldsp = (target_sigaltstack_used.ss_sp + target_sigaltstack_used.ss_size); } From d715ea961254512c6989e17edbfaf959aa7805b0 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 21 Feb 2012 19:01:11 +0100 Subject: [PATCH 02/16] PPC: 405: Fix ppc405ep initialization When trying to run a ppc405 guest, it segfaults quite quickly, trying to access timers that weren't initialized. Initialize them properly instead. Reported-by: Andreas Faerber Signed-off-by: Alexander Graf --- hw/ppc405_uc.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/ppc405_uc.c b/hw/ppc405_uc.c index 6f8342e0e7..89e5013b57 100644 --- a/hw/ppc405_uc.c +++ b/hw/ppc405_uc.c @@ -2471,6 +2471,8 @@ CPUPPCState *ppc405ep_init(MemoryRegion *address_space_mem, ppc4xx_pob_init(env); /* OBP arbitrer */ ppc4xx_opba_init(0xef600600); + /* Initialize timers */ + ppc_booke_timers_init(env, sysclk, 0); /* Universal interrupt controller */ irqs = g_malloc0(sizeof(qemu_irq) * PPCUIC_OUTPUT_NB); irqs[PPCUIC_OUTPUT_INT] = From b7c28f02a12c98a4710b5c150b0753d39454101e Mon Sep 17 00:00:00 2001 From: Stefan Weil Date: Sat, 25 Feb 2012 02:37:12 +0000 Subject: [PATCH 03/16] ppc: Add missing 'static' to spin_rw_ops MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit spin_rw_ops is only used in hw/ppce500_spin.c. Signed-off-by: Stefan Weil Acked-by: Andreas Färber Signed-off-by: Alexander Graf --- hw/ppce500_spin.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/ppce500_spin.c b/hw/ppce500_spin.c index 268f5fdb9c..960b7b0c3d 100644 --- a/hw/ppce500_spin.c +++ b/hw/ppce500_spin.c @@ -182,7 +182,7 @@ static uint64_t spin_read(void *opaque, target_phys_addr_t addr, unsigned len) } } -const MemoryRegionOps spin_rw_ops = { +static const MemoryRegionOps spin_rw_ops = { .read = spin_read, .write = spin_write, .endianness = DEVICE_BIG_ENDIAN, From b5aec39672dc6084b43fa3f77764a6f549255a53 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Mon, 27 Feb 2012 17:18:07 +0000 Subject: [PATCH 04/16] pseries: Don't try to munmap() a malloc()ed TCE table For the pseries machine, TCE (IOMMU) tables can either be directly malloc()ed in qemu or, when running on a KVM which supports it, mmap()ed from a KVM ioctl. The latter option is used when available, because it allows the (frequent bottlenext) H_PUT_TCE hypercall to be KVM accelerated. However, even when KVM is persent, TCE acceleration is not always possible. Only KVM HV supports this ioctl(), not KVM PR, or the kernel could run out of contiguous memory to allocate the new table. In this case we need to fall back on the malloc()ed table. When a device is removed, and we need to remove the TCE table, we need to either munmap() or free() the table as appropriate for how it was allocated. The code is supposed to do that, but we buggily fail to initialize the tcet->fd variable in the malloc() case, which is used as a flag to determine which is the right choice. This patch fixes the bug, and cleans up error messages relating to this path while we're at it. Signed-off-by: Benjamin Herrenschmidt Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- target-ppc/kvm.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c index aeb3de9ae7..724f4c7815 100644 --- a/target-ppc/kvm.c +++ b/target-ppc/kvm.c @@ -843,12 +843,18 @@ void *kvmppc_create_spapr_tce(uint32_t liobn, uint32_t window_size, int *pfd) int fd; void *table; + /* Must set fd to -1 so we don't try to munmap when called for + * destroying the table, which the upper layers -will- do + */ + *pfd = -1; if (!cap_spapr_tce) { return NULL; } fd = kvm_vm_ioctl(kvm_state, KVM_CREATE_SPAPR_TCE, &args); if (fd < 0) { + fprintf(stderr, "KVM: Failed to create TCE table for liobn 0x%x\n", + liobn); return NULL; } @@ -857,6 +863,8 @@ void *kvmppc_create_spapr_tce(uint32_t liobn, uint32_t window_size, int *pfd) table = mmap(NULL, len, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); if (table == MAP_FAILED) { + fprintf(stderr, "KVM: Failed to map TCE table for liobn 0x%x\n", + liobn); close(fd); return NULL; } @@ -876,8 +884,8 @@ int kvmppc_remove_spapr_tce(void *table, int fd, uint32_t window_size) len = (window_size / SPAPR_VIO_TCE_PAGE_SIZE)*sizeof(VIOsPAPR_RTCE); if ((munmap(table, len) < 0) || (close(fd) < 0)) { - fprintf(stderr, "KVM: Unexpected error removing KVM SPAPR TCE " - "table: %s", strerror(errno)); + fprintf(stderr, "KVM: Unexpected error removing TCE table: %s", + strerror(errno)); /* Leak the table */ } From cd6e9320142fea0d9e82c8ca7f3a4c2f20fecf39 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Mon, 27 Feb 2012 17:18:08 +0000 Subject: [PATCH 05/16] PPC64: Add support for ldbrx and stdbrx instructions These instructions for loading and storing byte-swapped 64-bit values have been introduced in PowerISA 2.06. Signed-off-by: Thomas Huth Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- target-ppc/cpu.h | 4 ++- target-ppc/translate.c | 52 ++++++++++++++++++++++++++++++------- target-ppc/translate_init.c | 2 +- 3 files changed, 47 insertions(+), 11 deletions(-) diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h index ad09cbe06a..ca6f1cb58c 100644 --- a/target-ppc/cpu.h +++ b/target-ppc/cpu.h @@ -1918,8 +1918,10 @@ enum { PPC2_DFP = 0x0000000000000004ULL, /* Embedded.Processor Control */ PPC2_PRCNTL = 0x0000000000000008ULL, + /* Byte-reversed, indexed, double-word load and store */ + PPC2_DBRX = 0x0000000000000010ULL, -#define PPC_TCG_INSNS2 (PPC2_BOOKE206 | PPC2_PRCNTL) +#define PPC_TCG_INSNS2 (PPC2_BOOKE206 | PPC2_PRCNTL | PPC2_DBRX) }; /*****************************************************************************/ diff --git a/target-ppc/translate.c b/target-ppc/translate.c index 3ec59a7eeb..4722a09020 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -2650,7 +2650,7 @@ static void glue(gen_, name##ux)(DisasContext *ctx) tcg_temp_free(EA); \ } -#define GEN_LDX(name, ldop, opc2, opc3, type) \ +#define GEN_LDX_E(name, ldop, opc2, opc3, type, type2) \ static void glue(gen_, name##x)(DisasContext *ctx) \ { \ TCGv EA; \ @@ -2660,6 +2660,8 @@ static void glue(gen_, name##x)(DisasContext *ctx) \ gen_qemu_##ldop(ctx, cpu_gpr[rD(ctx->opcode)], EA); \ tcg_temp_free(EA); \ } +#define GEN_LDX(name, ldop, opc2, opc3, type) \ + GEN_LDX_E(name, ldop, opc2, opc3, type, PPC_NONE) #define GEN_LDS(name, ldop, op, type) \ GEN_LD(name, ldop, op | 0x20, type); \ @@ -2793,8 +2795,8 @@ static void glue(gen_, name##ux)(DisasContext *ctx) tcg_temp_free(EA); \ } -#define GEN_STX(name, stop, opc2, opc3, type) \ -static void glue(gen_, name##x)(DisasContext *ctx) \ +#define GEN_STX_E(name, stop, opc2, opc3, type, type2) \ +static void glue(gen_, name##x)(DisasContext *ctx) \ { \ TCGv EA; \ gen_set_access_type(ctx, ACCESS_INT); \ @@ -2803,6 +2805,8 @@ static void glue(gen_, name##x)(DisasContext *ctx) gen_qemu_##stop(ctx, cpu_gpr[rS(ctx->opcode)], EA); \ tcg_temp_free(EA); \ } +#define GEN_STX(name, stop, opc2, opc3, type) \ + GEN_STX_E(name, stop, opc2, opc3, type, PPC_NONE) #define GEN_STS(name, stop, op, type) \ GEN_ST(name, stop, op | 0x20, type); \ @@ -2891,6 +2895,18 @@ static inline void gen_qemu_ld32ur(DisasContext *ctx, TCGv arg1, TCGv arg2) } GEN_LDX(lwbr, ld32ur, 0x16, 0x10, PPC_INTEGER); +#if defined(TARGET_PPC64) +/* ldbrx */ +static inline void gen_qemu_ld64ur(DisasContext *ctx, TCGv arg1, TCGv arg2) +{ + tcg_gen_qemu_ld64(arg1, arg2, ctx->mem_idx); + if (likely(!ctx->le_mode)) { + tcg_gen_bswap64_tl(arg1, arg1); + } +} +GEN_LDX_E(ldbr, ld64ur, 0x14, 0x10, PPC_NONE, PPC2_DBRX); +#endif /* TARGET_PPC64 */ + /* sthbrx */ static inline void gen_qemu_st16r(DisasContext *ctx, TCGv arg1, TCGv arg2) { @@ -2921,6 +2937,22 @@ static inline void gen_qemu_st32r(DisasContext *ctx, TCGv arg1, TCGv arg2) } GEN_STX(stwbr, st32r, 0x16, 0x14, PPC_INTEGER); +#if defined(TARGET_PPC64) +/* stdbrx */ +static inline void gen_qemu_st64r(DisasContext *ctx, TCGv arg1, TCGv arg2) +{ + if (likely(!ctx->le_mode)) { + TCGv t0 = tcg_temp_new(); + tcg_gen_bswap64_tl(t0, arg1); + tcg_gen_qemu_st64(t0, arg2, ctx->mem_idx); + tcg_temp_free(t0); + } else { + tcg_gen_qemu_st64(arg1, arg2, ctx->mem_idx); + } +} +GEN_STX_E(stdbr, st64r, 0x14, 0x14, PPC_NONE, PPC2_DBRX); +#endif /* TARGET_PPC64 */ + /*** Integer load and store multiple ***/ /* lmw */ @@ -8818,7 +8850,7 @@ GEN_FLOAT_B(neg, 0x08, 0x01, 0, PPC_FLOAT), #undef GEN_LD #undef GEN_LDU #undef GEN_LDUX -#undef GEN_LDX +#undef GEN_LDX_E #undef GEN_LDS #define GEN_LD(name, ldop, opc, type) \ GEN_HANDLER(name, opc, 0xFF, 0xFF, 0x00000000, type), @@ -8826,8 +8858,8 @@ GEN_HANDLER(name, opc, 0xFF, 0xFF, 0x00000000, type), GEN_HANDLER(name##u, opc, 0xFF, 0xFF, 0x00000000, type), #define GEN_LDUX(name, ldop, opc2, opc3, type) \ GEN_HANDLER(name##ux, 0x1F, opc2, opc3, 0x00000001, type), -#define GEN_LDX(name, ldop, opc2, opc3, type) \ -GEN_HANDLER(name##x, 0x1F, opc2, opc3, 0x00000001, type), +#define GEN_LDX_E(name, ldop, opc2, opc3, type, type2) \ +GEN_HANDLER_E(name##x, 0x1F, opc2, opc3, 0x00000001, type, type2), #define GEN_LDS(name, ldop, op, type) \ GEN_LD(name, ldop, op | 0x20, type) \ GEN_LDU(name, ldop, op | 0x21, type) \ @@ -8843,6 +8875,7 @@ GEN_LDUX(lwa, ld32s, 0x15, 0x0B, PPC_64B) GEN_LDX(lwa, ld32s, 0x15, 0x0A, PPC_64B) GEN_LDUX(ld, ld64, 0x15, 0x01, PPC_64B) GEN_LDX(ld, ld64, 0x15, 0x00, PPC_64B) +GEN_LDX_E(ldbr, ld64ur, 0x14, 0x10, PPC_NONE, PPC2_DBRX) #endif GEN_LDX(lhbr, ld16ur, 0x16, 0x18, PPC_INTEGER) GEN_LDX(lwbr, ld32ur, 0x16, 0x10, PPC_INTEGER) @@ -8850,7 +8883,7 @@ GEN_LDX(lwbr, ld32ur, 0x16, 0x10, PPC_INTEGER) #undef GEN_ST #undef GEN_STU #undef GEN_STUX -#undef GEN_STX +#undef GEN_STX_E #undef GEN_STS #define GEN_ST(name, stop, opc, type) \ GEN_HANDLER(name, opc, 0xFF, 0xFF, 0x00000000, type), @@ -8858,8 +8891,8 @@ GEN_HANDLER(name, opc, 0xFF, 0xFF, 0x00000000, type), GEN_HANDLER(stop##u, opc, 0xFF, 0xFF, 0x00000000, type), #define GEN_STUX(name, stop, opc2, opc3, type) \ GEN_HANDLER(name##ux, 0x1F, opc2, opc3, 0x00000001, type), -#define GEN_STX(name, stop, opc2, opc3, type) \ -GEN_HANDLER(name##x, 0x1F, opc2, opc3, 0x00000001, type), +#define GEN_STX_E(name, stop, opc2, opc3, type, type2) \ +GEN_HANDLER_E(name##x, 0x1F, opc2, opc3, 0x00000001, type, type2), #define GEN_STS(name, stop, op, type) \ GEN_ST(name, stop, op | 0x20, type) \ GEN_STU(name, stop, op | 0x21, type) \ @@ -8872,6 +8905,7 @@ GEN_STS(stw, st32, 0x04, PPC_INTEGER) #if defined(TARGET_PPC64) GEN_STUX(std, st64, 0x15, 0x05, PPC_64B) GEN_STX(std, st64, 0x15, 0x04, PPC_64B) +GEN_STX_E(stdbr, st64r, 0x14, 0x14, PPC_NONE, PPC2_DBRX) #endif GEN_STX(sthbr, st16r, 0x16, 0x1C, PPC_INTEGER) GEN_STX(stwbr, st32r, 0x16, 0x14, PPC_INTEGER) diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c index 1ec6f4248f..c707959e23 100644 --- a/target-ppc/translate_init.c +++ b/target-ppc/translate_init.c @@ -6571,7 +6571,7 @@ static void init_proc_970MP (CPUPPCState *env) PPC_64B | PPC_ALTIVEC | \ PPC_SEGMENT_64B | PPC_SLBI | \ PPC_POPCNTB | PPC_POPCNTWD) -#define POWERPC_INSNS2_POWER7 (PPC2_VSX | PPC2_DFP) +#define POWERPC_INSNS2_POWER7 (PPC2_VSX | PPC2_DFP | PPC2_DBRX) #define POWERPC_MSRM_POWER7 (0x800000000204FF36ULL) #define POWERPC_MMU_POWER7 (POWERPC_MMU_2_06) #define POWERPC_EXCP_POWER7 (POWERPC_EXCP_POWER7) From 53f649e863dd08b6ff212093556add42f456d14d Mon Sep 17 00:00:00 2001 From: David Gibson Date: Mon, 27 Feb 2012 17:18:10 +0000 Subject: [PATCH 06/16] pseries: Update SLOF firmware image This patch updates the SLOF firmware image used on the pseries machine. The new version adds support for Cirrus VGA and virtfs, as well as including a number of bugfixes. Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- pc-bios/README | 2 +- pc-bios/slof.bin | Bin 869584 -> 880496 bytes roms/SLOF | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pc-bios/README b/pc-bios/README index 5dce355f56..71f48711b2 100644 --- a/pc-bios/README +++ b/pc-bios/README @@ -17,7 +17,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/dgibson/SLOF, and the image currently in qemu is - built from git tag qemu-slof-20120111.1. + built from git tag qemu-slof-20120217. - sgabios (the Serial Graphics Adapter option ROM) provides a means for legacy x86 software to communicate with an attached serial console as diff --git a/pc-bios/slof.bin b/pc-bios/slof.bin index 8554f54b5773f0771eec28f6c3bc0dc17e063a47..449a7bb2afaf604f6c089612e99086df0800d7dc 100644 GIT binary patch delta 124949 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 diff --git a/roms/SLOF b/roms/SLOF index ab062ff3b3..d153364253 160000 --- a/roms/SLOF +++ b/roms/SLOF @@ -1 +1 @@ -Subproject commit ab062ff3b37c39649f2b0d94ed607adc6f6b3c7d +Subproject commit d153364253548d6cd91403711f84996e6a7dab31 From 323abebf9997f30fb357602e169ea6333ac20bc3 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Mon, 27 Feb 2012 17:18:11 +0000 Subject: [PATCH 07/16] pseries: Remove unused constant from PCI code The 'bars' constant array was used in experimental device allocation code which is no longer necessary now that we always run the SLOF firmware. This patch removes the now redundant variable. Signed-off-by: Alexey Kardashevskiy Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- hw/spapr_pci.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/hw/spapr_pci.c b/hw/spapr_pci.c index 374dcf8be7..3d5e50a1ee 100644 --- a/hw/spapr_pci.c +++ b/hw/spapr_pci.c @@ -32,13 +32,6 @@ #include "hw/pci_internals.h" -static const uint32_t bars[] = { - PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_1, - PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, - PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_5 - /*, PCI_ROM_ADDRESS*/ -}; - static PCIDevice *find_dev(sPAPREnvironment *spapr, uint64_t buid, uint32_t config_addr) { From 76ab9583cea5c742f32743cc65abc326719bd646 Mon Sep 17 00:00:00 2001 From: Alexey Kardashevskiy Date: Mon, 27 Feb 2012 17:18:12 +0000 Subject: [PATCH 08/16] pseries: Remove PCI device from PCI host bridge code The sPAPR PCI code defines a PCI device "spapr-pci-host-bridge-pci" which is never used. This came over from the earlier bridge driver we used as a template. Some other bridges appear on their own PCI bus as a device, but that is not true of pSeries bridges, which are pure host to PCI with no visible presence on the PCI side. Signed-off-by: Alexey Kardashevskiy Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- hw/spapr_pci.c | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/hw/spapr_pci.c b/hw/spapr_pci.c index 3d5e50a1ee..c06afacbb2 100644 --- a/hw/spapr_pci.c +++ b/hw/spapr_pci.c @@ -202,25 +202,6 @@ static int spapr_phb_init(SysBusDevice *s) return 0; } -static int spapr_main_pci_host_init(PCIDevice *d) -{ - return 0; -} - -static void spapr_main_pci_host_class_init(ObjectClass *klass, void *data) -{ - PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); - - k->init = spapr_main_pci_host_init; -} - -static TypeInfo spapr_main_pci_host_info = { - .name = "spapr-pci-host-bridge-pci", - .parent = TYPE_PCI_DEVICE, - .instance_size = sizeof(PCIDevice), - .class_init = spapr_main_pci_host_class_init, -}; - static void spapr_phb_class_init(ObjectClass *klass, void *data) { SysBusDeviceClass *sdc = SYS_BUS_DEVICE_CLASS(klass); @@ -238,7 +219,6 @@ static TypeInfo spapr_phb_info = { static void spapr_register_types(void) { type_register_static(&spapr_phb_info); - type_register_static(&spapr_main_pci_host_info); } type_init(spapr_register_types) From 2e06214f22e080be4a8a17b0fae3b4c03b0aa3ea Mon Sep 17 00:00:00 2001 From: Nathan Whitehorn Date: Sat, 3 Mar 2012 06:36:36 +0000 Subject: [PATCH 09/16] PPC: Add PIR register to POWER7 CPU The POWER7 emulation is missing the Processor Identification Register, mandatory in recent POWER CPUs, that is required for SMP on at least some operating systems (e.g. FreeBSD) to function properly. This patch copies the existing PIR code from the other CPUs that implement it. Signed-off-by: Nathan Whitehorn Signed-off-by: Alexander Graf --- target-ppc/translate_init.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c index c707959e23..5a958b931f 100644 --- a/target-ppc/translate_init.c +++ b/target-ppc/translate_init.c @@ -6588,6 +6588,11 @@ static void init_proc_POWER7 (CPUPPCState *env) gen_spr_7xx(env); /* Time base */ gen_tbl(env); + /* Processor identification */ + spr_register(env, SPR_PIR, "PIR", + SPR_NOACCESS, SPR_NOACCESS, + &spr_read_generic, &spr_write_pir, + 0x00000000); #if !defined(CONFIG_USER_ONLY) /* PURR & SPURR: Hack - treat these as aliases for the TB for now */ spr_register(env, SPR_PURR, "PURR", From eb6ea4b22e89d4c6ed510c7cfcd33d15be92733b Mon Sep 17 00:00:00 2001 From: Nathan Whitehorn Date: Fri, 9 Mar 2012 04:30:41 +0000 Subject: [PATCH 10/16] PPC: Fix large page support in TCG Fix large page support in TCG. The old code would overwrite the large page table entry with the fake 4 KB one generated here whenever the ref/change bits were updated, causing it to point to the wrong area of memory. Signed-off-by: Nathan Whitehorn Acked-by: David Gibson [agraf: fix whitespace, braces] Signed-off-by: Alexander Graf --- target-ppc/helper.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/target-ppc/helper.c b/target-ppc/helper.c index bd711b6e22..39dcc273e5 100644 --- a/target-ppc/helper.c +++ b/target-ppc/helper.c @@ -591,12 +591,6 @@ static inline int _find_pte(CPUPPCState *env, mmu_ctx_t *ctx, int is_64b, int h, pte1 = ldq_phys(env->htab_base + pteg_off + (i * 16) + 8); } - /* We have a TLB that saves 4K pages, so let's - * split a huge page to 4k chunks */ - if (target_page_bits != TARGET_PAGE_BITS) - pte1 |= (ctx->eaddr & (( 1 << target_page_bits ) - 1)) - & TARGET_PAGE_MASK; - r = pte64_check(ctx, pte0, pte1, h, rw, type); LOG_MMU("Load pte from " TARGET_FMT_lx " => " TARGET_FMT_lx " " TARGET_FMT_lx " %d %d %d " TARGET_FMT_lx "\n", @@ -672,6 +666,12 @@ static inline int _find_pte(CPUPPCState *env, mmu_ctx_t *ctx, int is_64b, int h, } } + /* We have a TLB that saves 4K pages, so let's + * split a huge page to 4k chunks */ + if (target_page_bits != TARGET_PAGE_BITS) { + ctx->raddr |= (ctx->eaddr & ((1 << target_page_bits) - 1)) + & TARGET_PAGE_MASK; + } return ret; } From d07fee7e8ad9d3611404fa145270d3b885b2772a Mon Sep 17 00:00:00 2001 From: David Gibson Date: Wed, 7 Mar 2012 15:12:21 +0000 Subject: [PATCH 11/16] pseries: Add support for level interrupts to XICS The pseries "xics" interrupt controller, like most interrupt controllers can support both message (i.e. edge sensitive) interrupts and level sensitive interrupts, but it needs to know which are which. When I implemented the xics emulation for qemu, the only devices we supported were the PAPR virtual IO devices. These devices only use message interrupts, so they were the only ones I implemented in xics. Since then, however, we have added support for PCI devices, which use level sensitive interrupts. It turns out the message interrupt logic still actually works most of the time for these, but there are circumstances where we can lost interrupts due to the incorrect interrupt logic. This patch, therefore, implements the correct xics level-sensitive interrupt logic. The type of the interrupt is set when a device allocates a new xics interrupt. Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- hw/spapr.c | 5 +- hw/spapr.h | 13 ++++- hw/spapr_pci.c | 2 +- hw/spapr_vio.c | 2 +- hw/xics.c | 145 +++++++++++++++++++++++++++++++++++-------------- hw/xics.h | 8 ++- 6 files changed, 127 insertions(+), 48 deletions(-) diff --git a/hw/spapr.c b/hw/spapr.c index 3719e0e4a7..bfaf260d54 100644 --- a/hw/spapr.c +++ b/hw/spapr.c @@ -83,7 +83,8 @@ sPAPREnvironment *spapr; -qemu_irq spapr_allocate_irq(uint32_t hint, uint32_t *irq_num) +qemu_irq spapr_allocate_irq(uint32_t hint, uint32_t *irq_num, + enum xics_irq_type type) { uint32_t irq; qemu_irq qirq; @@ -95,7 +96,7 @@ qemu_irq spapr_allocate_irq(uint32_t hint, uint32_t *irq_num) irq = spapr->next_irq++; } - qirq = xics_find_qirq(spapr->icp, irq); + qirq = xics_assign_irq(spapr->icp, irq, type); if (!qirq) { return NULL; } diff --git a/hw/spapr.h b/hw/spapr.h index a41641fdde..11160b02da 100644 --- a/hw/spapr.h +++ b/hw/spapr.h @@ -286,7 +286,18 @@ void spapr_register_hypercall(target_ulong opcode, spapr_hcall_fn fn); target_ulong spapr_hypercall(CPUPPCState *env, target_ulong opcode, target_ulong *args); -qemu_irq spapr_allocate_irq(uint32_t hint, uint32_t *irq_num); +qemu_irq spapr_allocate_irq(uint32_t hint, uint32_t *irq_num, + enum xics_irq_type type); + +static inline qemu_irq spapr_allocate_msi(uint32_t hint, uint32_t *irq_num) +{ + return spapr_allocate_irq(hint, irq_num, XICS_MSI); +} + +static inline qemu_irq spapr_allocate_lsi(uint32_t hint, uint32_t *irq_num) +{ + return spapr_allocate_irq(hint, irq_num, XICS_LSI); +} static inline uint32_t rtas_ld(target_ulong phys, int n) { diff --git a/hw/spapr_pci.c b/hw/spapr_pci.c index c06afacbb2..233250fac6 100644 --- a/hw/spapr_pci.c +++ b/hw/spapr_pci.c @@ -190,7 +190,7 @@ static int spapr_phb_init(SysBusDevice *s) qemu_irq qirq; uint32_t num; - qirq = spapr_allocate_irq(0, &num); + qirq = spapr_allocate_lsi(0, &num); if (!qirq) { return -1; } diff --git a/hw/spapr_vio.c b/hw/spapr_vio.c index 2fb3cee266..dbf5a9017e 100644 --- a/hw/spapr_vio.c +++ b/hw/spapr_vio.c @@ -670,7 +670,7 @@ static int spapr_vio_busdev_init(DeviceState *qdev) dev->qdev.id = id; } - dev->qirq = spapr_allocate_irq(dev->vio_irq_num, &dev->vio_irq_num); + dev->qirq = spapr_allocate_msi(dev->vio_irq_num, &dev->vio_irq_num); if (!dev->qirq) { return -1; } diff --git a/hw/xics.c b/hw/xics.c index f7963f3096..668a0d6484 100644 --- a/hw/xics.c +++ b/hw/xics.c @@ -132,9 +132,9 @@ static void icp_eoi(struct icp_state *icp, int server, uint32_t xirr) { struct icp_server_state *ss = icp->ss + server; - ics_eoi(icp->ics, xirr & XISR_MASK); /* Send EOI -> ICS */ ss->xirr = (ss->xirr & ~CPPR_MASK) | (xirr & CPPR_MASK); + ics_eoi(icp->ics, xirr & XISR_MASK); if (!XISR(ss)) { icp_resend(icp, server); } @@ -165,8 +165,9 @@ struct ics_irq_state { int server; uint8_t priority; uint8_t saved_priority; - /* int pending:1; */ - /* int presented:1; */ + enum xics_irq_type type; + int asserted:1; + int sent:1; int rejected:1; int masked_pending:1; }; @@ -185,9 +186,32 @@ static int ics_valid_irq(struct ics_state *ics, uint32_t nr) && (nr < (ics->offset + ics->nr_irqs)); } -static void ics_set_irq_msi(void *opaque, int srcno, int val) +static void resend_msi(struct ics_state *ics, int srcno) +{ + struct ics_irq_state *irq = ics->irqs + srcno; + + /* FIXME: filter by server#? */ + if (irq->rejected) { + irq->rejected = 0; + if (irq->priority != 0xff) { + icp_irq(ics->icp, irq->server, srcno + ics->offset, + irq->priority); + } + } +} + +static void resend_lsi(struct ics_state *ics, int srcno) +{ + struct ics_irq_state *irq = ics->irqs + srcno; + + if ((irq->priority != 0xff) && irq->asserted && !irq->sent) { + irq->sent = 1; + icp_irq(ics->icp, irq->server, srcno + ics->offset, irq->priority); + } +} + +static void set_irq_msi(struct ics_state *ics, int srcno, int val) { - struct ics_state *ics = (struct ics_state *)opaque; struct ics_irq_state *irq = ics->irqs + srcno; if (val) { @@ -200,14 +224,68 @@ static void ics_set_irq_msi(void *opaque, int srcno, int val) } } -static void ics_reject_msi(struct ics_state *ics, int nr) +static void set_irq_lsi(struct ics_state *ics, int srcno, int val) +{ + struct ics_irq_state *irq = ics->irqs + srcno; + + irq->asserted = val; + resend_lsi(ics, srcno); +} + +static void ics_set_irq(void *opaque, int srcno, int val) +{ + struct ics_state *ics = (struct ics_state *)opaque; + struct ics_irq_state *irq = ics->irqs + srcno; + + if (irq->type == XICS_LSI) { + set_irq_lsi(ics, srcno, val); + } else { + set_irq_msi(ics, srcno, val); + } +} + +static void write_xive_msi(struct ics_state *ics, int srcno) +{ + struct ics_irq_state *irq = ics->irqs + srcno; + + if (!irq->masked_pending || (irq->priority == 0xff)) { + return; + } + + irq->masked_pending = 0; + icp_irq(ics->icp, irq->server, srcno + ics->offset, irq->priority); +} + +static void write_xive_lsi(struct ics_state *ics, int srcno) +{ + resend_lsi(ics, srcno); +} + +static void ics_write_xive(struct ics_state *ics, int nr, int server, + uint8_t priority) +{ + int srcno = nr - ics->offset; + struct ics_irq_state *irq = ics->irqs + srcno; + + irq->server = server; + irq->priority = priority; + + if (irq->type == XICS_LSI) { + write_xive_lsi(ics, srcno); + } else { + write_xive_msi(ics, srcno); + } +} + +static void ics_reject(struct ics_state *ics, int nr) { struct ics_irq_state *irq = ics->irqs + nr - ics->offset; - irq->rejected = 1; + irq->rejected = 1; /* Irrelevant but harmless for LSI */ + irq->sent = 0; /* Irrelevant but harmless for MSI */ } -static void ics_resend_msi(struct ics_state *ics) +static void ics_resend(struct ics_state *ics) { int i; @@ -215,56 +293,39 @@ static void ics_resend_msi(struct ics_state *ics) struct ics_irq_state *irq = ics->irqs + i; /* FIXME: filter by server#? */ - if (irq->rejected) { - irq->rejected = 0; - if (irq->priority != 0xff) { - icp_irq(ics->icp, irq->server, i + ics->offset, irq->priority); - } + if (irq->type == XICS_LSI) { + resend_lsi(ics, i); + } else { + resend_msi(ics, i); } } } -static void ics_write_xive_msi(struct ics_state *ics, int nr, int server, - uint8_t priority) -{ - struct ics_irq_state *irq = ics->irqs + nr - ics->offset; - - irq->server = server; - irq->priority = priority; - - if (!irq->masked_pending || (priority == 0xff)) { - return; - } - - irq->masked_pending = 0; - icp_irq(ics->icp, server, nr, priority); -} - -static void ics_reject(struct ics_state *ics, int nr) -{ - ics_reject_msi(ics, nr); -} - -static void ics_resend(struct ics_state *ics) -{ - ics_resend_msi(ics); -} - static void ics_eoi(struct ics_state *ics, int nr) { + int srcno = nr - ics->offset; + struct ics_irq_state *irq = ics->irqs + srcno; + + if (irq->type == XICS_LSI) { + irq->sent = 0; + } } /* * Exported functions */ -qemu_irq xics_find_qirq(struct icp_state *icp, int irq) +qemu_irq xics_assign_irq(struct icp_state *icp, int irq, + enum xics_irq_type type) { if ((irq < icp->ics->offset) || (irq >= (icp->ics->offset + icp->ics->nr_irqs))) { return NULL; } + assert((type == XICS_MSI) || (type == XICS_LSI)); + + icp->ics->irqs[irq - icp->ics->offset].type = type; return icp->ics->qirqs[irq - icp->ics->offset]; } @@ -332,7 +393,7 @@ static void rtas_set_xive(sPAPREnvironment *spapr, uint32_t token, return; } - ics_write_xive_msi(ics, nr, server, priority); + ics_write_xive(ics, nr, server, priority); rtas_st(rets, 0, 0); /* Success */ } @@ -477,7 +538,7 @@ struct icp_state *xics_system_init(int nr_irqs) ics->irqs[i].saved_priority = 0xff; } - ics->qirqs = qemu_allocate_irqs(ics_set_irq_msi, ics, nr_irqs); + ics->qirqs = qemu_allocate_irqs(ics_set_irq, ics, nr_irqs); spapr_register_hypercall(H_CPPR, h_cppr); spapr_register_hypercall(H_IPI, h_ipi); diff --git a/hw/xics.h b/hw/xics.h index 83c1182598..208015939c 100644 --- a/hw/xics.h +++ b/hw/xics.h @@ -31,7 +31,13 @@ struct icp_state; -qemu_irq xics_find_qirq(struct icp_state *icp, int irq); +enum xics_irq_type { + XICS_MSI, /* Message-signalled (edge) interrupt */ + XICS_LSI, /* Level-signalled interrupt */ +}; + +qemu_irq xics_assign_irq(struct icp_state *icp, int irq, + enum xics_irq_type type); struct icp_state *xics_system_init(int nr_irqs); From 6bbc5ed163d0eb8e3268ec81742a0d4f4f0bfc22 Mon Sep 17 00:00:00 2001 From: Meador Inge Date: Thu, 23 Feb 2012 03:44:14 +0000 Subject: [PATCH 12/16] ppc: Correctly define POWERPC_INSNS2_DEFAULT 'POWERPC_INSNS2_DEFAULT' was defined incorrectly which was causing the opcode table creation code to erroneously register 'eieio' and 'mbar' for the "default" processor: ** ERROR: opcode 1a already assigned in opcode table 16 *** ERROR: unable to insert opcode [1f-16-1a] *** ERROR initializing PowerPC instruction 0x1f 0x16 0x1a Signed-off-by: Meador Inge Signed-off-by: Alexander Graf --- target-ppc/translate_init.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c index 5a958b931f..367eefaf9e 100644 --- a/target-ppc/translate_init.c +++ b/target-ppc/translate_init.c @@ -6718,7 +6718,7 @@ static void init_proc_620 (CPUPPCState *env) #if defined (TARGET_PPC64) && 0 // XXX: TODO #define CPU_POWERPC_DEFAULT CPU_POWERPC_PPC64 #define POWERPC_INSNS_DEFAULT POWERPC_INSNS_PPC64 -#define POWERPC_INSNS2_DEFAULT POWERPC_INSNS_PPC64 +#define POWERPC_INSNS2_DEFAULT POWERPC_INSNS2_PPC64 #define POWERPC_MSRM_DEFAULT POWERPC_MSRM_PPC64 #define POWERPC_MMU_DEFAULT POWERPC_MMU_PPC64 #define POWERPC_EXCP_DEFAULT POWERPC_EXCP_PPC64 @@ -6730,7 +6730,7 @@ static void init_proc_620 (CPUPPCState *env) #else #define CPU_POWERPC_DEFAULT CPU_POWERPC_PPC32 #define POWERPC_INSNS_DEFAULT POWERPC_INSNS_PPC32 -#define POWERPC_INSNS2_DEFAULT POWERPC_INSNS_PPC32 +#define POWERPC_INSNS2_DEFAULT POWERPC_INSNS2_PPC32 #define POWERPC_MSRM_DEFAULT POWERPC_MSRM_PPC32 #define POWERPC_MMU_DEFAULT POWERPC_MMU_PPC32 #define POWERPC_EXCP_DEFAULT POWERPC_EXCP_PPC32 From 92e4b519e0808948ae4bc710fb1db7d3cc2245a1 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Wed, 7 Mar 2012 14:41:09 +0000 Subject: [PATCH 13/16] kvm: Comparison with ioctl number macros needs to be unsigned In kvm-all.c we store an ioctl cmd number in the irqchip_inject_ioctl field of KVMState, which has type 'int'. This seems to make sense since the ioctl() man page says that the cmd parameter has type int. However, the kernel treats ioctl numbers as unsigned - sys_ioctl() takes an unsigned int, and the macros which generate ioctl numbers expand to unsigned expressions. Furthermore, some ioctls (IOC_READ ioctls on x86 and IOC_WRITE ioctls on powerpc) have bit 31 set, and so would be negative if interpreted as an int. This has the surprising and compile-breaking consequence that in kvm_irqchip_set_irq() where we do: return (s->irqchip_inject_ioctl == KVM_IRQ_LINE) ? 1 : event.status; We will get a "comparison is always false due to limited range of data type" warning from gcc if KVM_IRQ_LINE is one of the bit-31-set ioctls, which it is on powerpc. So, despite the fact that the man page and posix say ioctl numbers are signed, they're actually unsigned. The kernel uses unsigned, the glibc header uses unsigned long, and FreeBSD, NetBSD and OSX also use unsigned long ioctl numbers in the code. Therefore, this patch changes the variable to be unsigned, fixing the compile. Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- kvm-all.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kvm-all.c b/kvm-all.c index 42e5e23d5d..ba2cee10f2 100644 --- a/kvm-all.c +++ b/kvm-all.c @@ -79,7 +79,10 @@ struct KVMState int pit_state2; int xsave, xcrs; int many_ioeventfds; - int irqchip_inject_ioctl; + /* The man page (and posix) say ioctl numbers are signed int, but + * they're not. Linux, glibc and *BSD all treat ioctl numbers as + * unsigned, and treating them as signed here can break things */ + unsigned irqchip_inject_ioctl; #ifdef KVM_CAP_IRQ_ROUTING struct kvm_irq_routing *irq_routes; int nr_allocated_irq_routes; From 29979a8d2596d33b474c11efb376ed47ba1d44d3 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 14 Mar 2012 00:13:22 +0100 Subject: [PATCH 14/16] PPC: KVM: Synchronize regs on CPU dump When we dump the CPU registers, there's a certain chance they haven't been synchronized with KVM yet, so we have to manually trigger that. This aligns the code with x86 and fixes a bug where the register state was bogus on invalid/unknown kvm exit reasons. Reported-by: Benjamin Herrenschmidt Signed-off-by: Alexander Graf --- target-ppc/translate.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/target-ppc/translate.c b/target-ppc/translate.c index 4722a09020..c9a503a1db 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -9319,6 +9319,8 @@ void cpu_dump_state (CPUPPCState *env, FILE *f, fprintf_function cpu_fprintf, int i; + cpu_synchronize_state(env); + cpu_fprintf(f, "NIP " TARGET_FMT_lx " LR " TARGET_FMT_lx " CTR " TARGET_FMT_lx " XER " TARGET_FMT_lx "\n", env->nip, env->lr, env->ctr, env->xer); From 298a971024534e9ab6c7b57845bbbd8188867d7a Mon Sep 17 00:00:00 2001 From: David Gibson Date: Mon, 12 Mar 2012 17:50:24 +0000 Subject: [PATCH 15/16] pseries: Configure PCI bridge using properties MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently, the function spapr_create_phb() uses its parameters to initialize the correct memory windows for the new PCI Host Bridge (PHB). This is not the way things are supposed to be done with qdevs, and means you can't create extra PHBs easily using -device. Since pSeries machines can and do have many PHBs with various configurations, this is a real limitation, not just a theoretical. This patch, therefore, alters the PHB initialization code to use qdev properties to set these parameters of the new bridge, moving most of the code from spapr_create_phb() to spapr_phb_init(). While we're at it, we change the naming of each PCI bus and its associated memory regions to be less arbitrary and make it easier to relate the guest and qemu views of memory to each other. Signed-off-by: Alexey Kardashevskiy Signed-off-by: David Gibson Reviewed-by: Andreas Färber Signed-off-by: Alexander Graf --- hw/spapr_pci.c | 166 +++++++++++++++++++++++++++---------------------- hw/spapr_pci.h | 4 +- 2 files changed, 94 insertions(+), 76 deletions(-) diff --git a/hw/spapr_pci.c b/hw/spapr_pci.c index 233250fac6..e7ef551c1c 100644 --- a/hw/spapr_pci.c +++ b/hw/spapr_pci.c @@ -180,49 +180,6 @@ static void pci_spapr_set_irq(void *opaque, int irq_num, int level) qemu_set_irq(phb->lsi_table[irq_num].qirq, level); } -static int spapr_phb_init(SysBusDevice *s) -{ - sPAPRPHBState *phb = FROM_SYSBUS(sPAPRPHBState, s); - int i; - - /* Initialize the LSI table */ - for (i = 0; i < SPAPR_PCI_NUM_LSI; i++) { - qemu_irq qirq; - uint32_t num; - - qirq = spapr_allocate_lsi(0, &num); - if (!qirq) { - return -1; - } - - phb->lsi_table[i].dt_irq = num; - phb->lsi_table[i].qirq = qirq; - } - - return 0; -} - -static void spapr_phb_class_init(ObjectClass *klass, void *data) -{ - SysBusDeviceClass *sdc = SYS_BUS_DEVICE_CLASS(klass); - - sdc->init = spapr_phb_init; -} - -static TypeInfo spapr_phb_info = { - .name = "spapr-pci-host-bridge", - .parent = TYPE_SYS_BUS_DEVICE, - .instance_size = sizeof(sPAPRPHBState), - .class_init = spapr_phb_class_init, -}; - -static void spapr_register_types(void) -{ - type_register_static(&spapr_phb_info); -} - -type_init(spapr_register_types) - static uint64_t spapr_io_read(void *opaque, target_phys_addr_t addr, unsigned size) { @@ -260,35 +217,29 @@ static const MemoryRegionOps spapr_io_ops = { .write = spapr_io_write }; -void spapr_create_phb(sPAPREnvironment *spapr, - const char *busname, uint64_t buid, - uint64_t mem_win_addr, uint64_t mem_win_size, - uint64_t io_win_addr) +/* + * PHB PCI device + */ +static int spapr_phb_init(SysBusDevice *s) { - DeviceState *dev; - SysBusDevice *s; - sPAPRPHBState *phb; + sPAPRPHBState *phb = FROM_SYSBUS(sPAPRPHBState, s); + char *namebuf; + int i; PCIBus *bus; - char namebuf[strlen(busname)+11]; - dev = qdev_create(NULL, "spapr-pci-host-bridge"); - qdev_init_nofail(dev); - s = sysbus_from_qdev(dev); - phb = FROM_SYSBUS(sPAPRPHBState, s); + phb->dtbusname = g_strdup_printf("pci@%" PRIx64, phb->buid); + namebuf = alloca(strlen(phb->dtbusname) + 32); - phb->mem_win_addr = mem_win_addr; - - sprintf(namebuf, "%s-mem", busname); + /* Initialize memory regions */ + sprintf(namebuf, "%s.mmio", phb->dtbusname); memory_region_init(&phb->memspace, namebuf, INT64_MAX); - sprintf(namebuf, "%s-memwindow", busname); + sprintf(namebuf, "%s.mmio-alias", phb->dtbusname); memory_region_init_alias(&phb->memwindow, namebuf, &phb->memspace, - SPAPR_PCI_MEM_WIN_BUS_OFFSET, mem_win_size); - memory_region_add_subregion(get_system_memory(), mem_win_addr, + SPAPR_PCI_MEM_WIN_BUS_OFFSET, phb->mem_win_size); + memory_region_add_subregion(get_system_memory(), phb->mem_win_addr, &phb->memwindow); - phb->io_win_addr = io_win_addr; - /* On ppc, we only have MMIO no specific IO space from the CPU * perspective. In theory we ought to be able to embed the PCI IO * memory region direction in the system memory space. However, @@ -297,33 +248,92 @@ void spapr_create_phb(sPAPREnvironment *spapr, * system io address space. This hack to bounce things via * system_io works around the problem until all the users of * old_portion are updated */ - sprintf(namebuf, "%s-io", busname); + sprintf(namebuf, "%s.io", phb->dtbusname); memory_region_init(&phb->iospace, namebuf, SPAPR_PCI_IO_WIN_SIZE); /* FIXME: fix to support multiple PHBs */ memory_region_add_subregion(get_system_io(), 0, &phb->iospace); - sprintf(namebuf, "%s-iowindow", busname); + sprintf(namebuf, "%s.io-alias", phb->dtbusname); memory_region_init_io(&phb->iowindow, &spapr_io_ops, phb, namebuf, SPAPR_PCI_IO_WIN_SIZE); - memory_region_add_subregion(get_system_memory(), io_win_addr, + memory_region_add_subregion(get_system_memory(), phb->io_win_addr, &phb->iowindow); - phb->host_state.bus = bus = pci_register_bus(&phb->busdev.qdev, busname, - pci_spapr_set_irq, - pci_spapr_map_irq, - phb, - &phb->memspace, &phb->iospace, - PCI_DEVFN(0, 0), - SPAPR_PCI_NUM_LSI); + bus = pci_register_bus(&phb->busdev.qdev, + phb->busname ? phb->busname : phb->dtbusname, + pci_spapr_set_irq, pci_spapr_map_irq, phb, + &phb->memspace, &phb->iospace, + PCI_DEVFN(0, 0), SPAPR_PCI_NUM_LSI); + phb->host_state.bus = bus; + + QLIST_INSERT_HEAD(&spapr->phbs, phb, list); + + /* Initialize the LSI table */ + for (i = 0; i < SPAPR_PCI_NUM_LSI; i++) { + qemu_irq qirq; + uint32_t num; + + qirq = spapr_allocate_lsi(0, &num); + if (!qirq) { + return -1; + } + + phb->lsi_table[i].dt_irq = num; + phb->lsi_table[i].qirq = qirq; + } + + return 0; +} + +static Property spapr_phb_properties[] = { + DEFINE_PROP_HEX64("buid", sPAPRPHBState, buid, 0), + DEFINE_PROP_STRING("busname", sPAPRPHBState, busname), + DEFINE_PROP_HEX64("mem_win_addr", sPAPRPHBState, mem_win_addr, 0), + DEFINE_PROP_HEX64("mem_win_size", sPAPRPHBState, mem_win_size, 0x20000000), + DEFINE_PROP_HEX64("io_win_addr", sPAPRPHBState, io_win_addr, 0), + DEFINE_PROP_HEX64("io_win_size", sPAPRPHBState, io_win_size, 0x10000), + DEFINE_PROP_END_OF_LIST(), +}; + +static void spapr_phb_class_init(ObjectClass *klass, void *data) +{ + SysBusDeviceClass *sdc = SYS_BUS_DEVICE_CLASS(klass); + DeviceClass *dc = DEVICE_CLASS(klass); + + sdc->init = spapr_phb_init; + dc->props = spapr_phb_properties; spapr_rtas_register("read-pci-config", rtas_read_pci_config); spapr_rtas_register("write-pci-config", rtas_write_pci_config); spapr_rtas_register("ibm,read-pci-config", rtas_ibm_read_pci_config); spapr_rtas_register("ibm,write-pci-config", rtas_ibm_write_pci_config); +} - QLIST_INSERT_HEAD(&spapr->phbs, phb, list); +static TypeInfo spapr_phb_info = { + .name = "spapr-pci-host-bridge", + .parent = TYPE_SYS_BUS_DEVICE, + .instance_size = sizeof(sPAPRPHBState), + .class_init = spapr_phb_class_init, +}; - /* pci_bus_set_mem_base(bus, mem_va_start - SPAPR_PCI_MEM_BAR_START); */ +void spapr_create_phb(sPAPREnvironment *spapr, + const char *busname, uint64_t buid, + uint64_t mem_win_addr, uint64_t mem_win_size, + uint64_t io_win_addr) +{ + DeviceState *dev; + + dev = qdev_create(NULL, spapr_phb_info.name); + + if (busname) { + qdev_prop_set_string(dev, "busname", g_strdup(busname)); + } + qdev_prop_set_uint64(dev, "buid", buid); + qdev_prop_set_uint64(dev, "mem_win_addr", mem_win_addr); + qdev_prop_set_uint64(dev, "mem_win_size", mem_win_size); + qdev_prop_set_uint64(dev, "io_win_addr", io_win_addr); + + qdev_init_nofail(dev); } /* Macros to operate with address in OF binding to PCI */ @@ -415,3 +425,9 @@ int spapr_populate_pci_devices(sPAPRPHBState *phb, return 0; } + +static void register_types(void) +{ + type_register_static(&spapr_phb_info); +} +type_init(register_types) diff --git a/hw/spapr_pci.h b/hw/spapr_pci.h index 213340c915..039f85bd4b 100644 --- a/hw/spapr_pci.h +++ b/hw/spapr_pci.h @@ -33,9 +33,11 @@ typedef struct sPAPRPHBState { PCIHostState host_state; uint64_t buid; + char *busname; + char *dtbusname; MemoryRegion memspace, iospace; - target_phys_addr_t mem_win_addr, io_win_addr; + target_phys_addr_t mem_win_addr, mem_win_size, io_win_addr, io_win_size; MemoryRegion memwindow, iowindow; struct { From 38ae51a804a6ad2baec3e45ecb1571583b312441 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 14 Mar 2012 20:17:07 +0100 Subject: [PATCH 16/16] PPC: Fix openpic with relative memregions After commit 5312bd8b3152 we got memory region relative offsets into our mmio callbacks instead of page boundary based offsets. This broke the OpenPIC emulation which expected offsets to be on page boundary and substracted its region offset manually. This patch gets rid of that manual substraction and lets the memory api do its magic instead. Signed-off-by: Alexander Graf --- hw/openpic.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/hw/openpic.c b/hw/openpic.c index 280b7a9bbb..58ef871f68 100644 --- a/hw/openpic.c +++ b/hw/openpic.c @@ -713,7 +713,7 @@ static void openpic_timer_write (void *opaque, uint32_t addr, uint32_t val) DPRINTF("%s: addr %08x <= %08x\n", __func__, addr, val); if (addr & 0xF) return; - addr -= 0x1100; + addr -= 0x10; addr &= 0xFFFF; idx = (addr & 0xFFF0) >> 6; addr = addr & 0x30; @@ -746,7 +746,7 @@ static uint32_t openpic_timer_read (void *opaque, uint32_t addr) retval = 0xFFFFFFFF; if (addr & 0xF) return retval; - addr -= 0x1100; + addr -= 0x10; addr &= 0xFFFF; idx = (addr & 0xFFF0) >> 6; addr = addr & 0x30; @@ -1361,7 +1361,6 @@ static void mpic_src_ext_write (void *opaque, target_phys_addr_t addr, if (addr & 0xF) return; - addr -= MPIC_EXT_REG_START & (OPENPIC_PAGE_SIZE - 1); if (addr < MPIC_EXT_REG_SIZE) { idx += (addr & 0xFFF0) >> 5; if (addr & 0x10) { @@ -1385,7 +1384,6 @@ static uint32_t mpic_src_ext_read (void *opaque, target_phys_addr_t addr) if (addr & 0xF) return retval; - addr -= MPIC_EXT_REG_START & (OPENPIC_PAGE_SIZE - 1); if (addr < MPIC_EXT_REG_SIZE) { idx += (addr & 0xFFF0) >> 5; if (addr & 0x10) { @@ -1411,7 +1409,6 @@ static void mpic_src_int_write (void *opaque, target_phys_addr_t addr, if (addr & 0xF) return; - addr -= MPIC_INT_REG_START & (OPENPIC_PAGE_SIZE - 1); if (addr < MPIC_INT_REG_SIZE) { idx += (addr & 0xFFF0) >> 5; if (addr & 0x10) { @@ -1435,7 +1432,6 @@ static uint32_t mpic_src_int_read (void *opaque, target_phys_addr_t addr) if (addr & 0xF) return retval; - addr -= MPIC_INT_REG_START & (OPENPIC_PAGE_SIZE - 1); if (addr < MPIC_INT_REG_SIZE) { idx += (addr & 0xFFF0) >> 5; if (addr & 0x10) { @@ -1461,7 +1457,6 @@ static void mpic_src_msg_write (void *opaque, target_phys_addr_t addr, if (addr & 0xF) return; - addr -= MPIC_MSG_REG_START & (OPENPIC_PAGE_SIZE - 1); if (addr < MPIC_MSG_REG_SIZE) { idx += (addr & 0xFFF0) >> 5; if (addr & 0x10) { @@ -1485,7 +1480,6 @@ static uint32_t mpic_src_msg_read (void *opaque, target_phys_addr_t addr) if (addr & 0xF) return retval; - addr -= MPIC_MSG_REG_START & (OPENPIC_PAGE_SIZE - 1); if (addr < MPIC_MSG_REG_SIZE) { idx += (addr & 0xFFF0) >> 5; if (addr & 0x10) { @@ -1511,7 +1505,6 @@ static void mpic_src_msi_write (void *opaque, target_phys_addr_t addr, if (addr & 0xF) return; - addr -= MPIC_MSI_REG_START & (OPENPIC_PAGE_SIZE - 1); if (addr < MPIC_MSI_REG_SIZE) { idx += (addr & 0xFFF0) >> 5; if (addr & 0x10) { @@ -1534,7 +1527,6 @@ static uint32_t mpic_src_msi_read (void *opaque, target_phys_addr_t addr) if (addr & 0xF) return retval; - addr -= MPIC_MSI_REG_START & (OPENPIC_PAGE_SIZE - 1); if (addr < MPIC_MSI_REG_SIZE) { idx += (addr & 0xFFF0) >> 5; if (addr & 0x10) {