Re: [PATCH 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine

2019-12-13 Thread Niek Linnenbank
Hi Philippe,

On Fri, Dec 13, 2019 at 12:25 AM Philippe Mathieu-Daudé 
wrote:

> Cc'ing Alex.
>
> On 12/13/19 12:07 AM, Niek Linnenbank wrote:
> > Hi Philippe,
> >
> > I have discovered that the hflags assertion error you reported is not
> > caused by the Allwinner H3
> > patches but actually an existing problem. What I did is to use the
> > latest master (v4.2.0 tag) without any patches applied.
> > and tried to boot the raspi2 machine with and without debugging enabled.
> > Without debuggin, the raspi2
> > machine runs fine and can boot the 5.4.2 linux kernel. With debugging
> > enabled, the same hflags error shows.
>
> This might be the same bug I hit last week... Alex suggested a patch:
> https://www.mail-archive.com/qemu-devel@nongnu.org/msg664500.html
>
> Do you mind to try it?
>

Ahh OK, I was not aware that this was already seen and solved!
Sometimes I try use the lists.gnu.org site to keep an eye out for relevant
emails going to qemu-devel,
but I totally missed this fix. Too many e-mails. Perhaps instead I should
just subscribe to the mailing list and use filters.

I retried with the raspi2 machine and alex's patch, and indeed the hflags
error is gone and
the machine starts fine with debugging enabled.

Ofcourse, I also retried with the Allwinner H3 patches + alex's fix applied
and the orangepi-pc machine,
and unfortunately, there the hflags assertion did still show up.

Then I looked further to try and understand what is going on, and it looked
to me that the hflags is a
state variable, that needs to be rebuild after changing some other fields
inside the ARM cpu object.
And in my patch #0006 I did just that: I tried to resolve the undefined
exceptions I got using arm_set_cpu_on(),
by setting CP10,CP11 bits. So I tried to use the arm_rebuild_hflags()
function after applying the CP10,CP11 bits,
and that solved the assertion issue (see below).

Can you verify if this change also resolves the hflags assertion on your
side?

I'll also reply to the mail for patch #0006 with this info.

Regards,
Niek

diff --git a/target/arm/arm-powerctl.c b/target/arm/arm-powerctl.c
index f77a950db6..cf2f3d69ab 100644
--- a/target/arm/arm-powerctl.c
+++ b/target/arm/arm-powerctl.c
@@ -104,6 +104,9 @@ static void arm_set_cpu_on_async_work(CPUState
*target_cpu_state,
 /* Processor is not in secure mode */
 target_cpu->env.cp15.scr_el3 |= SCR_NS;

+/* Set NSACR.{CP11,CP10} so NS can access the FPU */
+target_cpu->env.cp15.nsacr |= 3 << 10;
+
 /*
  * If QEMU is providing the equivalent of EL3 firmware, then we need
  * to make sure a CPU targeting EL2 comes out of reset with a
@@ -124,6 +127,9 @@ static void arm_set_cpu_on_async_work(CPUState
*target_cpu_state,
 target_cpu->env.regs[0] = info->context_id;
 }

+/* Ensure hflags is rebuild */
+arm_rebuild_hflags(&target_cpu->env);
+
 /* Start the new CPU at the requested address */
 cpu_set_pc(target_cpu_state, info->entry);




>
> If it still fails, you might also add this one on top:
> https://www.mail-archive.com/qemu-devel@nongnu.org/msg663843.html
> and report the error.
>
> That patch is indeed very helpful


> >
> > To reproduce it, build Linux 5.4.2 with the bmc2835_defconfig:
> >
> > $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make mrproper
> > $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make bcm2835_defconfig
> > $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make -j5
> > ...
> >
> > First build QEMU without debugging and try to boot linux:
> > $ ./configure --target-list=arm-softmmu; make clean; make -j5
> > $ ./arm-softmmu/qemu-system-arm -M raspi2 \
> >-kernel $HOME/linux-5.4.2/arch/arm/boot/zImage \
> >-append 'console=ttyAMA0,115200 earlyprintk debug' \
> >-dtb $HOME/linux-5.4.2/arch/arm/boot/dts/bcm2836-rpi-2-b.dtb \
> >-m 1024 -nographic -s
> > [0.00] Booting Linux on physical CPU 0x0
> > [0.00] Linux version 5.4.2 (me@host) (gcc version 7.4.0
> (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1)) #1 Thu Dec 12 22:49:14 CET 2019
> > [0.00] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7),
> cr=10c53c7d
> > ...
> >
> > Then rebuild QEMU with debugging enabled and again try to boot linux:
> > $ ./configure --target-list=arm-softmmu --enable-debug
> --extra-cflags=-ggdb; make clean; make -j5
> > $ ./arm-softmmu/qemu-system-arm -M raspi2 \
> >-kernel $HOME/linux-5.4.2/arch/arm/boot/zImage \
> >-append 'console=ttyAMA0,115200 earlyprintk debug' \
> >-dtb $HOME/linux-5.4.2/arch/arm/boot/dts/bcm2836-rpi-2-b.dtb \
> >-m 1024 -nographic -s
> > qemu-system-arm: /home/me/qemu/target/arm/helper.c:11359:
> cpu_get_tb_cpu_state: Assertion `flags == rebuild_hflags_internal(env)'
> failed.
> > qemu-system-arm: /home/me/qemu/target/arm/helper.c:11359:
> cpu_get_tb_cpu_state: Assertion `flags == rebuild_hflags_internal(env)'
> failed.
> > qemu-system-arm: /home/me/qemu/target/arm/helper.c:11359:
> cpu_get_tb_cpu_state: Assertion `flags == rebuild_hfla

Re: [PATCH 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine

2019-12-12 Thread Philippe Mathieu-Daudé

Cc'ing Alex.

On 12/13/19 12:07 AM, Niek Linnenbank wrote:

Hi Philippe,

I have discovered that the hflags assertion error you reported is not 
caused by the Allwinner H3
patches but actually an existing problem. What I did is to use the 
latest master (v4.2.0 tag) without any patches applied.
and tried to boot the raspi2 machine with and without debugging enabled. 
Without debuggin, the raspi2
machine runs fine and can boot the 5.4.2 linux kernel. With debugging 
enabled, the same hflags error shows.


This might be the same bug I hit last week... Alex suggested a patch:
https://www.mail-archive.com/qemu-devel@nongnu.org/msg664500.html

Do you mind to try it?

If it still fails, you might also add this one on top:
https://www.mail-archive.com/qemu-devel@nongnu.org/msg663843.html
and report the error.



To reproduce it, build Linux 5.4.2 with the bmc2835_defconfig:

$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make mrproper
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make bcm2835_defconfig
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make -j5
...

First build QEMU without debugging and try to boot linux:
$ ./configure --target-list=arm-softmmu; make clean; make -j5
$ ./arm-softmmu/qemu-system-arm -M raspi2 \
   -kernel $HOME/linux-5.4.2/arch/arm/boot/zImage \
   -append 'console=ttyAMA0,115200 earlyprintk debug' \
   -dtb $HOME/linux-5.4.2/arch/arm/boot/dts/bcm2836-rpi-2-b.dtb \
   -m 1024 -nographic -s
[0.00] Booting Linux on physical CPU 0x0
[0.00] Linux version 5.4.2 (me@host) (gcc version 7.4.0 (Ubuntu/Linaro 
7.4.0-1ubuntu1~18.04.1)) #1 Thu Dec 12 22:49:14 CET 2019
[0.00] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c53c7d
...

Then rebuild QEMU with debugging enabled and again try to boot linux:
$ ./configure --target-list=arm-softmmu --enable-debug --extra-cflags=-ggdb; 
make clean; make -j5
$ ./arm-softmmu/qemu-system-arm -M raspi2 \
   -kernel $HOME/linux-5.4.2/arch/arm/boot/zImage \
   -append 'console=ttyAMA0,115200 earlyprintk debug' \
   -dtb $HOME/linux-5.4.2/arch/arm/boot/dts/bcm2836-rpi-2-b.dtb \
   -m 1024 -nographic -s
qemu-system-arm: /home/me/qemu/target/arm/helper.c:11359: cpu_get_tb_cpu_state: 
Assertion `flags == rebuild_hflags_internal(env)' failed.
qemu-system-arm: /home/me/qemu/target/arm/helper.c:11359: cpu_get_tb_cpu_state: 
Assertion `flags == rebuild_hflags_internal(env)' failed.
qemu-system-arm: /home/me/qemu/target/arm/helper.c:11359: cpu_get_tb_cpu_state: 
Assertion `flags == rebuild_hflags_internal(env)' failed.
Aborted (core dumped)

$ git describe
v4.2.0


What should be the next step? Should this be reported as a bug?


In this case we might already have the fix, but if Alex patch doesn't 
help, you are always welcome to open a bug report:

https://bugs.launchpad.net/qemu/+filebug
This help to have notes/progress gathered.

On Tue, Dec 10, 2019 at 9:12 PM Niek Linnenbank 
mailto:nieklinnenb...@gmail.com>> wrote:


Hi Philippe,

On Tue, Dec 10, 2019 at 9:26 AM Philippe Mathieu-Daudé
mailto:phi...@redhat.com>> wrote:

On 12/9/19 10:37 PM, Niek Linnenbank wrote:
 > Hi Philippe,
 >
 > On Tue, Dec 3, 2019 at 9:47 AM Philippe Mathieu-Daudé
mailto:phi...@redhat.com>
 > >> wrote:
 >
 >     On 12/2/19 10:09 PM, Niek Linnenbank wrote:
 >      > Dear QEMU developers,
 >      >
 >      > Hereby I would like to contribute the following set of
patches to
 >     QEMU
 >      > which add support for the Allwinner H3 System on Chip
and the
 >      > Orange Pi PC machine. The following features and
devices are
 >     supported:
 >      >
 >      >   * SMP (Quad Core Cortex A7)
 >      >   * Generic Interrupt Controller configuration
 >      >   * SRAM mappings
 >      >   * Timer device (re-used from Allwinner A10)
 >      >   * UART
 >      >   * SD/MMC storage controller
 >      >   * EMAC ethernet connectivity
 >      >   * USB 2.0 interfaces
 >      >   * Clock Control Unit
 >      >   * System Control module
 >      >   * Security Identifier device
 >
 >     Awesome!
 >
 >      > Functionality related to graphical output such as
HDMI, GPU,
 >      > Display Engine and audio are not included. Recently
released
 >      > mainline Linux kernels (4.19 up to latest master) and
mainline U-Boot
 >      > are known to work. The SD/MMC code is tested using
bonnie++ and
 >      > various tools such as fsck, dd and fdisk. The EMAC is
verified
 >     with iperf3
 >      > using -netdev socket.
 >      >
 >      > To build a Linux mainline kernel that can be booted by
the Orange
 >     Pi PC
 >      > ma

Re: [PATCH 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine

2019-12-12 Thread Niek Linnenbank
Hi Philippe,

I have discovered that the hflags assertion error you reported is not
caused by the Allwinner H3
patches but actually an existing problem. What I did is to use the latest
master (v4.2.0 tag) without any patches applied.
and tried to boot the raspi2 machine with and without debugging enabled.
Without debuggin, the raspi2
machine runs fine and can boot the 5.4.2 linux kernel. With debugging
enabled, the same hflags error shows.

To reproduce it, build Linux 5.4.2 with the bmc2835_defconfig:

$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make mrproper
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make bcm2835_defconfig
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make -j5
...
First build QEMU without debugging and try to boot linux:
$ ./configure --target-list=arm-softmmu; make clean; make -j5
$ ./arm-softmmu/qemu-system-arm -M raspi2 \
  -kernel $HOME/linux-5.4.2/arch/arm/boot/zImage \
  -append 'console=ttyAMA0,115200 earlyprintk debug' \
  -dtb $HOME/linux-5.4.2/arch/arm/boot/dts/bcm2836-rpi-2-b.dtb \
  -m 1024 -nographic -s
[0.00] Booting Linux on physical CPU 0x0
[0.00] Linux version 5.4.2 (me@host) (gcc version 7.4.0
(Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1)) #1 Thu Dec 12 22:49:14 CET
2019
[0.00] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c53c7d
...
Then rebuild QEMU with debugging enabled and again try to boot linux:
$ ./configure --target-list=arm-softmmu --enable-debug
--extra-cflags=-ggdb; make clean; make -j5
$ ./arm-softmmu/qemu-system-arm -M raspi2 \
  -kernel $HOME/linux-5.4.2/arch/arm/boot/zImage \
  -append 'console=ttyAMA0,115200 earlyprintk debug' \
  -dtb $HOME/linux-5.4.2/arch/arm/boot/dts/bcm2836-rpi-2-b.dtb \
  -m 1024 -nographic -s
qemu-system-arm: /home/me/qemu/target/arm/helper.c:11359:
cpu_get_tb_cpu_state: Assertion `flags ==
rebuild_hflags_internal(env)' failed.
qemu-system-arm: /home/me/qemu/target/arm/helper.c:11359:
cpu_get_tb_cpu_state: Assertion `flags ==
rebuild_hflags_internal(env)' failed.
qemu-system-arm: /home/me/qemu/target/arm/helper.c:11359:
cpu_get_tb_cpu_state: Assertion `flags ==
rebuild_hflags_internal(env)' failed.
Aborted (core dumped)

$ git describe
v4.2.0


What should be the next step? Should this be reported as a bug?

Regards,
Niek

On Tue, Dec 10, 2019 at 9:12 PM Niek Linnenbank 
wrote:

> Hi Philippe,
>
> On Tue, Dec 10, 2019 at 9:26 AM Philippe Mathieu-Daudé 
> wrote:
>
>> On 12/9/19 10:37 PM, Niek Linnenbank wrote:
>> > Hi Philippe,
>> >
>> > On Tue, Dec 3, 2019 at 9:47 AM Philippe Mathieu-Daudé <
>> phi...@redhat.com
>> > > wrote:
>> >
>> > On 12/2/19 10:09 PM, Niek Linnenbank wrote:
>> >  > Dear QEMU developers,
>> >  >
>> >  > Hereby I would like to contribute the following set of patches to
>> > QEMU
>> >  > which add support for the Allwinner H3 System on Chip and the
>> >  > Orange Pi PC machine. The following features and devices are
>> > supported:
>> >  >
>> >  >   * SMP (Quad Core Cortex A7)
>> >  >   * Generic Interrupt Controller configuration
>> >  >   * SRAM mappings
>> >  >   * Timer device (re-used from Allwinner A10)
>> >  >   * UART
>> >  >   * SD/MMC storage controller
>> >  >   * EMAC ethernet connectivity
>> >  >   * USB 2.0 interfaces
>> >  >   * Clock Control Unit
>> >  >   * System Control module
>> >  >   * Security Identifier device
>> >
>> > Awesome!
>> >
>> >  > Functionality related to graphical output such as HDMI, GPU,
>> >  > Display Engine and audio are not included. Recently released
>> >  > mainline Linux kernels (4.19 up to latest master) and mainline
>> U-Boot
>> >  > are known to work. The SD/MMC code is tested using bonnie++ and
>> >  > various tools such as fsck, dd and fdisk. The EMAC is verified
>> > with iperf3
>> >  > using -netdev socket.
>> >  >
>> >  > To build a Linux mainline kernel that can be booted by the Orange
>> > Pi PC
>> >  > machine, simply configure the kernel using the sunxi_defconfig
>> > configuration:
>> >  >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make mrproper
>> >  >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make
>> sunxi_defconfig
>> >  >
>> >  > To be able to use USB storage, you need to manually enable the
>> > corresponding
>> >  > configuration item. Start the kconfig configuration tool:
>> >  >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make menuconfig
>> >  >
>> >  > Navigate to the following item, enable it and save your
>> > configuration:
>> >  >   Device Drivers > USB support > USB Mass Storage support
>> >  >
>> >  > Build the Linux kernel with:
>> >  >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make -j5
>> >  >
>> >  > To boot the newly build linux kernel in QEMU with the Orange Pi
>> > PC machine, use:
>> >  >   $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
>> >  >   

Re: [PATCH 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine

2019-12-10 Thread Niek Linnenbank
Hi Philippe,

On Tue, Dec 10, 2019 at 9:26 AM Philippe Mathieu-Daudé 
wrote:

> On 12/9/19 10:37 PM, Niek Linnenbank wrote:
> > Hi Philippe,
> >
> > On Tue, Dec 3, 2019 at 9:47 AM Philippe Mathieu-Daudé  > > wrote:
> >
> > On 12/2/19 10:09 PM, Niek Linnenbank wrote:
> >  > Dear QEMU developers,
> >  >
> >  > Hereby I would like to contribute the following set of patches to
> > QEMU
> >  > which add support for the Allwinner H3 System on Chip and the
> >  > Orange Pi PC machine. The following features and devices are
> > supported:
> >  >
> >  >   * SMP (Quad Core Cortex A7)
> >  >   * Generic Interrupt Controller configuration
> >  >   * SRAM mappings
> >  >   * Timer device (re-used from Allwinner A10)
> >  >   * UART
> >  >   * SD/MMC storage controller
> >  >   * EMAC ethernet connectivity
> >  >   * USB 2.0 interfaces
> >  >   * Clock Control Unit
> >  >   * System Control module
> >  >   * Security Identifier device
> >
> > Awesome!
> >
> >  > Functionality related to graphical output such as HDMI, GPU,
> >  > Display Engine and audio are not included. Recently released
> >  > mainline Linux kernels (4.19 up to latest master) and mainline
> U-Boot
> >  > are known to work. The SD/MMC code is tested using bonnie++ and
> >  > various tools such as fsck, dd and fdisk. The EMAC is verified
> > with iperf3
> >  > using -netdev socket.
> >  >
> >  > To build a Linux mainline kernel that can be booted by the Orange
> > Pi PC
> >  > machine, simply configure the kernel using the sunxi_defconfig
> > configuration:
> >  >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make mrproper
> >  >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make sunxi_defconfig
> >  >
> >  > To be able to use USB storage, you need to manually enable the
> > corresponding
> >  > configuration item. Start the kconfig configuration tool:
> >  >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make menuconfig
> >  >
> >  > Navigate to the following item, enable it and save your
> > configuration:
> >  >   Device Drivers > USB support > USB Mass Storage support
> >  >
> >  > Build the Linux kernel with:
> >  >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make -j5
> >  >
> >  > To boot the newly build linux kernel in QEMU with the Orange Pi
> > PC machine, use:
> >  >   $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
> >  >   -kernel /path/to/linux/arch/arm/boot/zImage \
> >  >   -append 'console=ttyS0,115200' \
> >  >   -dtb
> /path/to/linux/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb
> >  >
> >  > Note that this kernel does not have a root filesystem. You may
> > provide it
> >  > with an official Orange Pi PC image [1] either as an SD card or as
> >  > USB mass storage. To boot using the Orange Pi PC Debian image on
> > SD card,
> >  > simply add the -sd argument and provide the proper root= kernel
> > parameter:
> >  >   $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
> >  >   -kernel /path/to/linux/arch/arm/boot/zImage \
> >  >   -append 'console=ttyS0,115200 root=/dev/mmcblk0p2' \
> >  >   -dtb
> > /path/to/linux/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb \
> >  >   -sd OrangePi_pc_debian_stretch_server_linux5.3.5_v1.0.img
> >  >
> >  > Alternatively, you can also choose to build and boot a recent
> > buildroot [2]
> >  > using the orangepi_pc_defconfig or Armbian image [3] for Orange
> > Pi PC.
> >
> > Richard, trying the Armbian image from
> > https://apt.armbian.com/pool/main/l/linux-4.20.7-sunxi/ I get:
> >
> > $ arm-softmmu/qemu-system-arm -M orangepi -m 512 -nic user \
> > -append 'console=ttyS0,115200' \
> > -kernel boot/vmlinuz-4.20.7-sunxi \
> > -dtb usr/lib/linux-image-dev-sunxi/sun8i-h3-orangepi-pc.dtb \
> > -serial stdio -d unimp
> > Uncompressing Linux... done, booting the kernel.
> > rtc: unimplemented device write (size 4, value 0x16aa0001, offset
> 0x0)
> > rtc: unimplemented device read (size 4, offset 0x0)
> > rtc: unimplemented device read (size 4, offset 0x0)
> > rtc: unimplemented device read (size 4, offset 0x8)
> > qemu-system-arm: target/arm/helper.c:11359: cpu_get_tb_cpu_state:
> > Assertion `flags == rebuild_hflags_internal(env)' failed.
> > Aborted (core dumped)
> >
> >
> > I'm trying to reproduce the error you reported here with my patch set on
> > latest master,
> > but so far without any result. The host OS I'm using is Ubuntu 18.04.3
> > LTS on x86_64.
> > I ran several times using the same 4.20.7-sunxi kernel and same command
> > line.
> >
> > Some questions that might help:
> > 1) Are there any specific steps you did in order to produce this error?
>
> I build QEMU wit

Re: [PATCH 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine

2019-12-10 Thread Niek Linnenbank
Hi Frederic,

On Tue, Dec 10, 2019 at 11:34 AM KONRAD Frederic <
frederic.kon...@adacore.com> wrote:

>
>
> Le 12/2/19 à 10:09 PM, Niek Linnenbank a écrit :
> > Dear QEMU developers,
> >
> > Hereby I would like to contribute the following set of patches to QEMU
> > which add support for the Allwinner H3 System on Chip and the
> > Orange Pi PC machine. The following features and devices are supported:
> >
> >   * SMP (Quad Core Cortex A7)
> >   * Generic Interrupt Controller configuration
> >   * SRAM mappings
> >   * Timer device (re-used from Allwinner A10)
> >   * UART
> >   * SD/MMC storage controller
> >   * EMAC ethernet connectivity
> >   * USB 2.0 interfaces
> >   * Clock Control Unit
> >   * System Control module
> >   * Security Identifier device
> >
> > Functionality related to graphical output such as HDMI, GPU,
> > Display Engine and audio are not included. Recently released
> > mainline Linux kernels (4.19 up to latest master) and mainline U-Boot
> > are known to work. The SD/MMC code is tested using bonnie++ and
> > various tools such as fsck, dd and fdisk. The EMAC is verified with
> iperf3
> > using -netdev socket.
> >
> > To build a Linux mainline kernel that can be booted by the Orange Pi PC
> > machine, simply configure the kernel using the sunxi_defconfig
> configuration:
> >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make mrproper
> >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make sunxi_defconfig
> >
> > To be able to use USB storage, you need to manually enable the
> corresponding
> > configuration item. Start the kconfig configuration tool:
> >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make menuconfig
> >
> > Navigate to the following item, enable it and save your configuration:
> >   Device Drivers > USB support > USB Mass Storage support
> >
> > Build the Linux kernel with:
> >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make -j5
> >
> > To boot the newly build linux kernel in QEMU with the Orange Pi PC
> machine, use:
> >   $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
> >   -kernel /path/to/linux/arch/arm/boot/zImage \
> >   -append 'console=ttyS0,115200' \
> >   -dtb /path/to/linux/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb
> >
> > Note that this kernel does not have a root filesystem. You may provide it
> > with an official Orange Pi PC image [1] either as an SD card or as
> > USB mass storage. To boot using the Orange Pi PC Debian image on SD card,
> > simply add the -sd argument and provide the proper root= kernel
> parameter:
> >   $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
> >   -kernel /path/to/linux/arch/arm/boot/zImage \
> >   -append 'console=ttyS0,115200 root=/dev/mmcblk0p2' \
> >   -dtb /path/to/linux/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb \
> >   -sd OrangePi_pc_debian_stretch_server_linux5.3.5_v1.0.img
> >
> > Alternatively, you can also choose to build and boot a recent buildroot
> [2]
> > using the orangepi_pc_defconfig or Armbian image [3] for Orange Pi PC.
> > To attach an USB mass storage device to the machine, simply append to
> the command:
> >   -drive if=none,id=stick,file=myimage.img \
> >   -device usb-storage,bus=usb-bus.0,drive=stick
> >
> > U-Boot mainline can be build and configured using the
> orangepi_pc_defconfig
> > using similar commands as describe above for Linux. To start U-Boot using
> > the Orange Pi PC machine, provide the u-boot binary to the -kernel
> argument:
> >   $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
> >   -kernel /path/to/uboot/u-boot -sd disk.img
> >
> > Use the following U-boot commands to load and boot a Linux kernel from
> SD card:
> >   -> setenv bootargs console=ttyS0,115200
> >   -> ext2load mmc 0 0x4200 zImage
> >   -> ext2load mmc 0 0x4300 sun8i-h2-plus-orangepi-zero.dtb
> >   -> bootz 0x4200 - 0x4300
> >
> > Looking forward to your review comments. I will do my best
> > to update the patches where needed.
> >
> > With kind regards,
> >
> > Niek Linnenbank
> >
> > [1] http://www.orangepi.org/downloadresources/
> > [2] https://buildroot.org/download.html
> > [3] https://www.armbian.com/orange-pi-pc/
>
> Works well on my side with vanilla linux-4.9.13 built with gcc-8.3.0 +
> busybox
> and sun8i-h3-orangepi-one.dtb.
>

> Tested-by: KONRAD Frederic 
>
> Thank you for testing! Great, I'll add the tag for the next v2 of the
patches.

Regards,
Niek


> >
> > Niek Linnenbank (10):
> >hw: arm: add Allwinner H3 System-on-Chip
> >hw: arm: add Xunlong Orange Pi PC machine
> >arm: allwinner-h3: add Clock Control Unit
> >arm: allwinner-h3: add USB host controller
> >arm: allwinner-h3: add System Control module
> >arm/arm-powerctl: set NSACR.{CP11,CP10} bits in arm_set_cpu_on()
> >arm: allwinner-h3: add CPU Configuration module
> >arm: allwinner-h3: add Security Identifier device
> >arm: allwinner-h3: add SD/MMC host controller
> >arm: allwinner-h3: add EMAC ethernet device
> >
> >  

Re: [PATCH 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine

2019-12-10 Thread KONRAD Frederic




Le 12/2/19 à 10:09 PM, Niek Linnenbank a écrit :

Dear QEMU developers,

Hereby I would like to contribute the following set of patches to QEMU
which add support for the Allwinner H3 System on Chip and the
Orange Pi PC machine. The following features and devices are supported:

  * SMP (Quad Core Cortex A7)
  * Generic Interrupt Controller configuration
  * SRAM mappings
  * Timer device (re-used from Allwinner A10)
  * UART
  * SD/MMC storage controller
  * EMAC ethernet connectivity
  * USB 2.0 interfaces
  * Clock Control Unit
  * System Control module
  * Security Identifier device

Functionality related to graphical output such as HDMI, GPU,
Display Engine and audio are not included. Recently released
mainline Linux kernels (4.19 up to latest master) and mainline U-Boot
are known to work. The SD/MMC code is tested using bonnie++ and
various tools such as fsck, dd and fdisk. The EMAC is verified with iperf3
using -netdev socket.

To build a Linux mainline kernel that can be booted by the Orange Pi PC
machine, simply configure the kernel using the sunxi_defconfig configuration:
  $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make mrproper
  $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make sunxi_defconfig

To be able to use USB storage, you need to manually enable the corresponding
configuration item. Start the kconfig configuration tool:
  $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make menuconfig

Navigate to the following item, enable it and save your configuration:
  Device Drivers > USB support > USB Mass Storage support

Build the Linux kernel with:
  $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make -j5

To boot the newly build linux kernel in QEMU with the Orange Pi PC machine, use:
  $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
  -kernel /path/to/linux/arch/arm/boot/zImage \
  -append 'console=ttyS0,115200' \
  -dtb /path/to/linux/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb

Note that this kernel does not have a root filesystem. You may provide it
with an official Orange Pi PC image [1] either as an SD card or as
USB mass storage. To boot using the Orange Pi PC Debian image on SD card,
simply add the -sd argument and provide the proper root= kernel parameter:
  $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
  -kernel /path/to/linux/arch/arm/boot/zImage \
  -append 'console=ttyS0,115200 root=/dev/mmcblk0p2' \
  -dtb /path/to/linux/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb \
  -sd OrangePi_pc_debian_stretch_server_linux5.3.5_v1.0.img

Alternatively, you can also choose to build and boot a recent buildroot [2]
using the orangepi_pc_defconfig or Armbian image [3] for Orange Pi PC.
To attach an USB mass storage device to the machine, simply append to the 
command:
  -drive if=none,id=stick,file=myimage.img \
  -device usb-storage,bus=usb-bus.0,drive=stick

U-Boot mainline can be build and configured using the orangepi_pc_defconfig
using similar commands as describe above for Linux. To start U-Boot using
the Orange Pi PC machine, provide the u-boot binary to the -kernel argument:
  $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
  -kernel /path/to/uboot/u-boot -sd disk.img

Use the following U-boot commands to load and boot a Linux kernel from SD card:
  -> setenv bootargs console=ttyS0,115200
  -> ext2load mmc 0 0x4200 zImage
  -> ext2load mmc 0 0x4300 sun8i-h2-plus-orangepi-zero.dtb
  -> bootz 0x4200 - 0x4300

Looking forward to your review comments. I will do my best
to update the patches where needed.

With kind regards,

Niek Linnenbank

[1] http://www.orangepi.org/downloadresources/
[2] https://buildroot.org/download.html
[3] https://www.armbian.com/orange-pi-pc/


Works well on my side with vanilla linux-4.9.13 built with gcc-8.3.0 + busybox
and sun8i-h3-orangepi-one.dtb.

Tested-by: KONRAD Frederic 



Niek Linnenbank (10):
   hw: arm: add Allwinner H3 System-on-Chip
   hw: arm: add Xunlong Orange Pi PC machine
   arm: allwinner-h3: add Clock Control Unit
   arm: allwinner-h3: add USB host controller
   arm: allwinner-h3: add System Control module
   arm/arm-powerctl: set NSACR.{CP11,CP10} bits in arm_set_cpu_on()
   arm: allwinner-h3: add CPU Configuration module
   arm: allwinner-h3: add Security Identifier device
   arm: allwinner-h3: add SD/MMC host controller
   arm: allwinner-h3: add EMAC ethernet device

  MAINTAINERS   |   8 +
  default-configs/arm-softmmu.mak   |   1 +
  hw/arm/Kconfig|   9 +
  hw/arm/Makefile.objs  |   1 +
  hw/arm/allwinner-h3.c | 316 ++
  hw/arm/orangepi.c | 114 
  hw/misc/Makefile.objs |   4 +
  hw/misc/allwinner-h3-clk.c| 227 
  hw/misc/allwinner-h3-cpucfg.c | 280 +
  hw/misc/allwinner-h3-sid.c| 162 ++
  hw/misc/allwinner-h3-syscon.c | 139 +
  hw/misc/trace-events  |

Re: [PATCH 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine

2019-12-10 Thread Philippe Mathieu-Daudé

Cc'ing Alex.

On 12/3/19 8:25 PM, Niek Linnenbank wrote:

Hi Philippe,

Thanks for your very quick response!
I remember I have seen this error before while working on the patches, 
in particular
on the SMP part. I'll try to reproduce this error with the 4.20 sunxi 
kernel you used and debug it.


Could it be related to the change I made in patch 0006 for the CP10/CP11 
bits?
Basically I needed to add that to get the CPUCFG module working. It is 
an interface

that U-Boot uses to reset the secondary cores for PSCI functionality. I used
the arm_set_cpu_on() function there to reset the cores at the desired 
start address,
but Im not sure if that function is the right choice. At some point 
while rebasing the patches,
I got undefined exceptions which turned out to be because of the 
CP10/CP11 bits missing.

If I made an obvious mistake there, please let me know and I'll correct it.

Regards,
Niek


On Tue, Dec 3, 2019 at 9:47 AM Philippe Mathieu-Daudé > wrote:


On 12/2/19 10:09 PM, Niek Linnenbank wrote:
 > Dear QEMU developers,
 >
 > Hereby I would like to contribute the following set of patches to
QEMU
 > which add support for the Allwinner H3 System on Chip and the
 > Orange Pi PC machine. The following features and devices are
supported:
 >
 >   * SMP (Quad Core Cortex A7)
 >   * Generic Interrupt Controller configuration
 >   * SRAM mappings
 >   * Timer device (re-used from Allwinner A10)
 >   * UART
 >   * SD/MMC storage controller
 >   * EMAC ethernet connectivity
 >   * USB 2.0 interfaces
 >   * Clock Control Unit
 >   * System Control module
 >   * Security Identifier device

Awesome!

 > Functionality related to graphical output such as HDMI, GPU,
 > Display Engine and audio are not included. Recently released
 > mainline Linux kernels (4.19 up to latest master) and mainline U-Boot
 > are known to work. The SD/MMC code is tested using bonnie++ and
 > various tools such as fsck, dd and fdisk. The EMAC is verified
with iperf3
 > using -netdev socket.
 >
 > To build a Linux mainline kernel that can be booted by the Orange
Pi PC
 > machine, simply configure the kernel using the sunxi_defconfig
configuration:
 >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make mrproper
 >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make sunxi_defconfig
 >
 > To be able to use USB storage, you need to manually enable the
corresponding
 > configuration item. Start the kconfig configuration tool:
 >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make menuconfig
 >
 > Navigate to the following item, enable it and save your
configuration:
 >   Device Drivers > USB support > USB Mass Storage support
 >
 > Build the Linux kernel with:
 >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make -j5
 >
 > To boot the newly build linux kernel in QEMU with the Orange Pi
PC machine, use:
 >   $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
 >       -kernel /path/to/linux/arch/arm/boot/zImage \
 >       -append 'console=ttyS0,115200' \
 >       -dtb /path/to/linux/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb
 >
 > Note that this kernel does not have a root filesystem. You may
provide it
 > with an official Orange Pi PC image [1] either as an SD card or as
 > USB mass storage. To boot using the Orange Pi PC Debian image on
SD card,
 > simply add the -sd argument and provide the proper root= kernel
parameter:
 >   $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
 >       -kernel /path/to/linux/arch/arm/boot/zImage \
 >       -append 'console=ttyS0,115200 root=/dev/mmcblk0p2' \
 >       -dtb
/path/to/linux/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb \
 >       -sd OrangePi_pc_debian_stretch_server_linux5.3.5_v1.0.img
 >
 > Alternatively, you can also choose to build and boot a recent
buildroot [2]
 > using the orangepi_pc_defconfig or Armbian image [3] for Orange
Pi PC.

Richard, trying the Armbian image from
https://apt.armbian.com/pool/main/l/linux-4.20.7-sunxi/ I get:

$ arm-softmmu/qemu-system-arm -M orangepi -m 512 -nic user \
    -append 'console=ttyS0,115200' \
    -kernel boot/vmlinuz-4.20.7-sunxi \
    -dtb usr/lib/linux-image-dev-sunxi/sun8i-h3-orangepi-pc.dtb \
    -serial stdio -d unimp
Uncompressing Linux... done, booting the kernel.
rtc: unimplemented device write (size 4, value 0x16aa0001, offset 0x0)
rtc: unimplemented device read (size 4, offset 0x0)
rtc: unimplemented device read (size 4, offset 0x0)
rtc: unimplemented device read (size 4, offset 0x8)
qemu-system-arm: target/arm/helper.c:11359: cpu_get_tb_cpu_state:
Assertion `flags == rebuild_hflags_internal(env)' failed.
Aborted (core dumped)


To have ELF debug info I built a 

Re: [PATCH 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine

2019-12-10 Thread Philippe Mathieu-Daudé

On 12/9/19 10:37 PM, Niek Linnenbank wrote:

Hi Philippe,

On Tue, Dec 3, 2019 at 9:47 AM Philippe Mathieu-Daudé > wrote:


On 12/2/19 10:09 PM, Niek Linnenbank wrote:
 > Dear QEMU developers,
 >
 > Hereby I would like to contribute the following set of patches to
QEMU
 > which add support for the Allwinner H3 System on Chip and the
 > Orange Pi PC machine. The following features and devices are
supported:
 >
 >   * SMP (Quad Core Cortex A7)
 >   * Generic Interrupt Controller configuration
 >   * SRAM mappings
 >   * Timer device (re-used from Allwinner A10)
 >   * UART
 >   * SD/MMC storage controller
 >   * EMAC ethernet connectivity
 >   * USB 2.0 interfaces
 >   * Clock Control Unit
 >   * System Control module
 >   * Security Identifier device

Awesome!

 > Functionality related to graphical output such as HDMI, GPU,
 > Display Engine and audio are not included. Recently released
 > mainline Linux kernels (4.19 up to latest master) and mainline U-Boot
 > are known to work. The SD/MMC code is tested using bonnie++ and
 > various tools such as fsck, dd and fdisk. The EMAC is verified
with iperf3
 > using -netdev socket.
 >
 > To build a Linux mainline kernel that can be booted by the Orange
Pi PC
 > machine, simply configure the kernel using the sunxi_defconfig
configuration:
 >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make mrproper
 >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make sunxi_defconfig
 >
 > To be able to use USB storage, you need to manually enable the
corresponding
 > configuration item. Start the kconfig configuration tool:
 >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make menuconfig
 >
 > Navigate to the following item, enable it and save your
configuration:
 >   Device Drivers > USB support > USB Mass Storage support
 >
 > Build the Linux kernel with:
 >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make -j5
 >
 > To boot the newly build linux kernel in QEMU with the Orange Pi
PC machine, use:
 >   $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
 >       -kernel /path/to/linux/arch/arm/boot/zImage \
 >       -append 'console=ttyS0,115200' \
 >       -dtb /path/to/linux/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb
 >
 > Note that this kernel does not have a root filesystem. You may
provide it
 > with an official Orange Pi PC image [1] either as an SD card or as
 > USB mass storage. To boot using the Orange Pi PC Debian image on
SD card,
 > simply add the -sd argument and provide the proper root= kernel
parameter:
 >   $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
 >       -kernel /path/to/linux/arch/arm/boot/zImage \
 >       -append 'console=ttyS0,115200 root=/dev/mmcblk0p2' \
 >       -dtb
/path/to/linux/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb \
 >       -sd OrangePi_pc_debian_stretch_server_linux5.3.5_v1.0.img
 >
 > Alternatively, you can also choose to build and boot a recent
buildroot [2]
 > using the orangepi_pc_defconfig or Armbian image [3] for Orange
Pi PC.

Richard, trying the Armbian image from
https://apt.armbian.com/pool/main/l/linux-4.20.7-sunxi/ I get:

$ arm-softmmu/qemu-system-arm -M orangepi -m 512 -nic user \
    -append 'console=ttyS0,115200' \
    -kernel boot/vmlinuz-4.20.7-sunxi \
    -dtb usr/lib/linux-image-dev-sunxi/sun8i-h3-orangepi-pc.dtb \
    -serial stdio -d unimp
Uncompressing Linux... done, booting the kernel.
rtc: unimplemented device write (size 4, value 0x16aa0001, offset 0x0)
rtc: unimplemented device read (size 4, offset 0x0)
rtc: unimplemented device read (size 4, offset 0x0)
rtc: unimplemented device read (size 4, offset 0x8)
qemu-system-arm: target/arm/helper.c:11359: cpu_get_tb_cpu_state:
Assertion `flags == rebuild_hflags_internal(env)' failed.
Aborted (core dumped)


I'm trying to reproduce the error you reported here with my patch set on 
latest master,
but so far without any result. The host OS I'm using is Ubuntu 18.04.3 
LTS on x86_64.
I ran several times using the same 4.20.7-sunxi kernel and same command 
line.


Some questions that might help:
1) Are there any specific steps you did in order to produce this error?


I build QEMU with:

./configure --enable-trace-backends=log --extra-cflags=-ggdb --enable-debug


2) Could this be a known / existing issue?
3) How many times did you see this error?


Always


4) Are you also using Ubuntu 18.04.3 LTS on x86_64, or a different host OS?


Host is Fedora 30.



Regards,
Niek





Re: [PATCH 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine

2019-12-09 Thread Aleksandar Markovic
On Friday, December 6, 2019, Peter Maydell  wrote:

> On Tue, 3 Dec 2019 at 19:32, Niek Linnenbank 
> wrote:
> > Indeed that sounds like an interesting combination. Are there plans to
> build a multi-arch/single-binary QEMU?
>
> This is in the category of "it would be nice in theory to
> support multi-arch guest machines, and we've made some
> small steps in that direction and/or tried to keep the
> door open for it when designing things, but it would
> still be a huge amount of work to actually implement,
> so don't hold your breath for it or make anything else
> depend on having it happen first"...
>
>
Peter,

This is one of the longest definitions of a category (in fact, most likely,
the longest) that I have heard in my life. ;))

Aleksandar



> thanks
> -- PMM
>
>


Re: [PATCH 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine

2019-12-09 Thread Niek Linnenbank
Hi Philippe,

On Tue, Dec 3, 2019 at 9:47 AM Philippe Mathieu-Daudé 
wrote:

> On 12/2/19 10:09 PM, Niek Linnenbank wrote:
> > Dear QEMU developers,
> >
> > Hereby I would like to contribute the following set of patches to QEMU
> > which add support for the Allwinner H3 System on Chip and the
> > Orange Pi PC machine. The following features and devices are supported:
> >
> >   * SMP (Quad Core Cortex A7)
> >   * Generic Interrupt Controller configuration
> >   * SRAM mappings
> >   * Timer device (re-used from Allwinner A10)
> >   * UART
> >   * SD/MMC storage controller
> >   * EMAC ethernet connectivity
> >   * USB 2.0 interfaces
> >   * Clock Control Unit
> >   * System Control module
> >   * Security Identifier device
>
> Awesome!
>
> > Functionality related to graphical output such as HDMI, GPU,
> > Display Engine and audio are not included. Recently released
> > mainline Linux kernels (4.19 up to latest master) and mainline U-Boot
> > are known to work. The SD/MMC code is tested using bonnie++ and
> > various tools such as fsck, dd and fdisk. The EMAC is verified with
> iperf3
> > using -netdev socket.
> >
> > To build a Linux mainline kernel that can be booted by the Orange Pi PC
> > machine, simply configure the kernel using the sunxi_defconfig
> configuration:
> >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make mrproper
> >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make sunxi_defconfig
> >
> > To be able to use USB storage, you need to manually enable the
> corresponding
> > configuration item. Start the kconfig configuration tool:
> >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make menuconfig
> >
> > Navigate to the following item, enable it and save your configuration:
> >   Device Drivers > USB support > USB Mass Storage support
> >
> > Build the Linux kernel with:
> >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make -j5
> >
> > To boot the newly build linux kernel in QEMU with the Orange Pi PC
> machine, use:
> >   $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
> >   -kernel /path/to/linux/arch/arm/boot/zImage \
> >   -append 'console=ttyS0,115200' \
> >   -dtb /path/to/linux/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb
> >
> > Note that this kernel does not have a root filesystem. You may provide it
> > with an official Orange Pi PC image [1] either as an SD card or as
> > USB mass storage. To boot using the Orange Pi PC Debian image on SD card,
> > simply add the -sd argument and provide the proper root= kernel
> parameter:
> >   $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
> >   -kernel /path/to/linux/arch/arm/boot/zImage \
> >   -append 'console=ttyS0,115200 root=/dev/mmcblk0p2' \
> >   -dtb /path/to/linux/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb \
> >   -sd OrangePi_pc_debian_stretch_server_linux5.3.5_v1.0.img
> >
> > Alternatively, you can also choose to build and boot a recent buildroot
> [2]
> > using the orangepi_pc_defconfig or Armbian image [3] for Orange Pi PC.
>
> Richard, trying the Armbian image from
> https://apt.armbian.com/pool/main/l/linux-4.20.7-sunxi/ I get:
>
> $ arm-softmmu/qemu-system-arm -M orangepi -m 512 -nic user \
>-append 'console=ttyS0,115200' \
>-kernel boot/vmlinuz-4.20.7-sunxi \
>-dtb usr/lib/linux-image-dev-sunxi/sun8i-h3-orangepi-pc.dtb \
>-serial stdio -d unimp
> Uncompressing Linux... done, booting the kernel.
> rtc: unimplemented device write (size 4, value 0x16aa0001, offset 0x0)
> rtc: unimplemented device read (size 4, offset 0x0)
> rtc: unimplemented device read (size 4, offset 0x0)
> rtc: unimplemented device read (size 4, offset 0x8)
> qemu-system-arm: target/arm/helper.c:11359: cpu_get_tb_cpu_state:
> Assertion `flags == rebuild_hflags_internal(env)' failed.
> Aborted (core dumped)
>

I'm trying to reproduce the error you reported here with my patch set on
latest master,
but so far without any result. The host OS I'm using is Ubuntu 18.04.3 LTS
on x86_64.
I ran several times using the same 4.20.7-sunxi kernel and same command
line.

Some questions that might help:
1) Are there any specific steps you did in order to produce this error?
2) Could this be a known / existing issue?
3) How many times did you see this error?
4) Are you also using Ubuntu 18.04.3 LTS on x86_64, or a different host OS?

Regards,
Niek


>
> (gdb) bt
> #0  0x7f6c1fa2ce35 in raise () at /lib64/libc.so.6
> #1  0x7f6c1fa17895 in abort () at /lib64/libc.so.6
> #2  0x7f6c1fa17769 in _nl_load_domain.cold () at /lib64/libc.so.6
> #3  0x7f6c1fa25566 in annobin_assert.c_end () at /lib64/libc.so.6
> #4  0x5590657e2685 in cpu_get_tb_cpu_state (env=0x5590686899b0,
> pc=0x7f6c07ffa718, cs_base=0x7f6c07ffa714, pflags=0x7f6c07ffa71c) at
> target/arm/helper.c:11359
> #5  0x55906569f962 in tb_lookup__cpu_state (cpu=0x5590686808b0,
> pc=0x7f6c07ffa718, cs_base=0x7f6c07ffa714, flags=0x7f6c07ffa71c,
> cf_mask=524288) at include/exec/tb-lookup.h:28
> #6  0x5590656a084c in tb_find (cpu=0x

Re: [PATCH 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine

2019-12-06 Thread Peter Maydell
On Tue, 3 Dec 2019 at 19:32, Niek Linnenbank  wrote:
> Indeed that sounds like an interesting combination. Are there plans to build 
> a multi-arch/single-binary QEMU?

This is in the category of "it would be nice in theory to
support multi-arch guest machines, and we've made some
small steps in that direction and/or tried to keep the
door open for it when designing things, but it would
still be a huge amount of work to actually implement,
so don't hold your breath for it or make anything else
depend on having it happen first"...

thanks
-- PMM



Re: [PATCH 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine

2019-12-03 Thread Niek Linnenbank
Hi Philippe,

Thanks for your very quick response!
I remember I have seen this error before while working on the patches, in
particular
on the SMP part. I'll try to reproduce this error with the 4.20 sunxi
kernel you used and debug it.

Could it be related to the change I made in patch 0006 for the CP10/CP11
bits?
Basically I needed to add that to get the CPUCFG module working. It is an
interface
that U-Boot uses to reset the secondary cores for PSCI functionality. I used
the arm_set_cpu_on() function there to reset the cores at the desired start
address,
but Im not sure if that function is the right choice. At some point while
rebasing the patches,
I got undefined exceptions which turned out to be because of the CP10/CP11
bits missing.
If I made an obvious mistake there, please let me know and I'll correct it.

Regards,
Niek


On Tue, Dec 3, 2019 at 9:47 AM Philippe Mathieu-Daudé 
wrote:

> On 12/2/19 10:09 PM, Niek Linnenbank wrote:
> > Dear QEMU developers,
> >
> > Hereby I would like to contribute the following set of patches to QEMU
> > which add support for the Allwinner H3 System on Chip and the
> > Orange Pi PC machine. The following features and devices are supported:
> >
> >   * SMP (Quad Core Cortex A7)
> >   * Generic Interrupt Controller configuration
> >   * SRAM mappings
> >   * Timer device (re-used from Allwinner A10)
> >   * UART
> >   * SD/MMC storage controller
> >   * EMAC ethernet connectivity
> >   * USB 2.0 interfaces
> >   * Clock Control Unit
> >   * System Control module
> >   * Security Identifier device
>
> Awesome!
>
> > Functionality related to graphical output such as HDMI, GPU,
> > Display Engine and audio are not included. Recently released
> > mainline Linux kernels (4.19 up to latest master) and mainline U-Boot
> > are known to work. The SD/MMC code is tested using bonnie++ and
> > various tools such as fsck, dd and fdisk. The EMAC is verified with
> iperf3
> > using -netdev socket.
> >
> > To build a Linux mainline kernel that can be booted by the Orange Pi PC
> > machine, simply configure the kernel using the sunxi_defconfig
> configuration:
> >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make mrproper
> >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make sunxi_defconfig
> >
> > To be able to use USB storage, you need to manually enable the
> corresponding
> > configuration item. Start the kconfig configuration tool:
> >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make menuconfig
> >
> > Navigate to the following item, enable it and save your configuration:
> >   Device Drivers > USB support > USB Mass Storage support
> >
> > Build the Linux kernel with:
> >   $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make -j5
> >
> > To boot the newly build linux kernel in QEMU with the Orange Pi PC
> machine, use:
> >   $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
> >   -kernel /path/to/linux/arch/arm/boot/zImage \
> >   -append 'console=ttyS0,115200' \
> >   -dtb /path/to/linux/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb
> >
> > Note that this kernel does not have a root filesystem. You may provide it
> > with an official Orange Pi PC image [1] either as an SD card or as
> > USB mass storage. To boot using the Orange Pi PC Debian image on SD card,
> > simply add the -sd argument and provide the proper root= kernel
> parameter:
> >   $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
> >   -kernel /path/to/linux/arch/arm/boot/zImage \
> >   -append 'console=ttyS0,115200 root=/dev/mmcblk0p2' \
> >   -dtb /path/to/linux/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb \
> >   -sd OrangePi_pc_debian_stretch_server_linux5.3.5_v1.0.img
> >
> > Alternatively, you can also choose to build and boot a recent buildroot
> [2]
> > using the orangepi_pc_defconfig or Armbian image [3] for Orange Pi PC.
>
> Richard, trying the Armbian image from
> https://apt.armbian.com/pool/main/l/linux-4.20.7-sunxi/ I get:
>
> $ arm-softmmu/qemu-system-arm -M orangepi -m 512 -nic user \
>-append 'console=ttyS0,115200' \
>-kernel boot/vmlinuz-4.20.7-sunxi \
>-dtb usr/lib/linux-image-dev-sunxi/sun8i-h3-orangepi-pc.dtb \
>-serial stdio -d unimp
> Uncompressing Linux... done, booting the kernel.
> rtc: unimplemented device write (size 4, value 0x16aa0001, offset 0x0)
> rtc: unimplemented device read (size 4, offset 0x0)
> rtc: unimplemented device read (size 4, offset 0x0)
> rtc: unimplemented device read (size 4, offset 0x8)
> qemu-system-arm: target/arm/helper.c:11359: cpu_get_tb_cpu_state:
> Assertion `flags == rebuild_hflags_internal(env)' failed.
> Aborted (core dumped)
>
> (gdb) bt
> #0  0x7f6c1fa2ce35 in raise () at /lib64/libc.so.6
> #1  0x7f6c1fa17895 in abort () at /lib64/libc.so.6
> #2  0x7f6c1fa17769 in _nl_load_domain.cold () at /lib64/libc.so.6
> #3  0x7f6c1fa25566 in annobin_assert.c_end () at /lib64/libc.so.6
> #4  0x5590657e2685 in cpu_get_tb_cpu_state (env=0x5590686899b0,
> pc=0x7f6c07ffa718, cs_base=0x7f6c07ffa

Re: [PATCH 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine

2019-12-03 Thread Niek Linnenbank
Hello Philippe,

On Tue, Dec 3, 2019 at 10:02 AM Philippe Mathieu-Daudé 
wrote:

> On 12/2/19 10:09 PM, Niek Linnenbank wrote:
> > Dear QEMU developers,
> >
> > Hereby I would like to contribute the following set of patches to QEMU
> > which add support for the Allwinner H3 System on Chip and the
> > Orange Pi PC machine. The following features and devices are supported:
> >
> >   * SMP (Quad Core Cortex A7)
> >   * Generic Interrupt Controller configuration
> >   * SRAM mappings
> >   * Timer device (re-used from Allwinner A10)
> >   * UART
> >   * SD/MMC storage controller
> >   * EMAC ethernet connectivity
> >   * USB 2.0 interfaces
> >   * Clock Control Unit
> >   * System Control module
> >   * Security Identifier device
> >
> > Functionality related to graphical output such as HDMI, GPU,
> > Display Engine and audio are not included.
>
> I'd love to see the OpenRISC AR100 core instantiated in this SoC.
>
> Your contribution makes another good example of multi-arch/single-binary
> QEMU (here 4x ARM + 1x OpenRISC).
>
>
Indeed that sounds like an interesting combination. Are there plans to
build a multi-arch/single-binary QEMU?
I have not looked yet at that part of the H3, but there is some documention
available here on this wiki:
  https://linux-sunxi.org/AR100

Regards,
Niek

-- 
Niek Linnenbank

WWW: http://www.nieklinnenbank.nl/
BLOG: http://nieklinnenbank.wordpress.com/
FUN:http://www.FreeNOS.org/


Re: [PATCH 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine

2019-12-03 Thread Philippe Mathieu-Daudé

On 12/2/19 10:09 PM, Niek Linnenbank wrote:

Dear QEMU developers,

Hereby I would like to contribute the following set of patches to QEMU
which add support for the Allwinner H3 System on Chip and the
Orange Pi PC machine. The following features and devices are supported:

  * SMP (Quad Core Cortex A7)
  * Generic Interrupt Controller configuration
  * SRAM mappings
  * Timer device (re-used from Allwinner A10)
  * UART
  * SD/MMC storage controller
  * EMAC ethernet connectivity
  * USB 2.0 interfaces
  * Clock Control Unit
  * System Control module
  * Security Identifier device

Functionality related to graphical output such as HDMI, GPU,
Display Engine and audio are not included.


I'd love to see the OpenRISC AR100 core instantiated in this SoC.

Your contribution makes another good example of multi-arch/single-binary 
QEMU (here 4x ARM + 1x OpenRISC).





Re: [PATCH 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine

2019-12-03 Thread Philippe Mathieu-Daudé

On 12/2/19 10:09 PM, Niek Linnenbank wrote:

Dear QEMU developers,

Hereby I would like to contribute the following set of patches to QEMU
which add support for the Allwinner H3 System on Chip and the
Orange Pi PC machine. The following features and devices are supported:

  * SMP (Quad Core Cortex A7)
  * Generic Interrupt Controller configuration
  * SRAM mappings
  * Timer device (re-used from Allwinner A10)
  * UART
  * SD/MMC storage controller
  * EMAC ethernet connectivity
  * USB 2.0 interfaces
  * Clock Control Unit
  * System Control module
  * Security Identifier device


Awesome!


Functionality related to graphical output such as HDMI, GPU,
Display Engine and audio are not included. Recently released
mainline Linux kernels (4.19 up to latest master) and mainline U-Boot
are known to work. The SD/MMC code is tested using bonnie++ and
various tools such as fsck, dd and fdisk. The EMAC is verified with iperf3
using -netdev socket.

To build a Linux mainline kernel that can be booted by the Orange Pi PC
machine, simply configure the kernel using the sunxi_defconfig configuration:
  $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make mrproper
  $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make sunxi_defconfig

To be able to use USB storage, you need to manually enable the corresponding
configuration item. Start the kconfig configuration tool:
  $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make menuconfig

Navigate to the following item, enable it and save your configuration:
  Device Drivers > USB support > USB Mass Storage support

Build the Linux kernel with:
  $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make -j5

To boot the newly build linux kernel in QEMU with the Orange Pi PC machine, use:
  $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
  -kernel /path/to/linux/arch/arm/boot/zImage \
  -append 'console=ttyS0,115200' \
  -dtb /path/to/linux/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb

Note that this kernel does not have a root filesystem. You may provide it
with an official Orange Pi PC image [1] either as an SD card or as
USB mass storage. To boot using the Orange Pi PC Debian image on SD card,
simply add the -sd argument and provide the proper root= kernel parameter:
  $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
  -kernel /path/to/linux/arch/arm/boot/zImage \
  -append 'console=ttyS0,115200 root=/dev/mmcblk0p2' \
  -dtb /path/to/linux/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb \
  -sd OrangePi_pc_debian_stretch_server_linux5.3.5_v1.0.img

Alternatively, you can also choose to build and boot a recent buildroot [2]
using the orangepi_pc_defconfig or Armbian image [3] for Orange Pi PC.


Richard, trying the Armbian image from 
https://apt.armbian.com/pool/main/l/linux-4.20.7-sunxi/ I get:


$ arm-softmmu/qemu-system-arm -M orangepi -m 512 -nic user \
  -append 'console=ttyS0,115200' \
  -kernel boot/vmlinuz-4.20.7-sunxi \
  -dtb usr/lib/linux-image-dev-sunxi/sun8i-h3-orangepi-pc.dtb \
  -serial stdio -d unimp
Uncompressing Linux... done, booting the kernel.
rtc: unimplemented device write (size 4, value 0x16aa0001, offset 0x0)
rtc: unimplemented device read (size 4, offset 0x0)
rtc: unimplemented device read (size 4, offset 0x0)
rtc: unimplemented device read (size 4, offset 0x8)
qemu-system-arm: target/arm/helper.c:11359: cpu_get_tb_cpu_state: 
Assertion `flags == rebuild_hflags_internal(env)' failed.

Aborted (core dumped)

(gdb) bt
#0  0x7f6c1fa2ce35 in raise () at /lib64/libc.so.6
#1  0x7f6c1fa17895 in abort () at /lib64/libc.so.6
#2  0x7f6c1fa17769 in _nl_load_domain.cold () at /lib64/libc.so.6
#3  0x7f6c1fa25566 in annobin_assert.c_end () at /lib64/libc.so.6
#4  0x5590657e2685 in cpu_get_tb_cpu_state (env=0x5590686899b0, 
pc=0x7f6c07ffa718, cs_base=0x7f6c07ffa714, pflags=0x7f6c07ffa71c) at 
target/arm/helper.c:11359
#5  0x55906569f962 in tb_lookup__cpu_state (cpu=0x5590686808b0, 
pc=0x7f6c07ffa718, cs_base=0x7f6c07ffa714, flags=0x7f6c07ffa71c, 
cf_mask=524288) at include/exec/tb-lookup.h:28
#6  0x5590656a084c in tb_find (cpu=0x5590686808b0, last_tb=0x0, 
tb_exit=0, cf_mask=524288) at accel/tcg/cpu-exec.c:403
#7  0x5590656a114a in cpu_exec (cpu=0x5590686808b0) at 
accel/tcg/cpu-exec.c:730

#8  0x55906565f6af in tcg_cpu_exec (cpu=0x5590686808b0) at cpus.c:1473
#9  0x55906565ff05 in qemu_tcg_cpu_thread_fn (arg=0x5590686808b0) at 
cpus.c:1781
#10 0x559065d54aa6 in qemu_thread_start (args=0x5590687d8c20) at 
util/qemu-thread-posix.c:519

#11 0x7f6c1fbc54c0 in start_thread () at /lib64/libpthread.so.0
#12 0x7f6c1faf1553 in clone () at /lib64/libc.so.6

(gdb) p/x flags
$1 = 0x3360

(gdb) p/x *env
$2 = {regs = {0x0 , 0x40102448}, xregs = {0x0 32 times>}, pc = 0x0, pstate = 0x0, aarch64 = 0x0, hflags = 0x3360, 
uncached_cpsr = 0x1a, spsr = 0x0, banked_spsr = {0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0},
  banked_r13 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, banked_r14 = 
{0x0, 0x0, 0x0, 0

[PATCH 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine

2019-12-02 Thread Niek Linnenbank
Dear QEMU developers,

Hereby I would like to contribute the following set of patches to QEMU
which add support for the Allwinner H3 System on Chip and the
Orange Pi PC machine. The following features and devices are supported:

 * SMP (Quad Core Cortex A7)
 * Generic Interrupt Controller configuration
 * SRAM mappings
 * Timer device (re-used from Allwinner A10)
 * UART
 * SD/MMC storage controller
 * EMAC ethernet connectivity
 * USB 2.0 interfaces
 * Clock Control Unit
 * System Control module
 * Security Identifier device

Functionality related to graphical output such as HDMI, GPU,
Display Engine and audio are not included. Recently released
mainline Linux kernels (4.19 up to latest master) and mainline U-Boot
are known to work. The SD/MMC code is tested using bonnie++ and
various tools such as fsck, dd and fdisk. The EMAC is verified with iperf3
using -netdev socket.

To build a Linux mainline kernel that can be booted by the Orange Pi PC
machine, simply configure the kernel using the sunxi_defconfig configuration:
 $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make mrproper
 $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make sunxi_defconfig

To be able to use USB storage, you need to manually enable the corresponding
configuration item. Start the kconfig configuration tool:
 $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make menuconfig

Navigate to the following item, enable it and save your configuration:
 Device Drivers > USB support > USB Mass Storage support

Build the Linux kernel with:
 $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make -j5

To boot the newly build linux kernel in QEMU with the Orange Pi PC machine, use:
 $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
 -kernel /path/to/linux/arch/arm/boot/zImage \
 -append 'console=ttyS0,115200' \
 -dtb /path/to/linux/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb

Note that this kernel does not have a root filesystem. You may provide it
with an official Orange Pi PC image [1] either as an SD card or as
USB mass storage. To boot using the Orange Pi PC Debian image on SD card,
simply add the -sd argument and provide the proper root= kernel parameter:
 $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
 -kernel /path/to/linux/arch/arm/boot/zImage \
 -append 'console=ttyS0,115200 root=/dev/mmcblk0p2' \
 -dtb /path/to/linux/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dtb \
 -sd OrangePi_pc_debian_stretch_server_linux5.3.5_v1.0.img

Alternatively, you can also choose to build and boot a recent buildroot [2]
using the orangepi_pc_defconfig or Armbian image [3] for Orange Pi PC.
To attach an USB mass storage device to the machine, simply append to the 
command:
 -drive if=none,id=stick,file=myimage.img \
 -device usb-storage,bus=usb-bus.0,drive=stick

U-Boot mainline can be build and configured using the orangepi_pc_defconfig
using similar commands as describe above for Linux. To start U-Boot using
the Orange Pi PC machine, provide the u-boot binary to the -kernel argument:
 $ qemu-system-arm -M orangepi -m 512 -nic user -nographic \
 -kernel /path/to/uboot/u-boot -sd disk.img

Use the following U-boot commands to load and boot a Linux kernel from SD card:
 -> setenv bootargs console=ttyS0,115200
 -> ext2load mmc 0 0x4200 zImage
 -> ext2load mmc 0 0x4300 sun8i-h2-plus-orangepi-zero.dtb
 -> bootz 0x4200 - 0x4300

Looking forward to your review comments. I will do my best
to update the patches where needed.

With kind regards,

Niek Linnenbank

[1] http://www.orangepi.org/downloadresources/
[2] https://buildroot.org/download.html
[3] https://www.armbian.com/orange-pi-pc/

Niek Linnenbank (10):
  hw: arm: add Allwinner H3 System-on-Chip
  hw: arm: add Xunlong Orange Pi PC machine
  arm: allwinner-h3: add Clock Control Unit
  arm: allwinner-h3: add USB host controller
  arm: allwinner-h3: add System Control module
  arm/arm-powerctl: set NSACR.{CP11,CP10} bits in arm_set_cpu_on()
  arm: allwinner-h3: add CPU Configuration module
  arm: allwinner-h3: add Security Identifier device
  arm: allwinner-h3: add SD/MMC host controller
  arm: allwinner-h3: add EMAC ethernet device

 MAINTAINERS   |   8 +
 default-configs/arm-softmmu.mak   |   1 +
 hw/arm/Kconfig|   9 +
 hw/arm/Makefile.objs  |   1 +
 hw/arm/allwinner-h3.c | 316 ++
 hw/arm/orangepi.c | 114 
 hw/misc/Makefile.objs |   4 +
 hw/misc/allwinner-h3-clk.c| 227 
 hw/misc/allwinner-h3-cpucfg.c | 280 +
 hw/misc/allwinner-h3-sid.c| 162 ++
 hw/misc/allwinner-h3-syscon.c | 139 +
 hw/misc/trace-events  |   5 +
 hw/net/Kconfig|   3 +
 hw/net/Makefile.objs  |   1 +
 hw/net/allwinner-h3-emac.c| 786 +
 hw/net/trace-events   |  10 +
 hw/sd/Makefile.objs