Re: [Qemu-devel] [Qemu-ppc] [RFC PATCH 09/12] ppc440: Add emulation of plb-pcix controller found in some 440 SoCs

2017-08-19 Thread BALATON Zoltan

On Fri, 18 Aug 2017, luigi burdo wrote:
i have sam460 amigaos cdrom iso as my backup and can test it inside 
qemu. sharing the logs if you needed.


It may help if you can do that. You need to compile QEMU from git with 
this patch series applied and copy the u-boot-sam460-20100605-fixed.bin 
linked from the cover message as u-boot-sam460-20100605.bin to the current 
dir. Then try booting the CD and see if it shows something. It should 
print some messages to console where it's started with -serial stdio when 
you start AmigaOS with debug (you may need to set os4_commandline in 
U-Boot for this but I don't know AmigaOS).


about real hardware no problem i will ask inside amigan community if 
someone have the opportunity to share the serial debug of sam 460 
runinng amigaos.


Do you know about a good place for such requests? Is there some forum or 
mailing list I should be aware of?



can i ask you something ?
why you dont try to integrate in qemu the pegasos 2 or the efika 
machine. i have the feeling that probably it can be more simple because 
more old machine and components.


The age of a machine and components has nothing to do with how easy it is 
to emulate. It depends on what is already emulated in QEMU. If none of 
those old components are implemented by QEMU already then it's a lot of 
work to write emulation of them. (Such as the Marvell system controller 
chip in Pegasos or the SoC the Efika uses. Besides, does AmigaOS run on 
Efika?) If there are some previous work we can build on then it's easier. 
QEMU already had ppc440 emulation including a similar board and Francois 
has started sam460ex emulation so it was easier to finish this than making 
a new one. (Also firmware and graphics emulation may be more difficult for 
those other boards.)


At the end it does not matter which machine we emulate if the goal is to 
run these OSes. If we have any of the supported boards they will run so we 
don't need more of these just one and it was the sam460 which was nearest 
to start working. (The MorphOS team or one of the developers may have some 
Pegasos 2 emulation but they don't intend to publish that and I don't know 
about previous work on Efika so the Sam460ex seems like a good choice with 
support for a lot of OSes, including porting Haiku which was why Francois 
has started emulating it so this may help that activity as well 
increasing the available OSes.)


Regards,
BALATON Zoltan



Re: [Qemu-devel] [Qemu-ppc] [RFC PATCH 09/12] ppc440: Add emulation of plb-pcix controller found in some 440 SoCs

2017-08-18 Thread François Revol
Le 18/08/2017 à 21:43, luigi burdo a écrit :
> can i ask you something ? why you dont try to integrate in qemu the
> pegasos 2 or the efika machine. i have the feeling that probably it
> can be more simple because more old machine and components.
> 

Except they are antique, and the Pegasos at least has an horribly buggy
OpenFirmware implementation.

I'd rather work on BeBox support ;-)

François.



Re: [Qemu-devel] [Qemu-ppc] [RFC PATCH 09/12] ppc440: Add emulation of plb-pcix controller found in some 440 SoCs

2017-08-18 Thread luigi burdo

hi Balaton,
> I know about this and if you read the cover message (RFC PATCH 00/12) I link 
> to a fixed version of that U-Boot firmware (rebuilt from source with the 
> mentioned patches) which works with this emulation. (The original one from 
> the updater also starts but cannot boot due to some problems which are fixed 
> by these patches in my image. This is described in the cover message.) With 
> that fixed firmware image it should be possible to at least try booting 
> AmigaOS on the emulation and get some logs. I'd be surprised if it also 
> worked at this point but I could not try it as it needs an appropriate 
> AmigaOS version that runs on the Sam460. It should produce some logs though 
> with -serial stdio which may help finding what is missing.

i have sam460 amigaos cdrom iso as my backup and can test it inside qemu. 
sharing the logs if you needed.

> I think it would not be possible to use the U-Boot in QEMU now as that is for 
> e500 CPU but this is not needed either. See above, we are aiming to emulate 
> enough of the board that it can run the original firmware which should be 
> able to boot these Amiga like OSes and normal Linux images used on the 
> Sam460ex. This already works but things fail after or during boot currently. 
> This is what needs to be debugged. So we'd need someone who has a Sam460 (ex 
> or cr) board and can test on that to get logs from OSes on real hardware for 
> comparison.

 about real hardware no problem i will ask inside amigan community if someone 
have the opportunity to share the serial debug of sam 460 runinng amigaos.

can i ask you something ?
why you dont try to integrate in qemu the pegasos 2 or the efika machine. i 
have the feeling that probably it can be more simple because more old machine 
and components.

bye 
luigi


Re: [Qemu-devel] [Qemu-ppc] [RFC PATCH 09/12] ppc440: Add emulation of plb-pcix controller found in some 440 SoCs

2017-08-18 Thread BALATON Zoltan

On Fri, 18 Aug 2017, François Revol wrote:

I once managed to build a binary from their published source code with
an old compiler,


It builds here with the patch I've posted next to the bin image.


although it's not exactly the same of the binary used,
which I think is actually run with the on-chip RAM or something weird alike.


Maybe it's the same but we may have a problem with MMU emulation so it 
behaves differently (or they've compiled with different compiler/version 
which generates different code, I haven't checked that deep).


But AROS has a problem with MMU so it may be a bug. I'll send a separate 
message about that.


Regards,
BALATON Zoltan


Re: [Qemu-devel] [Qemu-ppc] [RFC PATCH 09/12] ppc440: Add emulation of plb-pcix controller found in some 440 SoCs

2017-08-18 Thread BALATON Zoltan

On Fri, 18 Aug 2017, luigi burdo wrote:

hi Balaton,


Ciao Luigi,


i can help with amigaos4 for sam .
i can test it on P5040 book3e and on G5 quad book3s machine.


Thanks for the offer but unfortunately that would not help because these 
are different CPUs than the 460EX used in the Sam board. I'd definitely 
need logs from Sam460ex or Sam460cr, other logs are not the same and not 
help to find differences between real hardware and emulation.


note sam for boot amigaos need a special modified version of uboot that 
is available on acube website it is a firmware update. without modified 
uboot will be not posdible auto boot amigaos.


I know about this and if you read the cover message (RFC PATCH 00/12) I 
link to a fixed version of that U-Boot firmware (rebuilt from source with 
the mentioned patches) which works with this emulation. (The original one 
from the updater also starts but cannot boot due to some problems which 
are fixed by these patches in my image. This is described in the cover 
message.) With that fixed firmware image it should be possible to at least 
try booting AmigaOS on the emulation and get some logs. I'd be surprised 
if it also worked at this point but I could not try it as it needs an 
appropriate AmigaOS version that runs on the Sam460. It should produce 
some logs though with -serial stdio which may help finding what is 
missing.


idont know if is possible use standard uboot incuded in qemu for boot 
amigaos from uboot command line. i can ask help to Enrico Vidale as my 
FB friend but i dont know if he will be available for this kind of 
helping.


I think it would not be possible to use the U-Boot in QEMU now as that is 
for e500 CPU but this is not needed either. See above, we are aiming to 
emulate enough of the board that it can run the original firmware which 
should be able to boot these Amiga like OSes and normal Linux images used 
on the Sam460ex. This already works but things fail after or during boot 
currently. This is what needs to be debugged. So we'd need someone who has 
a Sam460 (ex or cr) board and can test on that to get logs from OSes on 
real hardware for comparison.


Regards,
BALATON Zoltan



Re: [Qemu-devel] [Qemu-ppc] [RFC PATCH 09/12] ppc440: Add emulation of plb-pcix controller found in some 440 SoCs

2017-08-18 Thread BALATON Zoltan

On Fri, 18 Aug 2017, François Revol wrote:

Le 18/08/2017 à 03:53, David Gibson a écrit :

On Sun, Aug 13, 2017 at 07:04:38PM +0200, BALATON Zoltan wrote:

You know I'm going to say it, right: needs a commit message.

What's a "plb-pcix", and what's an example of a 440 SoCs which has it.


IIRC that's the PCI(express) controller, which is not memory-mapped but
inside the DCR address space, so accessed from the PLB.


This is the PCI(X) controller only, the PCIe(xpress) controller is 
(partially) implemented in sam460ex.c 
TYPE_PPC460EX_PCIE_HOST/"ppc460ex-pcie-host". The plb-pcix is the 
compatible name the fdt refers to. I only know of the 460EX that has it 
but probably other similar SoCs (like some 440 variants) also have this 
kind of PCI controller (according to #defines in U-Boot source but don't 
remember the details).


Regards,
BALATON Zoltan


Re: [Qemu-devel] [Qemu-ppc] [RFC PATCH 09/12] ppc440: Add emulation of plb-pcix controller found in some 440 SoCs

2017-08-18 Thread François Revol
Hi,

Le 18/08/2017 à 11:30, luigi burdo a écrit :
> hi Balaton, i can help with amigaos4 for sam . i can test it on P5040
> book3e and on G5 quad book3s machine. note sam for boot amigaos need
> a special modified version of uboot that is available on acube
> website it is a firmware update. without modified uboot will be not
> posdible auto boot amigaos. idont know if is possible use standard
> uboot incuded in qemu for boot amigaos from uboot command line. i can
> ask help to Enrico Vidale as my FB friend but i dont know if he will
> be available for this kind of helping.
> 

Yes they use their own custom U-Boot, with a lot of changes and code
duplication, and added x86 emulation to run a VGA BIOS, and never
upstreamed the changes... much like any other vendor, sadly.

I once managed to build a binary from their published source code with
an old compiler, although it's not exactly the same of the binary used,
which I think is actually run with the on-chip RAM or something weird alike.

François.



Re: [Qemu-devel] [Qemu-ppc] [RFC PATCH 09/12] ppc440: Add emulation of plb-pcix controller found in some 440 SoCs

2017-08-18 Thread luigi burdo
hi Balaton,
i can help with amigaos4 for sam .
i can test it on P5040 book3e and on G5 quad book3s machine.
note sam for boot amigaos need a special modified version of uboot that is 
available on acube website it is a firmware update. without modified uboot will 
be not posdible auto boot amigaos.
idont know if is possible use standard uboot incuded in qemu for boot amigaos 
from uboot command line. i can ask help to Enrico Vidale as my FB friend but i 
dont know if he will be available for this kind of helping.

bye
luigi

Inviato da iPad

> Il giorno 14 ago 2017, alle ore 01:30, BALATON Zoltan  ha 
> scritto:
> 
> Signed-off-by: BALATON Zoltan 
> ---
> hw/ppc/Makefile.objs |   2 +-
> hw/ppc/ppc440_pcix.c | 506 +++
> 2 files changed, 507 insertions(+), 1 deletion(-)
> create mode 100644 hw/ppc/ppc440_pcix.c
> 
> diff --git a/hw/ppc/Makefile.objs b/hw/ppc/Makefile.objs
> index 2077216..9c5d58a 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 ppc4xx_i2c.o
> +obj-y += ppc4xx_pci.o ppc440_pcix.o ppc4xx_i2c.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 000..3abd0d0
> --- /dev/null
> +++ b/hw/ppc/ppc440_pcix.c
> @@ -0,0 +1,506 @@
> +/*
> + * 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 .
> + */
> +
> +#include "qemu/osdep.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 0x8
> +#define PPC440_REG_SIZE 0xff
> +
> +#define PCIC0_CFGADDR   0x0
> +#define PCIC0_CFGDATA   0x4
> +
> +#define PCIX0_POM0LAL   0x68
> +#define PCIX0_POM0LAH   0x6c
> +#define PCIX0_POM0SA0x70
> +#define PCIX0_POM0PCIAL 0x74
> +#define PCIX0_POM0PCIAH 0x78
> +#define PCIX0_POM1LAL   0x7c
> +#define PCIX0_POM1LAH   0x80
> +#define PCIX0_POM1SA0x84
> +#define PCIX0_POM1PCIAL 0x88
> +#define PCIX0_POM1PCIAH 0x8c
> +#define PCIX0_POM2SA0x90
> +
> +#define PCIX0_PIM0SAL   0x98
> +#define PCIX0_PIM0LAL   0x9c
> +#define PCIX0_PIM0LAH   0xa0
> +#define PCIX0_PIM1SA0xa4
> +#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)
> +
> +/* DMA mapping */
> +static void ppc440_pcix_update_pim(PPC440PCIXState *s, int idx)
> +{
> +MemoryRegion *mem = >pim[idx].mr;
> +char *name;
> +uint64_t size;
> +
> +if (memory_region_is_mapped(mem)) {
> +/* Before we modify