qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [0/7] pseries and Power updates
@ 2012-02-28  3:18 David Gibson
  2012-02-28  3:18 ` [Qemu-devel] [PATCH 1/7] pseries: Don't try to munmap() a malloc()ed TCE table David Gibson
                   ` (7 more replies)
  0 siblings, 8 replies; 13+ messages in thread
From: David Gibson @ 2012-02-28  3:18 UTC (permalink / raw)
  To: agraf; +Cc: qemu-ppc, qemu-devel, anthony

This series contains a number of bugfixes and enhancements for the
pseries machine, including a significant cleanup of the pseries PCI
code.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Qemu-devel] [PATCH 1/7] pseries: Don't try to munmap() a malloc()ed TCE table
  2012-02-28  3:18 [Qemu-devel] [0/7] pseries and Power updates David Gibson
@ 2012-02-28  3:18 ` David Gibson
  2012-02-28  3:18 ` [Qemu-devel] [PATCH 2/7] PPC64: Add support for ldbrx and stdbrx instructions David Gibson
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 13+ messages in thread
From: David Gibson @ 2012-02-28  3:18 UTC (permalink / raw)
  To: agraf; +Cc: qemu-ppc, qemu-devel, anthony, David Gibson

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 <benh@kernel.crashing.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 target-ppc/kvm.c |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
index 50cfa02..90c6941 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 */
     }
 
-- 
1.7.9

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [Qemu-devel] [PATCH 2/7] PPC64: Add support for ldbrx and stdbrx instructions
  2012-02-28  3:18 [Qemu-devel] [0/7] pseries and Power updates David Gibson
  2012-02-28  3:18 ` [Qemu-devel] [PATCH 1/7] pseries: Don't try to munmap() a malloc()ed TCE table David Gibson
@ 2012-02-28  3:18 ` David Gibson
  2012-02-28  3:18 ` [Qemu-devel] [PATCH 3/7] pseries: Add support for level interrupts to XICS David Gibson
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 13+ messages in thread
From: David Gibson @ 2012-02-28  3:18 UTC (permalink / raw)
  To: agraf; +Cc: David Gibson, qemu-ppc, qemu-devel, anthony, Thomas Huth

From: Thomas Huth <thuth@linux.vnet.ibm.com>

These instructions for loading and storing byte-swapped 64-bit values have
been introduced in PowerISA 2.06.

Signed-off-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 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 fbcf488..036b3b6 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 b2780db..2728941 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -2656,7 +2656,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;                                                                  \
@@ -2666,6 +2666,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);                                          \
@@ -2799,8 +2801,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);                                     \
@@ -2809,6 +2811,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);                                          \
@@ -2897,6 +2901,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)
 {
@@ -2927,6 +2943,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 */
@@ -8824,7 +8856,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),
@@ -8832,8 +8864,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)                                          \
@@ -8849,6 +8881,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)
@@ -8856,7 +8889,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),
@@ -8864,8 +8897,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)                                          \
@@ -8878,6 +8911,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 6253076..087f2f0 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)
-- 
1.7.9

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [Qemu-devel] [PATCH 3/7] pseries: Add support for level interrupts to XICS
  2012-02-28  3:18 [Qemu-devel] [0/7] pseries and Power updates David Gibson
  2012-02-28  3:18 ` [Qemu-devel] [PATCH 1/7] pseries: Don't try to munmap() a malloc()ed TCE table David Gibson
  2012-02-28  3:18 ` [Qemu-devel] [PATCH 2/7] PPC64: Add support for ldbrx and stdbrx instructions David Gibson
@ 2012-02-28  3:18 ` David Gibson
  2012-03-06 23:30   ` Alexander Graf
  2012-02-28  3:18 ` [Qemu-devel] [PATCH 4/7] pseries: Update SLOF firmware image David Gibson
                   ` (4 subsequent siblings)
  7 siblings, 1 reply; 13+ messages in thread
From: David Gibson @ 2012-02-28  3:18 UTC (permalink / raw)
  To: agraf; +Cc: qemu-ppc, qemu-devel, anthony, David Gibson

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 <david@gibson@.dropbear.id.au>
---
 hw/spapr.c     |    4 +-
 hw/spapr.h     |   12 +++++-
 hw/spapr_pci.c |    2 +-
 hw/spapr_vio.c |    2 +-
 hw/xics.c      |  122 +++++++++++++++++++++++++++++++++++++++++---------------
 hw/xics.h      |    2 +-
 6 files changed, 106 insertions(+), 38 deletions(-)

diff --git a/hw/spapr.c b/hw/spapr.c
index dffb6a2..828bc53 100644
--- a/hw/spapr.c
+++ b/hw/spapr.c
@@ -83,7 +83,7 @@
 
 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, int lsi)
 {
     uint32_t irq;
     qemu_irq qirq;
@@ -95,7 +95,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, lsi);
     if (!qirq) {
         return NULL;
     }
diff --git a/hw/spapr.h b/hw/spapr.h
index e946a34..4aae1a0 100644
--- a/hw/spapr.h
+++ b/hw/spapr.h
@@ -286,7 +286,17 @@ void spapr_register_hypercall(target_ulong opcode, spapr_hcall_fn fn);
 target_ulong spapr_hypercall(CPUState *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, int lsi);
+
+static inline qemu_irq spapr_allocate_msi(uint32_t hint, uint32_t *irq_num)
+{
+    return spapr_allocate_irq(hint, irq_num, 0);
+}
+
+static inline qemu_irq spapr_allocate_lsi(uint32_t hint, uint32_t *irq_num)
+{
+    return spapr_allocate_irq(hint, irq_num, 1);
+}
 
 static inline uint32_t rtas_ld(target_ulong phys, int n)
 {
diff --git a/hw/spapr_pci.c b/hw/spapr_pci.c
index 1e8d03e..28a46bd 100644
--- a/hw/spapr_pci.c
+++ b/hw/spapr_pci.c
@@ -178,7 +178,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 ea317ef..ca0c8e7 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 1c5eaa4..3bdff4e 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; */
+    int lsi:1;
+    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,71 +224,105 @@ 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 + nr - ics->offset;
+    struct ics_irq_state *irq = ics->irqs + srcno;
 
-    irq->rejected = 1;
+    irq->asserted = val;
+    resend_lsi(ics, srcno);
 }
 
-static void ics_resend_msi(struct ics_state *ics)
+static void ics_set_irq(void *opaque, int srcno, int val)
 {
-    int i;
+    struct ics_state *ics = (struct ics_state *)opaque;
+    struct ics_irq_state *irq = ics->irqs + srcno;
 
-    for (i = 0; i < ics->nr_irqs; i++) {
-        struct ics_irq_state *irq = ics->irqs + i;
+    if (irq->lsi) {
+        set_irq_lsi(ics, srcno, val);
+    } else {
+        set_irq_msi(ics, srcno, val);
+    }
+}
 
-        /* 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);
-            }
-        }
+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 ics_write_xive_msi(struct ics_state *ics, int nr, int server,
-                               uint8_t priority)
+static void write_xive_lsi(struct ics_state *ics, int srcno)
 {
-    struct ics_irq_state *irq = ics->irqs + nr - ics->offset;
+    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->masked_pending || (priority == 0xff)) {
-        return;
+    if (irq->lsi) {
+        write_xive_lsi(ics, srcno);
+    } else {
+        write_xive_msi(ics, srcno);
     }
-
-    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);
+    struct ics_irq_state *irq = ics->irqs + nr - ics->offset;
+
+    irq->rejected = 1; /* Irrelevant but harmless for LSI */
+    irq->sent = 0; /* Irrelevant but harmless for MSI */
 }
 
 static void ics_resend(struct ics_state *ics)
 {
-    ics_resend_msi(ics);
+    int i;
+
+    for (i = 0; i < ics->nr_irqs; i++) {
+        struct ics_irq_state *irq = ics->irqs + i;
+
+        /* FIXME: filter by server#? */
+        if (irq->lsi) {
+            resend_lsi(ics, i);
+        } else {
+            resend_msi(ics, i);
+        }
+    }
 }
 
 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->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, int lsi)
 {
     if ((irq < icp->ics->offset)
         || (irq >= (icp->ics->offset + icp->ics->nr_irqs))) {
         return NULL;
     }
 
+    icp->ics->irqs[irq - icp->ics->offset].lsi = !!lsi;
     return icp->ics->qirqs[irq - icp->ics->offset];
 }
 
@@ -332,7 +390,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 +535,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 83c1182..7cb2b64 100644
--- a/hw/xics.h
+++ b/hw/xics.h
@@ -31,7 +31,7 @@
 
 struct icp_state;
 
-qemu_irq xics_find_qirq(struct icp_state *icp, int irq);
+qemu_irq xics_assign_irq(struct icp_state *icp, int irq, int lsi);
 
 struct icp_state *xics_system_init(int nr_irqs);
 
-- 
1.7.9

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [Qemu-devel] [PATCH 4/7] pseries: Update SLOF firmware image
  2012-02-28  3:18 [Qemu-devel] [0/7] pseries and Power updates David Gibson
                   ` (2 preceding siblings ...)
  2012-02-28  3:18 ` [Qemu-devel] [PATCH 3/7] pseries: Add support for level interrupts to XICS David Gibson
@ 2012-02-28  3:18 ` David Gibson
  2012-02-28  3:18 ` [Qemu-devel] [PATCH 5/7] pseries: Remove unused constant from PCI code David Gibson
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 13+ messages in thread
From: David Gibson @ 2012-02-28  3:18 UTC (permalink / raw)
  To: agraf; +Cc: qemu-ppc, qemu-devel, anthony, David Gibson

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 <david@gibson.dropbear.id.au>
---
 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 5dce355..71f4871 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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
DKp1p(

delta 107656
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%0A<X+z=Fk$Pk+^bSElBlJ6{gjf&nj-
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%0AWf$Jdzn
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

diff --git a/roms/SLOF b/roms/SLOF
index ab062ff..d153364 160000
--- a/roms/SLOF
+++ b/roms/SLOF
@@ -1 +1 @@
-Subproject commit ab062ff3b37c39649f2b0d94ed607adc6f6b3c7d
+Subproject commit d153364253548d6cd91403711f84996e6a7dab31
-- 
1.7.9

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [Qemu-devel] [PATCH 5/7] pseries: Remove unused constant from PCI code
  2012-02-28  3:18 [Qemu-devel] [0/7] pseries and Power updates David Gibson
                   ` (3 preceding siblings ...)
  2012-02-28  3:18 ` [Qemu-devel] [PATCH 4/7] pseries: Update SLOF firmware image David Gibson
@ 2012-02-28  3:18 ` David Gibson
  2012-02-28  3:18 ` [Qemu-devel] [PATCH 6/7] pseries: Remove PCI device from PCI host bridge code David Gibson
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 13+ messages in thread
From: David Gibson @ 2012-02-28  3:18 UTC (permalink / raw)
  To: agraf; +Cc: Alexey Kardashevskiy, qemu-ppc, qemu-devel, anthony, David Gibson

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 <aik@ozlabs.ru>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/spapr_pci.c |    7 -------
 1 files changed, 0 insertions(+), 7 deletions(-)

diff --git a/hw/spapr_pci.c b/hw/spapr_pci.c
index 28a46bd..dafcd0e 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)
 {
-- 
1.7.9

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [Qemu-devel] [PATCH 6/7] pseries: Remove PCI device from PCI host bridge code
  2012-02-28  3:18 [Qemu-devel] [0/7] pseries and Power updates David Gibson
                   ` (4 preceding siblings ...)
  2012-02-28  3:18 ` [Qemu-devel] [PATCH 5/7] pseries: Remove unused constant from PCI code David Gibson
@ 2012-02-28  3:18 ` David Gibson
  2012-02-28  3:18 ` [Qemu-devel] [PATCH 7/7] pseries: Configure PCI bridge using properties David Gibson
  2012-03-06 23:35 ` [Qemu-devel] [0/7] pseries and Power updates Alexander Graf
  7 siblings, 0 replies; 13+ messages in thread
From: David Gibson @ 2012-02-28  3:18 UTC (permalink / raw)
  To: agraf; +Cc: Alexey Kardashevskiy, qemu-ppc, qemu-devel, anthony, David Gibson

From: Alexey Kardashevskiy <aik@ozlabs.ru>

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 <aik@ozlabs.ru>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/spapr_pci.c |   20 --------------------
 1 files changed, 0 insertions(+), 20 deletions(-)

diff --git a/hw/spapr_pci.c b/hw/spapr_pci.c
index dafcd0e..b0254ee 100644
--- a/hw/spapr_pci.c
+++ b/hw/spapr_pci.c
@@ -183,25 +183,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);
@@ -219,7 +200,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)
-- 
1.7.9

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [Qemu-devel] [PATCH 7/7] pseries: Configure PCI bridge using properties
  2012-02-28  3:18 [Qemu-devel] [0/7] pseries and Power updates David Gibson
                   ` (5 preceding siblings ...)
  2012-02-28  3:18 ` [Qemu-devel] [PATCH 6/7] pseries: Remove PCI device from PCI host bridge code David Gibson
@ 2012-02-28  3:18 ` David Gibson
  2012-03-03 18:42   ` Andreas Färber
  2012-03-06 23:35 ` [Qemu-devel] [0/7] pseries and Power updates Alexander Graf
  7 siblings, 1 reply; 13+ messages in thread
From: David Gibson @ 2012-02-28  3:18 UTC (permalink / raw)
  To: agraf; +Cc: Alexey Kardashevskiy, qemu-ppc, qemu-devel, anthony, David Gibson

From: Alexey Kardashevskiy <aik@ozlabs.ru>

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 <aik@ozlabs.ru>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/spapr.c     |    2 +-
 hw/spapr_pci.c |  149 ++++++++++++++++++++++++++++++-------------------------
 hw/spapr_pci.h |    5 +-
 3 files changed, 84 insertions(+), 72 deletions(-)

diff --git a/hw/spapr.c b/hw/spapr.c
index 828bc53..d1cb6cd 100644
--- a/hw/spapr.c
+++ b/hw/spapr.c
@@ -629,7 +629,7 @@ static void ppc_spapr_init(ram_addr_t ram_size,
     }
 
     /* Set up PCI */
-    spapr_create_phb(spapr, "pci", SPAPR_PCI_BUID,
+    spapr_create_phb(spapr, SPAPR_PCI_BUID,
                      SPAPR_PCI_MEM_WIN_ADDR,
                      SPAPR_PCI_MEM_WIN_SIZE,
                      SPAPR_PCI_IO_WIN_ADDR);
diff --git a/hw/spapr_pci.c b/hw/spapr_pci.c
index b0254ee..654cb56 100644
--- a/hw/spapr_pci.c
+++ b/hw/spapr_pci.c
@@ -161,49 +161,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)
 {
@@ -241,35 +198,29 @@ static 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 busname[32];
+    char namebuf[64];
+    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);
+    sprintf(busname, "pci@%" PRIx64, phb->buid);
 
-    phb->mem_win_addr = mem_win_addr;
-
-    sprintf(namebuf, "%s-mem", busname);
+    /* Initialize memory regions */
+    sprintf(namebuf, "%s.mmio", busname);
     memory_region_init(&phb->memspace, namebuf, INT64_MAX);
 
-    sprintf(namebuf, "%s-memwindow", busname);
+    sprintf(namebuf, "%s.mmio-alias", busname);
     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,
@@ -278,15 +229,15 @@ 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", busname);
     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", busname);
     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,
@@ -297,14 +248,76 @@ void spapr_create_phb(sPAPREnvironment *spapr,
                                                  PCI_DEVFN(0, 0),
                                                  SPAPR_PCI_NUM_LSI);
 
+    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_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;
+}
+
+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_pci_type(void)
+{
+    type_register_static(&spapr_phb_info);
+
     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);
+type_init(spapr_register_pci_type)
+
+void spapr_create_phb(sPAPREnvironment *spapr, uint64_t buid,
+                      uint64_t mem_win_addr, uint64_t mem_win_size,
+                      uint64_t io_win_addr)
+{
+    DeviceState *dev;
 
-    /* pci_bus_set_mem_base(bus, mem_va_start - SPAPR_PCI_MEM_BAR_START); */
+    dev = qdev_create(NULL, spapr_phb_info.name);
+
+    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 */
diff --git a/hw/spapr_pci.h b/hw/spapr_pci.h
index 213340c..b4b8a73 100644
--- a/hw/spapr_pci.h
+++ b/hw/spapr_pci.h
@@ -35,7 +35,7 @@ typedef struct sPAPRPHBState {
     uint64_t buid;
 
     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 {
@@ -49,8 +49,7 @@ typedef struct sPAPRPHBState {
 #define SPAPR_PCI_MEM_WIN_BUS_OFFSET 0x80000000ULL
 #define SPAPR_PCI_IO_WIN_SIZE        0x10000
 
-void spapr_create_phb(sPAPREnvironment *spapr,
-                      const char *busname, uint64_t buid,
+void spapr_create_phb(sPAPREnvironment *spapr, uint64_t buid,
                       uint64_t mem_win_addr, uint64_t mem_win_size,
                       uint64_t io_win_addr);
 
-- 
1.7.9

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH 7/7] pseries: Configure PCI bridge using properties
  2012-02-28  3:18 ` [Qemu-devel] [PATCH 7/7] pseries: Configure PCI bridge using properties David Gibson
@ 2012-03-03 18:42   ` Andreas Färber
  2012-03-06  5:22     ` [Qemu-devel] [Qemu-ppc] " David Gibson
  0 siblings, 1 reply; 13+ messages in thread
From: Andreas Färber @ 2012-03-03 18:42 UTC (permalink / raw)
  To: David Gibson; +Cc: Alexey Kardashevskiy, qemu-ppc, agraf, anthony, qemu-devel

Am 28.02.2012 04:18, schrieb David Gibson:
> From: Alexey Kardashevskiy <aik@ozlabs.ru>
> 
> 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 <aik@ozlabs.ru>
> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
> ---
>  hw/spapr.c     |    2 +-
>  hw/spapr_pci.c |  149 ++++++++++++++++++++++++++++++-------------------------
>  hw/spapr_pci.h |    5 +-
>  3 files changed, 84 insertions(+), 72 deletions(-)

> diff --git a/hw/spapr_pci.c b/hw/spapr_pci.c
> index b0254ee..654cb56 100644
> --- a/hw/spapr_pci.c
> +++ b/hw/spapr_pci.c
> @@ -161,49 +161,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)
>  {

> @@ -297,14 +248,76 @@ void spapr_create_phb(sPAPREnvironment *spapr,
>                                                   PCI_DEVFN(0, 0),
>                                                   SPAPR_PCI_NUM_LSI);
>  
> +    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_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;
> +}
> +
> +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_pci_type(void)
> +{
> +    type_register_static(&spapr_phb_info);
> +
>      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);
> +type_init(spapr_register_pci_type)

Please respect the recently enforced convention of naming the function
..._register_types as before and best putting it and type_init() in the
bottom so that we don't end up with multiple ones per file.

And registering types is all such a function can safely do since the
call of these constructors is about to be moved (spapr_rtas_register
looks fishy in that aspect).

Andreas

-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [Qemu-ppc] [PATCH 7/7] pseries: Configure PCI bridge using properties
  2012-03-03 18:42   ` Andreas Färber
@ 2012-03-06  5:22     ` David Gibson
  0 siblings, 0 replies; 13+ messages in thread
From: David Gibson @ 2012-03-06  5:22 UTC (permalink / raw)
  To: Andreas Färber; +Cc: Alexey Kardashevskiy, qemu-ppc, qemu-devel, anthony

On Sat, Mar 03, 2012 at 07:42:09PM +0100, Andreas Färber wrote:
> Am 28.02.2012 04:18, schrieb David Gibson:
> > From: Alexey Kardashevskiy <aik@ozlabs.ru>
[snip]
> > -    QLIST_INSERT_HEAD(&spapr->phbs, phb, list);
> > +type_init(spapr_register_pci_type)
> 
> Please respect the recently enforced convention of naming the function
> ..._register_types as before and best putting it and type_init() in the
> bottom so that we don't end up with multiple ones per file.

Now that I'm aware of the convention, sure.

> And registering types is all such a function can safely do since the
> call of these constructors is about to be moved (spapr_rtas_register
> looks fishy in that aspect).

Ok, I'll do the rename and move the rtas register calls into the
class_init function and respin.

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH 3/7] pseries: Add support for level interrupts to XICS
  2012-02-28  3:18 ` [Qemu-devel] [PATCH 3/7] pseries: Add support for level interrupts to XICS David Gibson
@ 2012-03-06 23:30   ` Alexander Graf
  2012-03-07  5:43     ` [Qemu-devel] [Qemu-ppc] " David Gibson
  0 siblings, 1 reply; 13+ messages in thread
From: Alexander Graf @ 2012-03-06 23:30 UTC (permalink / raw)
  To: David Gibson; +Cc: qemu-ppc, qemu-devel, anthony


On 28.02.2012, at 04:18, David Gibson wrote:

> 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 <david@gibson@.dropbear.id.au>

This looks wrong

> ---
> hw/spapr.c     |    4 +-
> hw/spapr.h     |   12 +++++-
> hw/spapr_pci.c |    2 +-
> hw/spapr_vio.c |    2 +-
> hw/xics.c      |  122 +++++++++++++++++++++++++++++++++++++++++---------------
> hw/xics.h      |    2 +-
> 6 files changed, 106 insertions(+), 38 deletions(-)
> 
> diff --git a/hw/spapr.c b/hw/spapr.c
> index dffb6a2..828bc53 100644
> --- a/hw/spapr.c
> +++ b/hw/spapr.c
> @@ -83,7 +83,7 @@
> 
> 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, int lsi)
> {
>     uint32_t irq;
>     qemu_irq qirq;
> @@ -95,7 +95,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, lsi);

Find becomes assign? Is this on purpose?

While at it, could you make the "lsi" thing an enum? That'd make things easier to track :).


Alex

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [0/7] pseries and Power updates
  2012-02-28  3:18 [Qemu-devel] [0/7] pseries and Power updates David Gibson
                   ` (6 preceding siblings ...)
  2012-02-28  3:18 ` [Qemu-devel] [PATCH 7/7] pseries: Configure PCI bridge using properties David Gibson
@ 2012-03-06 23:35 ` Alexander Graf
  7 siblings, 0 replies; 13+ messages in thread
From: Alexander Graf @ 2012-03-06 23:35 UTC (permalink / raw)
  To: David Gibson; +Cc: qemu-ppc, qemu-devel, anthony


On 28.02.2012, at 04:18, David Gibson wrote:

> This series contains a number of bugfixes and enhancements for the
> pseries machine, including a significant cleanup of the pseries PCI
> code.
> 

Thanks, applied 1-2, 4-6 to ppc-next.


Alex

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [Qemu-ppc] [PATCH 3/7] pseries: Add support for level interrupts to XICS
  2012-03-06 23:30   ` Alexander Graf
@ 2012-03-07  5:43     ` David Gibson
  0 siblings, 0 replies; 13+ messages in thread
From: David Gibson @ 2012-03-07  5:43 UTC (permalink / raw)
  To: Alexander Graf; +Cc: qemu-ppc, qemu-devel, anthony

On Wed, Mar 07, 2012 at 12:30:40AM +0100, Alexander Graf wrote:
> 
> On 28.02.2012, at 04:18, David Gibson wrote:
> 
> > 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 <david@gibson@.dropbear.id.au>
> 
> This looks wrong

Oops, I'll fix that up.

> 
> > ---
> > hw/spapr.c     |    4 +-
> > hw/spapr.h     |   12 +++++-
> > hw/spapr_pci.c |    2 +-
> > hw/spapr_vio.c |    2 +-
> > hw/xics.c      |  122 +++++++++++++++++++++++++++++++++++++++++---------------
> > hw/xics.h      |    2 +-
> > 6 files changed, 106 insertions(+), 38 deletions(-)
> > 
> > diff --git a/hw/spapr.c b/hw/spapr.c
> > index dffb6a2..828bc53 100644
> > --- a/hw/spapr.c
> > +++ b/hw/spapr.c
> > @@ -83,7 +83,7 @@
> > 
> > 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, int lsi)
> > {
> >     uint32_t irq;
> >     qemu_irq qirq;
> > @@ -95,7 +95,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, lsi);
> 
> Find becomes assign? Is this on purpose?

Yes.  Previously xics_find_qirq() just returned the qmeu_irq
associated with a given xics irq number, without changing any state.
Now it also flags whether the irq is an lsi or msi, so the old name
didn't seem right any more.

> While at it, could you make the "lsi" thing an enum? That'd make
> things easier to track :).

Ok, will do.

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2012-03-07  5:43 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-28  3:18 [Qemu-devel] [0/7] pseries and Power updates David Gibson
2012-02-28  3:18 ` [Qemu-devel] [PATCH 1/7] pseries: Don't try to munmap() a malloc()ed TCE table David Gibson
2012-02-28  3:18 ` [Qemu-devel] [PATCH 2/7] PPC64: Add support for ldbrx and stdbrx instructions David Gibson
2012-02-28  3:18 ` [Qemu-devel] [PATCH 3/7] pseries: Add support for level interrupts to XICS David Gibson
2012-03-06 23:30   ` Alexander Graf
2012-03-07  5:43     ` [Qemu-devel] [Qemu-ppc] " David Gibson
2012-02-28  3:18 ` [Qemu-devel] [PATCH 4/7] pseries: Update SLOF firmware image David Gibson
2012-02-28  3:18 ` [Qemu-devel] [PATCH 5/7] pseries: Remove unused constant from PCI code David Gibson
2012-02-28  3:18 ` [Qemu-devel] [PATCH 6/7] pseries: Remove PCI device from PCI host bridge code David Gibson
2012-02-28  3:18 ` [Qemu-devel] [PATCH 7/7] pseries: Configure PCI bridge using properties David Gibson
2012-03-03 18:42   ` Andreas Färber
2012-03-06  5:22     ` [Qemu-devel] [Qemu-ppc] " David Gibson
2012-03-06 23:35 ` [Qemu-devel] [0/7] pseries and Power updates Alexander Graf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).