From: David Gibson <david@gibson.dropbear.id.au>
To: BALATON Zoltan <balaton@eik.bme.hu>
Cc: qemu-devel@nongnu.org, qemu-ppc@nongnu.org,
Alexander Graf <agraf@suse.de>, Francois Revol <revol@free.fr>
Subject: Re: [Qemu-devel] [PATCH 10/15] ppc440: Add emulation of plb-pcix controller found in some 440 SoCs
Date: Wed, 23 Aug 2017 10:49:03 +1000 [thread overview]
Message-ID: <20170823004903.GI5379@umbus.fritz.box> (raw)
In-Reply-To: <d9d735634eb1c6af360bf0aca2131a2822606c40.1503249785.git.balaton@eik.bme.hu>
[-- Attachment #1: Type: text/plain, Size: 18255 bytes --]
On Sun, Aug 20, 2017 at 07:23:05PM +0200, BALATON Zoltan wrote:
> This is the PCIX controller found in newer 440 core SoCs e.g. the AMMC
> 460EX. The device tree refers to this as plb-pcix compared to the
> plb-pci controller in older 440 SoCs.
>
> Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
So I don't have the time to read the manuals to give this a detailed
review. But since you're replacing nothing at all, it kind of doesn't
matter if it's pretty broken, it's still an improvement. I didn't see
anything blatantly bogus, so:
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
> ---
> hw/ppc/Makefile.objs | 2 +-
> hw/ppc/ppc440_pcix.c | 516 +++++++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 517 insertions(+), 1 deletion(-)
> create mode 100644 hw/ppc/ppc440_pcix.c
>
> diff --git a/hw/ppc/Makefile.objs b/hw/ppc/Makefile.objs
> index 7efc686..fc39fe4 100644
> --- a/hw/ppc/Makefile.objs
> +++ b/hw/ppc/Makefile.objs
> @@ -13,7 +13,7 @@ endif
> obj-$(CONFIG_PSERIES) += spapr_rtas_ddw.o
> # PowerPC 4xx boards
> obj-y += ppc405_boards.o ppc4xx_devs.o ppc405_uc.o ppc440_bamboo.o
> -obj-y += ppc4xx_pci.o
> +obj-y += ppc4xx_pci.o ppc440_pcix.o
> # PReP
> obj-$(CONFIG_PREP) += prep.o
> obj-$(CONFIG_PREP) += prep_systemio.o
> diff --git a/hw/ppc/ppc440_pcix.c b/hw/ppc/ppc440_pcix.c
> new file mode 100644
> index 0000000..5c2ceec
> --- /dev/null
> +++ b/hw/ppc/ppc440_pcix.c
> @@ -0,0 +1,516 @@
> +/*
> + * Emulation of the ibm,plb-pcix PCI controller
> + * This is found in some 440 SoCs e.g. the 460EX.
> + *
> + * Copyright (c) 2016 BALATON Zoltan
> + *
> + * Derived from ppc4xx_pci.c and pci-host/ppce500.c
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License, version 2, as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#include "qemu/osdep.h"
> +#include "qemu/error-report.h"
> +#include "hw/hw.h"
> +#include "hw/ppc/ppc.h"
> +#include "hw/ppc/ppc4xx.h"
> +#include "hw/pci/pci.h"
> +#include "hw/pci/pci_host.h"
> +#include "exec/address-spaces.h"
> +
> +/*#define DEBUG_PCI*/
> +
> +#ifdef DEBUG_PCI
> +#define DPRINTF(fmt, ...) fprintf(stderr, fmt, ## __VA_ARGS__);
> +#else
> +#define DPRINTF(fmt, ...)
> +#endif /* DEBUG */
> +
> +struct PLBOutMap {
> + uint64_t la;
> + uint64_t pcia;
> + uint32_t sa;
> + MemoryRegion mr;
> +};
> +
> +struct PLBInMap {
> + uint64_t sa;
> + uint64_t la;
> + MemoryRegion mr;
> +};
> +
> +#define TYPE_PPC440_PCIX_HOST_BRIDGE "ppc440-pcix-host"
> +#define PPC440_PCIX_HOST_BRIDGE(obj) \
> + OBJECT_CHECK(PPC440PCIXState, (obj), TYPE_PPC440_PCIX_HOST_BRIDGE)
> +
> +#define PPC440_PCIX_NR_POMS 3
> +#define PPC440_PCIX_NR_PIMS 3
> +
> +typedef struct PPC440PCIXState {
> + PCIHostState parent_obj;
> +
> + PCIDevice *dev;
> + struct PLBOutMap pom[PPC440_PCIX_NR_POMS];
> + struct PLBInMap pim[PPC440_PCIX_NR_PIMS];
> + uint32_t sts;
> + qemu_irq irq[PCI_NUM_PINS];
> + AddressSpace bm_as;
> + MemoryRegion bm;
> +
> + MemoryRegion container;
> + MemoryRegion iomem;
> + MemoryRegion busmem;
> +} PPC440PCIXState;
> +
> +#define PPC440_REG_BASE 0x80000
> +#define PPC440_REG_SIZE 0xff
> +
> +#define PCIC0_CFGADDR 0x0
> +#define PCIC0_CFGDATA 0x4
> +
> +#define PCIX0_POM0LAL 0x68
> +#define PCIX0_POM0LAH 0x6c
> +#define PCIX0_POM0SA 0x70
> +#define PCIX0_POM0PCIAL 0x74
> +#define PCIX0_POM0PCIAH 0x78
> +#define PCIX0_POM1LAL 0x7c
> +#define PCIX0_POM1LAH 0x80
> +#define PCIX0_POM1SA 0x84
> +#define PCIX0_POM1PCIAL 0x88
> +#define PCIX0_POM1PCIAH 0x8c
> +#define PCIX0_POM2SA 0x90
> +
> +#define PCIX0_PIM0SAL 0x98
> +#define PCIX0_PIM0LAL 0x9c
> +#define PCIX0_PIM0LAH 0xa0
> +#define PCIX0_PIM1SA 0xa4
> +#define PCIX0_PIM1LAL 0xa8
> +#define PCIX0_PIM1LAH 0xac
> +#define PCIX0_PIM2SAL 0xb0
> +#define PCIX0_PIM2LAL 0xb4
> +#define PCIX0_PIM2LAH 0xb8
> +#define PCIX0_PIM0SAH 0xf8
> +#define PCIX0_PIM2SAH 0xfc
> +
> +#define PCIX0_STS 0xe0
> +
> +#define PCI_ALL_SIZE (PPC440_REG_BASE + PPC440_REG_SIZE)
> +
> +static void ppc440_pcix_clear_region(MemoryRegion *parent,
> + MemoryRegion *mem)
> +{
> + if (memory_region_is_mapped(mem)) {
> + memory_region_del_subregion(parent, mem);
> + object_unparent(OBJECT(mem));
> + }
> +}
> +
> +/* DMA mapping */
> +static void ppc440_pcix_update_pim(PPC440PCIXState *s, int idx)
> +{
> + MemoryRegion *mem = &s->pim[idx].mr;
> + char *name;
> + uint64_t size;
> +
> + /* Before we modify anything, unmap and destroy the region */
> + ppc440_pcix_clear_region(&s->bm, mem);
> +
> + if (!(s->pim[idx].sa & 1)) {
> + /* Not enabled, nothing to do */
> + return;
> + }
> +
> + name = g_strdup_printf("PCI Inbound Window %d", idx);
> + size = ~(s->pim[idx].sa & ~7ULL) + 1;
> + memory_region_init_alias(mem, OBJECT(s), name, get_system_memory(),
> + s->pim[idx].la, size);
> + memory_region_add_subregion_overlap(&s->bm, 0, mem, -1);
> + g_free(name);
> +
> + DPRINTF("%s: Added window %d of size=%#"PRIx64" to CPU=%#"PRIx64"\n",
> + __func__, idx, size, s->pim[idx].la);
> +}
> +
> +/* BAR mapping */
> +static void ppc440_pcix_update_pom(PPC440PCIXState *s, int idx)
> +{
> + MemoryRegion *mem = &s->pom[idx].mr;
> + MemoryRegion *address_space_mem = get_system_memory();
> + char *name;
> + uint32_t size;
> +
> + /* Before we modify anything, unmap and destroy the region */
> + ppc440_pcix_clear_region(address_space_mem, mem);
> +
> + if (!(s->pom[idx].sa & 1)) {
> + /* Not enabled, nothing to do */
> + return;
> + }
> +
> + name = g_strdup_printf("PCI Outbound Window %d", idx);
> + size = ~(s->pom[idx].sa & 0xfffffffe) + 1;
> + if (!size) {
> + size = 0xffffffff;
> + }
> + memory_region_init_alias(mem, OBJECT(s), name, &s->busmem,
> + s->pom[idx].pcia, size);
> + memory_region_add_subregion(address_space_mem, s->pom[idx].la, mem);
> + g_free(name);
> +
> + DPRINTF("%s: Added window %d of size=%#x from CPU=%#"PRIx64
> + " to PCI=%#"PRIx64"\n", __func__, idx, size, s->pom[idx].la,
> + s->pom[idx].pcia);
> +}
> +
> +static void ppc440_pcix_reg_write4(void *opaque, hwaddr addr,
> + uint64_t val, unsigned size)
> +{
> + struct PPC440PCIXState *s = opaque;
> +
> + DPRINTF("%s: addr 0x%"PRIx64 " = %"PRIx64 "\n", __func__, addr, val);
> + switch (addr) {
> + case PCI_VENDOR_ID ... PCI_MAX_LAT:
> + stl_le_p(s->dev->config + addr, val);
> + break;
> +
> + case PCIX0_POM0LAL:
> + s->pom[0].la &= 0xffffffff00000000ULL;
> + s->pom[0].la |= val;
> + ppc440_pcix_update_pom(s, 0);
> + break;
> + case PCIX0_POM0LAH:
> + s->pom[0].la &= 0xffffffffULL;
> + s->pom[0].la |= val << 32;
> + ppc440_pcix_update_pom(s, 0);
> + break;
> + case PCIX0_POM0SA:
> + s->pom[0].sa = val;
> + ppc440_pcix_update_pom(s, 0);
> + break;
> + case PCIX0_POM0PCIAL:
> + s->pom[0].pcia &= 0xffffffff00000000ULL;
> + s->pom[0].pcia |= val;
> + ppc440_pcix_update_pom(s, 0);
> + break;
> + case PCIX0_POM0PCIAH:
> + s->pom[0].pcia &= 0xffffffffULL;
> + s->pom[0].pcia |= val << 32;
> + ppc440_pcix_update_pom(s, 0);
> + break;
> + case PCIX0_POM1LAL:
> + s->pom[1].la &= 0xffffffff00000000ULL;
> + s->pom[1].la |= val;
> + ppc440_pcix_update_pom(s, 1);
> + break;
> + case PCIX0_POM1LAH:
> + s->pom[1].la &= 0xffffffffULL;
> + s->pom[1].la |= val << 32;
> + ppc440_pcix_update_pom(s, 1);
> + break;
> + case PCIX0_POM1SA:
> + s->pom[1].sa = val;
> + ppc440_pcix_update_pom(s, 1);
> + break;
> + case PCIX0_POM1PCIAL:
> + s->pom[1].pcia &= 0xffffffff00000000ULL;
> + s->pom[1].pcia |= val;
> + ppc440_pcix_update_pom(s, 1);
> + break;
> + case PCIX0_POM1PCIAH:
> + s->pom[1].pcia &= 0xffffffffULL;
> + s->pom[1].pcia |= val << 32;
> + ppc440_pcix_update_pom(s, 1);
> + break;
> + case PCIX0_POM2SA:
> + s->pom[2].sa = val;
> + break;
> +
> + case PCIX0_PIM0SAL:
> + s->pim[0].sa &= 0xffffffff00000000ULL;
> + s->pim[0].sa |= val;
> + ppc440_pcix_update_pim(s, 0);
> + break;
> + case PCIX0_PIM0LAL:
> + s->pim[0].la &= 0xffffffff00000000ULL;
> + s->pim[0].la |= val;
> + ppc440_pcix_update_pim(s, 0);
> + break;
> + case PCIX0_PIM0LAH:
> + s->pim[0].la &= 0xffffffffULL;
> + s->pim[0].la |= val << 32;
> + ppc440_pcix_update_pim(s, 0);
> + break;
> + case PCIX0_PIM1SA:
> + s->pim[1].sa = val;
> + ppc440_pcix_update_pim(s, 1);
> + break;
> + case PCIX0_PIM1LAL:
> + s->pim[1].la &= 0xffffffff00000000ULL;
> + s->pim[1].la |= val;
> + ppc440_pcix_update_pim(s, 1);
> + break;
> + case PCIX0_PIM1LAH:
> + s->pim[1].la &= 0xffffffffULL;
> + s->pim[1].la |= val << 32;
> + ppc440_pcix_update_pim(s, 1);
> + break;
> + case PCIX0_PIM2SAL:
> + s->pim[2].sa &= 0xffffffff00000000ULL;
> + s->pim[2].sa = val;
> + ppc440_pcix_update_pim(s, 2);
> + break;
> + case PCIX0_PIM2LAL:
> + s->pim[2].la &= 0xffffffff00000000ULL;
> + s->pim[2].la |= val;
> + ppc440_pcix_update_pim(s, 2);
> + break;
> + case PCIX0_PIM2LAH:
> + s->pim[2].la &= 0xffffffffULL;
> + s->pim[2].la |= val << 32;
> + ppc440_pcix_update_pim(s, 2);
> + break;
> +
> + case PCIX0_STS:
> + s->sts = val;
> + break;
> +
> + case PCIX0_PIM0SAH:
> + s->pim[0].sa &= 0xffffffffULL;
> + s->pim[0].sa |= val << 32;
> + ppc440_pcix_update_pim(s, 0);
> + break;
> + case PCIX0_PIM2SAH:
> + s->pim[2].sa &= 0xffffffffULL;
> + s->pim[2].sa |= val << 32;
> + ppc440_pcix_update_pim(s, 2);
> + break;
> +
> + default:
> + printf("%s: unhandled PCI internal register 0x%lx\n", __func__,
> + (unsigned long)addr);
> + break;
> + }
> +}
> +
> +static uint64_t ppc440_pcix_reg_read4(void *opaque, hwaddr addr,
> + unsigned size)
> +{
> + struct PPC440PCIXState *s = opaque;
> + uint32_t val;
> +
> + switch (addr) {
> + case PCI_VENDOR_ID ... PCI_MAX_LAT:
> + val = ldl_le_p(s->dev->config + addr);
> + break;
> +
> + case PCIX0_POM0LAL:
> + val = s->pom[0].la;
> + break;
> + case PCIX0_POM0LAH:
> + val = s->pom[0].la >> 32;
> + break;
> + case PCIX0_POM0SA:
> + val = s->pom[0].sa;
> + break;
> + case PCIX0_POM0PCIAL:
> + val = s->pom[0].pcia;
> + break;
> + case PCIX0_POM0PCIAH:
> + val = s->pom[0].pcia >> 32;
> + break;
> + case PCIX0_POM1LAL:
> + val = s->pom[1].la;
> + break;
> + case PCIX0_POM1LAH:
> + val = s->pom[1].la >> 32;
> + break;
> + case PCIX0_POM1SA:
> + val = s->pom[1].sa;
> + break;
> + case PCIX0_POM1PCIAL:
> + val = s->pom[1].pcia;
> + break;
> + case PCIX0_POM1PCIAH:
> + val = s->pom[1].pcia >> 32;
> + break;
> + case PCIX0_POM2SA:
> + val = s->pom[2].sa;
> + break;
> +
> + case PCIX0_PIM0SAL:
> + val = s->pim[0].sa;
> + break;
> + case PCIX0_PIM0LAL:
> + val = s->pim[0].la;
> + break;
> + case PCIX0_PIM0LAH:
> + val = s->pim[0].la >> 32;
> + break;
> + case PCIX0_PIM1SA:
> + val = s->pim[1].sa;
> + break;
> + case PCIX0_PIM1LAL:
> + val = s->pim[1].la;
> + break;
> + case PCIX0_PIM1LAH:
> + val = s->pim[1].la >> 32;
> + break;
> + case PCIX0_PIM2SAL:
> + val = s->pim[2].sa;
> + break;
> + case PCIX0_PIM2LAL:
> + val = s->pim[2].la;
> + break;
> + case PCIX0_PIM2LAH:
> + val = s->pim[2].la >> 32;
> + break;
> +
> + case PCIX0_STS:
> + val = s->sts;
> + break;
> +
> + case PCIX0_PIM0SAH:
> + val = s->pim[0].sa >> 32;
> + break;
> + case PCIX0_PIM2SAH:
> + val = s->pim[2].sa >> 32;
> + break;
> +
> + default:
> + printf("%s: invalid PCI internal register 0x%lx\n", __func__,
> + (unsigned long)addr);
> + val = 0;
> + }
> +
> + DPRINTF("%s: addr 0x%"PRIx64 " = %"PRIx32 "\n", __func__, addr, val);
> + return val;
> +}
> +
> +static const MemoryRegionOps pci_reg_ops = {
> + .read = ppc440_pcix_reg_read4,
> + .write = ppc440_pcix_reg_write4,
> + .endianness = DEVICE_LITTLE_ENDIAN,
> +};
> +
> +static void ppc440_pcix_reset(DeviceState *dev)
> +{
> + struct PPC440PCIXState *s = PPC440_PCIX_HOST_BRIDGE(dev);
> + int i;
> +
> + for (i = 0; i < PPC440_PCIX_NR_POMS; i++) {
> + ppc440_pcix_clear_region(get_system_memory(), &s->pom[i].mr);
> + }
> + for (i = 0; i < PPC440_PCIX_NR_PIMS; i++) {
> + ppc440_pcix_clear_region(&s->bm, &s->pim[i].mr);
> + }
> + memset(s->pom, 0, sizeof(s->pom));
> + memset(s->pim, 0, sizeof(s->pim));
> + for (i = 0; i < PPC440_PCIX_NR_PIMS; i++) {
> + s->pim[i].sa = 0xffffffff00000000ULL;
> + }
> + s->sts = 0;
> +}
> +
> +/* All pins from each slot are tied to a single board IRQ.
> + * This may need further refactoring for other boards. */
> +static int ppc440_pcix_map_irq(PCIDevice *pci_dev, int irq_num)
> +{
> + int slot = pci_dev->devfn >> 3;
> +
> + DPRINTF("%s: devfn %x irq %d -> %d\n", __func__,
> + pci_dev->devfn, irq_num, slot);
> +
> + return slot - 1;
> +}
> +
> +static void ppc440_pcix_set_irq(void *opaque, int irq_num, int level)
> +{
> + qemu_irq *pci_irqs = opaque;
> +
> + DPRINTF("%s: PCI irq %d\n", __func__, irq_num);
> + if (irq_num < 0) {
> + error_report("%s: PCI irq %d", __func__, irq_num);
> + return;
> + }
> + qemu_set_irq(pci_irqs[irq_num], level);
> +}
> +
> +static AddressSpace *ppc440_pcix_set_iommu(PCIBus *b, void *opaque, int devfn)
> +{
> + PPC440PCIXState *s = opaque;
> +
> + return &s->bm_as;
> +}
> +
> +static int ppc440_pcix_initfn(SysBusDevice *dev)
> +{
> + PPC440PCIXState *s;
> + PCIHostState *h;
> + int i;
> +
> + h = PCI_HOST_BRIDGE(dev);
> + s = PPC440_PCIX_HOST_BRIDGE(dev);
> +
> + for (i = 0; i < ARRAY_SIZE(s->irq); i++) {
> + sysbus_init_irq(dev, &s->irq[i]);
> + }
> +
> + memory_region_init(&s->busmem, OBJECT(dev), "pci bus memory", UINT64_MAX);
> + h->bus = pci_register_bus(DEVICE(dev), NULL, ppc440_pcix_set_irq,
> + ppc440_pcix_map_irq, s->irq, &s->busmem,
> + get_system_io(), PCI_DEVFN(0, 0), 4, TYPE_PCI_BUS);
> +
> + s->dev = pci_create_simple(h->bus, PCI_DEVFN(0, 0), "ppc4xx-host-bridge");
> +
> + memory_region_init(&s->bm, OBJECT(s), "bm-ppc440-pcix", UINT64_MAX);
> + memory_region_add_subregion(&s->bm, 0x0, &s->busmem);
> + address_space_init(&s->bm_as, &s->bm, "pci-bm");
> + pci_setup_iommu(h->bus, ppc440_pcix_set_iommu, s);
> +
> + memory_region_init(&s->container, OBJECT(s), "pci-container", PCI_ALL_SIZE);
> + memory_region_init_io(&h->conf_mem, OBJECT(s), &pci_host_conf_le_ops, h,
> + "pci-conf-idx", 4);
> + memory_region_init_io(&h->data_mem, OBJECT(s), &pci_host_data_le_ops, h,
> + "pci-conf-data", 4);
> + memory_region_init_io(&s->iomem, OBJECT(s), &pci_reg_ops, s,
> + "pci.reg", PPC440_REG_SIZE);
> + memory_region_add_subregion(&s->container, PCIC0_CFGADDR, &h->conf_mem);
> + memory_region_add_subregion(&s->container, PCIC0_CFGDATA, &h->data_mem);
> + memory_region_add_subregion(&s->container, PPC440_REG_BASE, &s->iomem);
> + sysbus_init_mmio(dev, &s->container);
> +
> + return 0;
> +}
> +
> +static void ppc440_pcix_class_init(ObjectClass *klass, void *data)
> +{
> + SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
> + DeviceClass *dc = DEVICE_CLASS(klass);
> +
> + k->init = ppc440_pcix_initfn;
> + dc->reset = ppc440_pcix_reset;
> +}
> +
> +static const TypeInfo ppc440_pcix_info = {
> + .name = TYPE_PPC440_PCIX_HOST_BRIDGE,
> + .parent = TYPE_PCI_HOST_BRIDGE,
> + .instance_size = sizeof(PPC440PCIXState),
> + .class_init = ppc440_pcix_class_init,
> +};
> +
> +static void ppc440_pcix_register_types(void)
> +{
> + type_register_static(&ppc440_pcix_info);
> +}
> +
> +type_init(ppc440_pcix_register_types)
--
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
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2017-08-23 0:53 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-20 17:23 [Qemu-devel] [PATCH 00/15] Sam460ex emulation BALATON Zoltan
2017-08-20 17:23 ` [Qemu-devel] [PATCH 08/15] ppc4xx_i2c: Implement basic I2C functions BALATON Zoltan
2017-08-20 17:23 ` [Qemu-devel] [PATCH 13/15] ppc4xx: Add more PLB registers BALATON Zoltan
2017-08-20 21:58 ` Philippe Mathieu-Daudé
2017-08-20 22:12 ` BALATON Zoltan
2017-08-23 2:40 ` David Gibson
2017-08-23 2:39 ` David Gibson
2017-08-23 10:16 ` BALATON Zoltan
2017-08-24 2:35 ` David Gibson
2017-08-24 20:28 ` BALATON Zoltan
2017-08-25 5:05 ` David Gibson
2017-08-20 17:23 ` [Qemu-devel] [PATCH 09/15] hw/ide: Emulate SiI3112 SATA controller BALATON Zoltan
2017-08-21 21:14 ` John Snow
2017-08-22 11:08 ` BALATON Zoltan
2017-08-22 19:01 ` John Snow
2017-08-22 20:15 ` BALATON Zoltan
2017-08-22 20:21 ` John Snow
2017-08-22 21:54 ` BALATON Zoltan
2017-08-23 0:52 ` David Gibson
2017-08-23 16:16 ` John Snow
2017-08-20 17:23 ` [Qemu-devel] [PATCH 12/15] ppc4xx: Export ECB and PLB emulation BALATON Zoltan
2017-08-23 2:30 ` David Gibson
2017-08-20 17:23 ` [Qemu-devel] [PATCH 10/15] ppc440: Add emulation of plb-pcix controller found in some 440 SoCs BALATON Zoltan
2017-08-20 22:20 ` Philippe Mathieu-Daudé
2017-08-24 22:12 ` BALATON Zoltan
2017-08-23 0:49 ` David Gibson [this message]
2017-08-20 17:23 ` [Qemu-devel] [PATCH 06/15] ppc4xx_i2c: QOMify BALATON Zoltan
2017-08-21 10:50 ` David Gibson
2017-08-20 17:23 ` [Qemu-devel] [PATCH 15/15] ppc: Add aCube Sam460ex board BALATON Zoltan
2017-08-20 22:10 ` Philippe Mathieu-Daudé
2017-08-23 4:16 ` David Gibson
2017-08-23 11:12 ` BALATON Zoltan
2017-08-23 11:43 ` François Revol
2017-08-23 12:47 ` BALATON Zoltan
2017-08-23 13:33 ` [Qemu-devel] [Qemu-ppc] " luigi burdo
2017-08-24 2:54 ` [Qemu-devel] " David Gibson
2017-08-24 2:51 ` David Gibson
2017-08-24 21:43 ` BALATON Zoltan
2017-08-24 23:55 ` David Gibson
2017-08-24 2:44 ` David Gibson
2017-08-24 21:37 ` BALATON Zoltan
2017-08-25 0:15 ` David Gibson
2017-08-20 17:23 ` [Qemu-devel] [PATCH 01/15] ppc4xx: Move MAL from ppc405_uc to ppc4xx_devs BALATON Zoltan
2017-08-20 17:23 ` [Qemu-devel] [PATCH 02/15] ppc4xx: Make MAL emulation more generic BALATON Zoltan
2017-08-21 10:40 ` David Gibson
2017-08-20 17:23 ` [Qemu-devel] [PATCH 14/15] ppc4xx: Add device models found in PPC440 core SoCs BALATON Zoltan
2017-08-23 2:49 ` David Gibson
2017-08-20 17:23 ` [Qemu-devel] [PATCH 11/15] ppc: Add 460EX embedded CPU BALATON Zoltan
2017-08-23 2:28 ` David Gibson
2017-08-23 9:08 ` BALATON Zoltan
2017-08-23 9:20 ` David Gibson
2017-08-20 17:23 ` [Qemu-devel] [PATCH 05/15] ppc4xx: Split off 4xx I2C emulation from ppc405_uc to its own file BALATON Zoltan
2017-08-20 17:23 ` [Qemu-devel] [PATCH 03/15] ohci: Allow sysbus version to be used as a companion BALATON Zoltan
2017-08-21 4:10 ` David Gibson
2017-08-23 13:58 ` Gerd Hoffmann
2017-08-20 17:23 ` [Qemu-devel] [PATCH 07/15] ppc4xx_i2c: Move to hw/i2c BALATON Zoltan
2017-08-21 10:54 ` David Gibson
2017-08-20 17:23 ` [Qemu-devel] [PATCH 04/15] ehci: Add ppc4xx-ehci for the USB 2.0 controller in embedded PPC SoCs BALATON Zoltan
2017-08-21 4:18 ` David Gibson
2017-08-23 13:57 ` Gerd Hoffmann
2017-08-27 12:34 ` [Qemu-devel] [Qemu-ppc] [PATCH 00/15] Sam460ex emulation BALATON Zoltan
2017-08-27 16:56 ` [Qemu-devel] Qemu 2.10 rc4 build issue on BE luigi burdo
2017-08-28 9:20 ` [Qemu-devel] [Qemu-ppc] " Thomas Huth
2017-08-28 11:13 ` luigi burdo
2017-08-28 15:56 ` [Qemu-devel] " Eric Blake
2017-08-29 7:34 ` [Qemu-devel] [Qemu-ppc] [PATCH 00/15] Sam460ex emulation David Gibson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170823004903.GI5379@umbus.fritz.box \
--to=david@gibson.dropbear.id.au \
--cc=agraf@suse.de \
--cc=balaton@eik.bme.hu \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=revol@free.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).