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

Niek Linnenbank posted 10 patches 4 years, 3 months ago
Test asan failed
Test checkpatch failed
Test FreeBSD failed
Test docker-mingw@fedora failed
Test docker-clang@ubuntu failed
Test docker-quick@centos7 failed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20191216233519.29030-1-nieklinnenbank@gmail.com
Maintainers: Beniamino Galvani <b.galvani@gmail.com>, Peter Maydell <peter.maydell@linaro.org>, Jason Wang <jasowang@redhat.com>, Niek Linnenbank <nieklinnenbank@gmail.com>, Gerd Hoffmann <kraxel@redhat.com>
There is a newer version of this series
default-configs/arm-softmmu.mak       |   1 +
hw/usb/hcd-ehci.h                     |   1 +
include/hw/arm/allwinner-h3.h         |  93 +++
include/hw/misc/allwinner-h3-clk.h    |  40 ++
include/hw/misc/allwinner-h3-cpucfg.h |  42 ++
include/hw/misc/allwinner-h3-sid.h    |  40 ++
include/hw/misc/allwinner-h3-syscon.h |  42 ++
include/hw/net/allwinner-h3-emac.h    |  67 +++
include/hw/sd/allwinner-h3-sdhost.h   |  71 +++
hw/arm/allwinner-h3.c                 | 442 ++++++++++++++
hw/arm/orangepi.c                     | 127 ++++
hw/misc/allwinner-h3-clk.c            | 238 ++++++++
hw/misc/allwinner-h3-cpucfg.c         | 288 +++++++++
hw/misc/allwinner-h3-sid.c            | 179 ++++++
hw/misc/allwinner-h3-syscon.c         | 146 +++++
hw/net/allwinner-h3-emac.c            | 829 ++++++++++++++++++++++++++
hw/sd/allwinner-h3-sdhost.c           | 813 +++++++++++++++++++++++++
hw/usb/hcd-ehci-sysbus.c              |  17 +
target/arm/arm-powerctl.c             |   3 +
MAINTAINERS                           |   8 +
hw/arm/Kconfig                        |   9 +
hw/arm/Makefile.objs                  |   1 +
hw/misc/Makefile.objs                 |   4 +
hw/misc/trace-events                  |   9 +
hw/net/Kconfig                        |   3 +
hw/net/Makefile.objs                  |   1 +
hw/net/trace-events                   |  10 +
hw/sd/Makefile.objs                   |   1 +
hw/sd/trace-events                    |   7 +
29 files changed, 3532 insertions(+)
create mode 100644 include/hw/arm/allwinner-h3.h
create mode 100644 include/hw/misc/allwinner-h3-clk.h
create mode 100644 include/hw/misc/allwinner-h3-cpucfg.h
create mode 100644 include/hw/misc/allwinner-h3-sid.h
create mode 100644 include/hw/misc/allwinner-h3-syscon.h
create mode 100644 include/hw/net/allwinner-h3-emac.h
create mode 100644 include/hw/sd/allwinner-h3-sdhost.h
create mode 100644 hw/arm/allwinner-h3.c
create mode 100644 hw/arm/orangepi.c
create mode 100644 hw/misc/allwinner-h3-clk.c
create mode 100644 hw/misc/allwinner-h3-cpucfg.c
create mode 100644 hw/misc/allwinner-h3-sid.c
create mode 100644 hw/misc/allwinner-h3-syscon.c
create mode 100644 hw/net/allwinner-h3-emac.c
create mode 100644 hw/sd/allwinner-h3-sdhost.c
[PATCH v2 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine
Posted by Niek Linnenbank 4 years, 3 months ago
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-pc -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-pc -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-pc -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 0x42000000 zImage
 -> ext2load mmc 0 0x43000000 sun8i-h3-orangepi-pc.dtb
 -> bootz 0x42000000 - 0x43000000

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

===== CHANGELOG =====

v2:
 * hw/arm/allwinner-h3.c: use cpus array in AwH3State instead of object_new()
 * hw/arm/allwinner-h3.c: use error_abort in aw_h3_realize()
 * hw/arm/allwinner-h3.c: use qdev_init_nofail() in aw_h3_realize()
 * hw/arm/allwinner-h3.c: use qdev_get_gpio_in() instead of irq array
 * hw/arm/allwinner-h3.c: add all missing unimplemented devices (memory map is complete)
 * hw/arm/allwinner-h3.c: add UART1, UART2, UART3 and remove 'if (serial_hd(...))'
 * hw/arm/allwinner-h3.c: remove sysbusdev variable and use SYS_BUS_DEVICE() directly
 * include/hw/arm/allwinner-h3.h: move PPI/SPI defines to allwinner-h3.c as enum
 * include/hw/arm/allwinner-h3.h: replace mem base/size defines with enum and memmap (like aspeed_soc.h)
 * hw/arm/orangepi.c: Only allow Cortex-A7 in machine->cpu_type
 * hw/arm/orangepi.c: Set mc->default_cpu_type to ARM_CPU_TYPE_NAME("cortex-a7")
 * hw/arm/orangepi.c: Use error_abort in orangepi_init()
 * hw/arm/orangepi.c: only allow maximum 1GiB RAM
 * hw/arm/orangepi.c: renamed machine name to 'orangepi-pc'
 * hw/arm/orangepi.c: remove mc->ignore_memory_transaction_failures = true
 * hw/arm/orangepi.c: remove unnecessary check for 'sd-bus'
 * hw/net/allwinner-h3-emac.c: use AW_H3_EMAC() for opaque in read/write functions
 * hw/sd/allwinner-h3-sdhost.c: replace register defines with enums
 * hw/sd/allwinner-h3-sdhost.c: remove 'irq_en' and use if() to set 'irq' in update_irq function
 * hw/sd/allwinner-h3-sdhost.c: simplified if (rlen==) conditions in send_command function
 * hw/sd/allwinner-h3-sdhost.c: use KiB macro to set desc->size
 * hw/sd/allwinner-h3-sdhost.c: use ARRAY_SIZE() macro in reset function
 * hw/misc/allwinner-h3-sid.c: replace randomized identifier with QemuUUID property
 * hw/misc/allwinner-h3-sid.c: add tracing for read/write functions
 * hw/misc/allwinner-h3-sid.c: fix incorrect usage of REG_PRCTL_OP_LOCK/REG_PRCTL_WRITE
 * hw/misc/trace-events: add allwinner_h3_cpucfg* entries in correct patch (#7)
 * hw/*/trace-events: use PRIu32/PRIx32 macros for size and max fields
 * hw/*/allwinner-h3-*.c: set .impl.min_access_size = 4 to restrict MMIO access to 32-bit aligned
 * hw/*/allwinner-h3-*.c: replace register defines with enums
 * hw/*/allwinner-h3-*.c: set VMStateDescription.name with inline string (dont use TYPE macro)
 * include/hw/*/allwinner-h3-*.h: remove MEM_SIZE define and use size inline in the source file
 * target/arm/arm-powerctl.c: invoke arm_rebuild_hflags() after setting CP15 bits

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: rebuild hflags after setting CP15 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

 default-configs/arm-softmmu.mak       |   1 +
 hw/usb/hcd-ehci.h                     |   1 +
 include/hw/arm/allwinner-h3.h         |  93 +++
 include/hw/misc/allwinner-h3-clk.h    |  40 ++
 include/hw/misc/allwinner-h3-cpucfg.h |  42 ++
 include/hw/misc/allwinner-h3-sid.h    |  40 ++
 include/hw/misc/allwinner-h3-syscon.h |  42 ++
 include/hw/net/allwinner-h3-emac.h    |  67 +++
 include/hw/sd/allwinner-h3-sdhost.h   |  71 +++
 hw/arm/allwinner-h3.c                 | 442 ++++++++++++++
 hw/arm/orangepi.c                     | 127 ++++
 hw/misc/allwinner-h3-clk.c            | 238 ++++++++
 hw/misc/allwinner-h3-cpucfg.c         | 288 +++++++++
 hw/misc/allwinner-h3-sid.c            | 179 ++++++
 hw/misc/allwinner-h3-syscon.c         | 146 +++++
 hw/net/allwinner-h3-emac.c            | 829 ++++++++++++++++++++++++++
 hw/sd/allwinner-h3-sdhost.c           | 813 +++++++++++++++++++++++++
 hw/usb/hcd-ehci-sysbus.c              |  17 +
 target/arm/arm-powerctl.c             |   3 +
 MAINTAINERS                           |   8 +
 hw/arm/Kconfig                        |   9 +
 hw/arm/Makefile.objs                  |   1 +
 hw/misc/Makefile.objs                 |   4 +
 hw/misc/trace-events                  |   9 +
 hw/net/Kconfig                        |   3 +
 hw/net/Makefile.objs                  |   1 +
 hw/net/trace-events                   |  10 +
 hw/sd/Makefile.objs                   |   1 +
 hw/sd/trace-events                    |   7 +
 29 files changed, 3532 insertions(+)
 create mode 100644 include/hw/arm/allwinner-h3.h
 create mode 100644 include/hw/misc/allwinner-h3-clk.h
 create mode 100644 include/hw/misc/allwinner-h3-cpucfg.h
 create mode 100644 include/hw/misc/allwinner-h3-sid.h
 create mode 100644 include/hw/misc/allwinner-h3-syscon.h
 create mode 100644 include/hw/net/allwinner-h3-emac.h
 create mode 100644 include/hw/sd/allwinner-h3-sdhost.h
 create mode 100644 hw/arm/allwinner-h3.c
 create mode 100644 hw/arm/orangepi.c
 create mode 100644 hw/misc/allwinner-h3-clk.c
 create mode 100644 hw/misc/allwinner-h3-cpucfg.c
 create mode 100644 hw/misc/allwinner-h3-sid.c
 create mode 100644 hw/misc/allwinner-h3-syscon.c
 create mode 100644 hw/net/allwinner-h3-emac.c
 create mode 100644 hw/sd/allwinner-h3-sdhost.c

-- 
2.17.1


Re: [PATCH v2 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine
Posted by Niek Linnenbank 4 years, 2 months ago
Hi,

Here a short status report of this patch series.

For V3 update I already prepared the following:
 - reworked all review comments from Philippe, except:
   - patch#8: question for the SID, whether command-line override is
required (and how is the best way for machine-specific cli arg?) [1]
- added BootROM support, allows booting with only specifying -sd <IMG>
- added SDRAM controller driver, for U-Boot SPL
- added Allwinner generic RTC driver (for both Cubieboard and OrangePi PC,
supports sun4i, sun6i, sun7i)
- small fixes for EMAC

My current TODO:
 - integrate Philips acceptance tests in the series
 - integrate Philips work for generalizing the Allwinner timer, and finish
it
 - test and fix BSD targets (NetBSD, FreeBSD) [2, 3]
 - further generalize the series to cover very similar SoCs: H2+, H5

Does anyone have more comments/requests for the V3 update?

[1] https://lists.gnu.org/archive/html/qemu-devel/2019-12/msg04049.html
[2] https://wiki.netbsd.org/ports/evbarm/allwinner/
[3]
https://wiki.freebsd.org/action/show/arm/Allwinner?action=show&redirect=FreeBSD%2Farm%2FAllwinner

On Tue, Dec 17, 2019 at 12:35 AM Niek Linnenbank <nieklinnenbank@gmail.com>
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. 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-pc -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-pc -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-pc -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 0x42000000 zImage
>  -> ext2load mmc 0 0x43000000 sun8i-h3-orangepi-pc.dtb
>  -> bootz 0x42000000 - 0x43000000
>
> Looking forward to your review comments. I will do my best
> to update the patches where needed.
>
> ===== CHANGELOG =====
>
> v2:
>  * hw/arm/allwinner-h3.c: use cpus array in AwH3State instead of
> object_new()
>  * hw/arm/allwinner-h3.c: use error_abort in aw_h3_realize()
>  * hw/arm/allwinner-h3.c: use qdev_init_nofail() in aw_h3_realize()
>  * hw/arm/allwinner-h3.c: use qdev_get_gpio_in() instead of irq array
>  * hw/arm/allwinner-h3.c: add all missing unimplemented devices (memory
> map is complete)
>  * hw/arm/allwinner-h3.c: add UART1, UART2, UART3 and remove 'if
> (serial_hd(...))'
>  * hw/arm/allwinner-h3.c: remove sysbusdev variable and use
> SYS_BUS_DEVICE() directly
>  * include/hw/arm/allwinner-h3.h: move PPI/SPI defines to allwinner-h3.c
> as enum
>  * include/hw/arm/allwinner-h3.h: replace mem base/size defines with enum
> and memmap (like aspeed_soc.h)
>  * hw/arm/orangepi.c: Only allow Cortex-A7 in machine->cpu_type
>  * hw/arm/orangepi.c: Set mc->default_cpu_type to
> ARM_CPU_TYPE_NAME("cortex-a7")
>  * hw/arm/orangepi.c: Use error_abort in orangepi_init()
>  * hw/arm/orangepi.c: only allow maximum 1GiB RAM
>  * hw/arm/orangepi.c: renamed machine name to 'orangepi-pc'
>  * hw/arm/orangepi.c: remove mc->ignore_memory_transaction_failures = true
>  * hw/arm/orangepi.c: remove unnecessary check for 'sd-bus'
>  * hw/net/allwinner-h3-emac.c: use AW_H3_EMAC() for opaque in read/write
> functions
>  * hw/sd/allwinner-h3-sdhost.c: replace register defines with enums
>  * hw/sd/allwinner-h3-sdhost.c: remove 'irq_en' and use if() to set 'irq'
> in update_irq function
>  * hw/sd/allwinner-h3-sdhost.c: simplified if (rlen==) conditions in
> send_command function
>  * hw/sd/allwinner-h3-sdhost.c: use KiB macro to set desc->size
>  * hw/sd/allwinner-h3-sdhost.c: use ARRAY_SIZE() macro in reset function
>  * hw/misc/allwinner-h3-sid.c: replace randomized identifier with QemuUUID
> property
>  * hw/misc/allwinner-h3-sid.c: add tracing for read/write functions
>  * hw/misc/allwinner-h3-sid.c: fix incorrect usage of
> REG_PRCTL_OP_LOCK/REG_PRCTL_WRITE
>  * hw/misc/trace-events: add allwinner_h3_cpucfg* entries in correct patch
> (#7)
>  * hw/*/trace-events: use PRIu32/PRIx32 macros for size and max fields
>  * hw/*/allwinner-h3-*.c: set .impl.min_access_size = 4 to restrict MMIO
> access to 32-bit aligned
>  * hw/*/allwinner-h3-*.c: replace register defines with enums
>  * hw/*/allwinner-h3-*.c: set VMStateDescription.name with inline string
> (dont use TYPE macro)
>  * include/hw/*/allwinner-h3-*.h: remove MEM_SIZE define and use size
> inline in the source file
>  * target/arm/arm-powerctl.c: invoke arm_rebuild_hflags() after setting
> CP15 bits
>
> 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: rebuild hflags after setting CP15 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
>
>  default-configs/arm-softmmu.mak       |   1 +
>  hw/usb/hcd-ehci.h                     |   1 +
>  include/hw/arm/allwinner-h3.h         |  93 +++
>  include/hw/misc/allwinner-h3-clk.h    |  40 ++
>  include/hw/misc/allwinner-h3-cpucfg.h |  42 ++
>  include/hw/misc/allwinner-h3-sid.h    |  40 ++
>  include/hw/misc/allwinner-h3-syscon.h |  42 ++
>  include/hw/net/allwinner-h3-emac.h    |  67 +++
>  include/hw/sd/allwinner-h3-sdhost.h   |  71 +++
>  hw/arm/allwinner-h3.c                 | 442 ++++++++++++++
>  hw/arm/orangepi.c                     | 127 ++++
>  hw/misc/allwinner-h3-clk.c            | 238 ++++++++
>  hw/misc/allwinner-h3-cpucfg.c         | 288 +++++++++
>  hw/misc/allwinner-h3-sid.c            | 179 ++++++
>  hw/misc/allwinner-h3-syscon.c         | 146 +++++
>  hw/net/allwinner-h3-emac.c            | 829 ++++++++++++++++++++++++++
>  hw/sd/allwinner-h3-sdhost.c           | 813 +++++++++++++++++++++++++
>  hw/usb/hcd-ehci-sysbus.c              |  17 +
>  target/arm/arm-powerctl.c             |   3 +
>  MAINTAINERS                           |   8 +
>  hw/arm/Kconfig                        |   9 +
>  hw/arm/Makefile.objs                  |   1 +
>  hw/misc/Makefile.objs                 |   4 +
>  hw/misc/trace-events                  |   9 +
>  hw/net/Kconfig                        |   3 +
>  hw/net/Makefile.objs                  |   1 +
>  hw/net/trace-events                   |  10 +
>  hw/sd/Makefile.objs                   |   1 +
>  hw/sd/trace-events                    |   7 +
>  29 files changed, 3532 insertions(+)
>  create mode 100644 include/hw/arm/allwinner-h3.h
>  create mode 100644 include/hw/misc/allwinner-h3-clk.h
>  create mode 100644 include/hw/misc/allwinner-h3-cpucfg.h
>  create mode 100644 include/hw/misc/allwinner-h3-sid.h
>  create mode 100644 include/hw/misc/allwinner-h3-syscon.h
>  create mode 100644 include/hw/net/allwinner-h3-emac.h
>  create mode 100644 include/hw/sd/allwinner-h3-sdhost.h
>  create mode 100644 hw/arm/allwinner-h3.c
>  create mode 100644 hw/arm/orangepi.c
>  create mode 100644 hw/misc/allwinner-h3-clk.c
>  create mode 100644 hw/misc/allwinner-h3-cpucfg.c
>  create mode 100644 hw/misc/allwinner-h3-sid.c
>  create mode 100644 hw/misc/allwinner-h3-syscon.c
>  create mode 100644 hw/net/allwinner-h3-emac.c
>  create mode 100644 hw/sd/allwinner-h3-sdhost.c
>
> --
> 2.17.1
>
>

-- 
Niek Linnenbank
Re: [PATCH v2 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine
Posted by Philippe Mathieu-Daudé 4 years, 2 months ago
On 12/30/19 12:28 PM, Niek Linnenbank wrote:
> Hi,
> 
> Here a short status report of this patch series.

Good idea!

> 
> For V3 update I already prepared the following:
>   - reworked all review comments from Philippe, except:
>     - patch#8: question for the SID, whether command-line override is 
> required (and how is the best way for machine-specific cli arg?) [1]

Answered recently.

> - added BootROM support, allows booting with only specifying -sd <IMG>
> - added SDRAM controller driver, for U-Boot SPL
> - added Allwinner generic RTC driver (for both Cubieboard and OrangePi 
> PC, supports sun4i, sun6i, sun7i)
> - small fixes for EMAC
> 
> My current TODO:
>   - integrate Philips acceptance tests in the series

You can queue them in your series, adding your Signed-off-by tag after 
mine. See:
https://www.kernel.org/doc/html/latest/process/submitting-patches.html#sign-your-work-the-developer-s-certificate-of-origin

   The sign-off is a simple line at the end of the explanation for the 
patch, which certifies that you wrote it or otherwise have the right to 
pass it on as an open-source patch.

See point (c).

>   - integrate Philips work for generalizing the Allwinner timer, and 
> finish it

We can also do that later, and get your work merged first.

>   - test and fix BSD targets (NetBSD, FreeBSD) [2, 3]
>   - further generalize the series to cover very similar SoCs: H2+, H5
> 
> Does anyone have more comments/requests for the V3 update?
> 
> [1] https://lists.gnu.org/archive/html/qemu-devel/2019-12/msg04049.html
> [2] https://wiki.netbsd.org/ports/evbarm/allwinner/
> [3] 
> https://wiki.freebsd.org/action/show/arm/Allwinner?action=show&redirect=FreeBSD%2Farm%2FAllwinner


Re: [PATCH v2 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine
Posted by Niek Linnenbank 4 years, 2 months ago
On Mon, Dec 30, 2019 at 3:56 PM Philippe Mathieu-Daudé <philmd@redhat.com>
wrote:

> On 12/30/19 12:28 PM, Niek Linnenbank wrote:
> > Hi,
> >
> > Here a short status report of this patch series.
>
> Good idea!
>
> >
> > For V3 update I already prepared the following:
> >   - reworked all review comments from Philippe, except:
> >     - patch#8: question for the SID, whether command-line override is
> > required (and how is the best way for machine-specific cli arg?) [1]
>
> Answered recently.
>
Thanks!

>
> > - added BootROM support, allows booting with only specifying -sd <IMG>
> > - added SDRAM controller driver, for U-Boot SPL
> > - added Allwinner generic RTC driver (for both Cubieboard and OrangePi
> > PC, supports sun4i, sun6i, sun7i)
> > - small fixes for EMAC
> >
> > My current TODO:
> >   - integrate Philips acceptance tests in the series
>
> You can queue them in your series, adding your Signed-off-by tag after
> mine. See:
>
> https://www.kernel.org/doc/html/latest/process/submitting-patches.html#sign-your-work-the-developer-s-certificate-of-origin
>
>    The sign-off is a simple line at the end of the explanation for the
> patch, which certifies that you wrote it or otherwise have the right to
> pass it on as an open-source patch.
>
> See point (c).
>
> Ah that certainly helps. I'll read that page.


> >   - integrate Philips work for generalizing the Allwinner timer, and
> > finish it
>
> We can also do that later, and get your work merged first.
>

Ok that sounds very good! Agreed, lets do the timer work later.


>
> >   - test and fix BSD targets (NetBSD, FreeBSD) [2, 3]
> >   - further generalize the series to cover very similar SoCs: H2+, H5
> >
> > Does anyone have more comments/requests for the V3 update?
> >
> > [1] https://lists.gnu.org/archive/html/qemu-devel/2019-12/msg04049.html
> > [2] https://wiki.netbsd.org/ports/evbarm/allwinner/
> > [3]
> >
> https://wiki.freebsd.org/action/show/arm/Allwinner?action=show&redirect=FreeBSD%2Farm%2FAllwinner
>
>

-- 
Niek Linnenbank
Re: [PATCH v2 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine
Posted by Niek Linnenbank 4 years, 2 months ago
Hi Philippe,

I'm almost ready to send out v3 here.

Now for documentation I'm not sure yet what to do:

1) Where should I place board documentation?
    For example, the information that I wrote on the cover letter with
instructions on how to get the board up and running,
    some description of the design, where to find more inforformation,
datasheet sources, etc. I don't yet see any documentation
   for the other boards in the source. In my opinion, it is important to
keep that information somewhere, such that also in the future
   the boards can still be properly maintained. Can I / shall I place a new
file like ./docs/hw/arm/orangepi.txt for that?

 2) Is is allowed / encouraged to provide Doxygen-style comments in the
header files in include/hw/*?
   I see that some of the API's have that, but the boards and devices
mostly are free of Doxygen-style comments.
   It takes some work, but I think it can really help to give more insight
/ background info on how things are working
   for the devices and boards. But if it's not preferred for QEMU, I'm fine
with that as well.

Regards,
Niek

On Mon, Dec 30, 2019 at 9:10 PM Niek Linnenbank <nieklinnenbank@gmail.com>
wrote:

>
>
> On Mon, Dec 30, 2019 at 3:56 PM Philippe Mathieu-Daudé <philmd@redhat.com>
> wrote:
>
>> On 12/30/19 12:28 PM, Niek Linnenbank wrote:
>> > Hi,
>> >
>> > Here a short status report of this patch series.
>>
>> Good idea!
>>
>> >
>> > For V3 update I already prepared the following:
>> >   - reworked all review comments from Philippe, except:
>> >     - patch#8: question for the SID, whether command-line override is
>> > required (and how is the best way for machine-specific cli arg?) [1]
>>
>> Answered recently.
>>
> Thanks!
>
>>
>> > - added BootROM support, allows booting with only specifying -sd <IMG>
>> > - added SDRAM controller driver, for U-Boot SPL
>> > - added Allwinner generic RTC driver (for both Cubieboard and OrangePi
>> > PC, supports sun4i, sun6i, sun7i)
>> > - small fixes for EMAC
>> >
>> > My current TODO:
>> >   - integrate Philips acceptance tests in the series
>>
>> You can queue them in your series, adding your Signed-off-by tag after
>> mine. See:
>>
>> https://www.kernel.org/doc/html/latest/process/submitting-patches.html#sign-your-work-the-developer-s-certificate-of-origin
>>
>>    The sign-off is a simple line at the end of the explanation for the
>> patch, which certifies that you wrote it or otherwise have the right to
>> pass it on as an open-source patch.
>>
>> See point (c).
>>
>> Ah that certainly helps. I'll read that page.
>
>
>> >   - integrate Philips work for generalizing the Allwinner timer, and
>> > finish it
>>
>> We can also do that later, and get your work merged first.
>>
>
> Ok that sounds very good! Agreed, lets do the timer work later.
>
>
>>
>> >   - test and fix BSD targets (NetBSD, FreeBSD) [2, 3]
>> >   - further generalize the series to cover very similar SoCs: H2+, H5
>> >
>> > Does anyone have more comments/requests for the V3 update?
>> >
>> > [1] https://lists.gnu.org/archive/html/qemu-devel/2019-12/msg04049.html
>> > [2] https://wiki.netbsd.org/ports/evbarm/allwinner/
>> > [3]
>> >
>> https://wiki.freebsd.org/action/show/arm/Allwinner?action=show&redirect=FreeBSD%2Farm%2FAllwinner
>>
>>
>
> --
> Niek Linnenbank
>
>

-- 
Niek Linnenbank
Re: [PATCH v2 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine
Posted by Philippe Mathieu-Daudé 4 years, 2 months ago
Hi Niek,

On 1/2/20 8:52 PM, Niek Linnenbank wrote:
> Hi Philippe,
> 
> I'm almost ready to send out v3 here.
> 
> Now for documentation I'm not sure yet what to do:
> 
> 1) Where should I place board documentation?
>      For example, the information that I wrote on the cover letter with 
> instructions on how to get the board up and running,
>      some description of the design, where to find more inforformation, 
> datasheet sources, etc. I don't yet see any documentation

We usually refer the datasheet in the implementation header, see:

$ git grep -F .pdf hw/ | wc -l
62

You can cite the datasheet globally in hw/arm/allwinner-h3.c, and then 
the particular chapters or source files in the other hw/*/allwinner-* files.

>     for the other boards in the source. In my opinion, it is important 
> to keep that information somewhere, such that also in the future
>     the boards can still be properly maintained. Can I / shall I place a 
> new file like ./docs/hw/arm/orangepi.txt for that?

See docs/microvm.rst which is a recent example of machine documentation,
the obvious name is docs/orangepi.rst.

Maybe refer to this file in hw/arm/orangepi.c header for completeness.

>   2) Is is allowed / encouraged to provide Doxygen-style comments in the 
> header files in include/hw/*?
>     I see that some of the API's have that, but the boards and devices 
> mostly are free of Doxygen-style comments.
>     It takes some work, but I think it can really help to give more 
> insight / background info on how things are working
>     for the devices and boards. But if it's not preferred for QEMU, I'm 
> fine with that as well.

Documentation is certainly welcome!

There are 2 different schools over the codebase, one that document the 
declarations, and another that documents the implementation/definition.

I personally prefer to document the headers, which is where I look when 
I want to consume an API.
The implementation school says this can lead to documentation getting 
outdated.

So if you are willing to document, I'd suggest to document your 
include/hw/ files.

Happy new year!

Phil.

> On Mon, Dec 30, 2019 at 9:10 PM Niek Linnenbank 
> <nieklinnenbank@gmail.com <mailto:nieklinnenbank@gmail.com>> wrote:
> 
> 
> 
>     On Mon, Dec 30, 2019 at 3:56 PM Philippe Mathieu-Daudé
>     <philmd@redhat.com <mailto:philmd@redhat.com>> wrote:
> 
>         On 12/30/19 12:28 PM, Niek Linnenbank wrote:
>          > Hi,
>          >
>          > Here a short status report of this patch series.
> 
>         Good idea!
> 
>          >
>          > For V3 update I already prepared the following:
>          >   - reworked all review comments from Philippe, except:
>          >     - patch#8: question for the SID, whether command-line
>         override is
>          > required (and how is the best way for machine-specific cli
>         arg?) [1]
> 
>         Answered recently.
> 
>     Thanks!
> 
> 
>          > - added BootROM support, allows booting with only specifying
>         -sd <IMG>
>          > - added SDRAM controller driver, for U-Boot SPL
>          > - added Allwinner generic RTC driver (for both Cubieboard and
>         OrangePi
>          > PC, supports sun4i, sun6i, sun7i)
>          > - small fixes for EMAC
>          >
>          > My current TODO:
>          >   - integrate Philips acceptance tests in the series
> 
>         You can queue them in your series, adding your Signed-off-by tag
>         after
>         mine. See:
>         https://www.kernel.org/doc/html/latest/process/submitting-patches.html#sign-your-work-the-developer-s-certificate-of-origin
> 
>             The sign-off is a simple line at the end of the explanation
>         for the
>         patch, which certifies that you wrote it or otherwise have the
>         right to
>         pass it on as an open-source patch.
> 
>         See point (c).
> 
>     Ah that certainly helps. I'll read that page.
> 
>          >   - integrate Philips work for generalizing the Allwinner
>         timer, and
>          > finish it
> 
>         We can also do that later, and get your work merged first.
> 
> 
>     Ok that sounds very good! Agreed, lets do the timer work later.
> 
> 
>          >   - test and fix BSD targets (NetBSD, FreeBSD) [2, 3]
>          >   - further generalize the series to cover very similar SoCs:
>         H2+, H5
>          >
>          > Does anyone have more comments/requests for the V3 update?
>          >
>          > [1]
>         https://lists.gnu.org/archive/html/qemu-devel/2019-12/msg04049.html
>          > [2] https://wiki.netbsd.org/ports/evbarm/allwinner/
>          > [3]
>          >
>         https://wiki.freebsd.org/action/show/arm/Allwinner?action=show&redirect=FreeBSD%2Farm%2FAllwinner
> 
> 
> 
>     -- 
>     Niek Linnenbank
> 
> 
> 
> -- 
> Niek Linnenbank
> 


Re: [PATCH v2 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine
Posted by Niek Linnenbank 4 years, 2 months ago
Hey Philippe,

On Thu, Jan 2, 2020 at 10:11 PM Philippe Mathieu-Daudé <philmd@redhat.com>
wrote:

> Hi Niek,
>
> On 1/2/20 8:52 PM, Niek Linnenbank wrote:
> > Hi Philippe,
> >
> > I'm almost ready to send out v3 here.
> >
> > Now for documentation I'm not sure yet what to do:
> >
> > 1) Where should I place board documentation?
> >      For example, the information that I wrote on the cover letter with
> > instructions on how to get the board up and running,
> >      some description of the design, where to find more inforformation,
> > datasheet sources, etc. I don't yet see any documentation
>
> We usually refer the datasheet in the implementation header, see:
>
> $ git grep -F .pdf hw/ | wc -l
> 62
>
> You can cite the datasheet globally in hw/arm/allwinner-h3.c, and then
> the particular chapters or source files in the other hw/*/allwinner-*
> files.
>
> >     for the other boards in the source. In my opinion, it is important
> > to keep that information somewhere, such that also in the future
> >     the boards can still be properly maintained. Can I / shall I place a
> > new file like ./docs/hw/arm/orangepi.txt for that?
>
> See docs/microvm.rst which is a recent example of machine documentation,
> the obvious name is docs/orangepi.rst.
>
> Ah great, that is very helpful! I will use the microvm.rst as example and
add a new file docs/orangepi.rst to document the board.


> Maybe refer to this file in hw/arm/orangepi.c header for completeness.
>
> >   2) Is is allowed / encouraged to provide Doxygen-style comments in the
> > header files in include/hw/*?
> >     I see that some of the API's have that, but the boards and devices
> > mostly are free of Doxygen-style comments.
> >     It takes some work, but I think it can really help to give more
> > insight / background info on how things are working
> >     for the devices and boards. But if it's not preferred for QEMU, I'm
> > fine with that as well.
>
> Documentation is certainly welcome!
>
> There are 2 different schools over the codebase, one that document the
> declarations, and another that documents the implementation/definition.
>
> I personally prefer to document the headers, which is where I look when
> I want to consume an API.
> The implementation school says this can lead to documentation getting
> outdated.
>
> So if you are willing to document, I'd suggest to document your
> include/hw/ files.
>

OK, thanks for clarifying! Yes, I also prefer to have it in the header
files, it
makes the most sense indeed.


>
> Happy new year!
>

And happy new year to you as well Philippe!

Regards,
Niek

>
> Phil.
>
> > On Mon, Dec 30, 2019 at 9:10 PM Niek Linnenbank
> > <nieklinnenbank@gmail.com <mailto:nieklinnenbank@gmail.com>> wrote:
> >
> >
> >
> >     On Mon, Dec 30, 2019 at 3:56 PM Philippe Mathieu-Daudé
> >     <philmd@redhat.com <mailto:philmd@redhat.com>> wrote:
> >
> >         On 12/30/19 12:28 PM, Niek Linnenbank wrote:
> >          > Hi,
> >          >
> >          > Here a short status report of this patch series.
> >
> >         Good idea!
> >
> >          >
> >          > For V3 update I already prepared the following:
> >          >   - reworked all review comments from Philippe, except:
> >          >     - patch#8: question for the SID, whether command-line
> >         override is
> >          > required (and how is the best way for machine-specific cli
> >         arg?) [1]
> >
> >         Answered recently.
> >
> >     Thanks!
> >
> >
> >          > - added BootROM support, allows booting with only specifying
> >         -sd <IMG>
> >          > - added SDRAM controller driver, for U-Boot SPL
> >          > - added Allwinner generic RTC driver (for both Cubieboard and
> >         OrangePi
> >          > PC, supports sun4i, sun6i, sun7i)
> >          > - small fixes for EMAC
> >          >
> >          > My current TODO:
> >          >   - integrate Philips acceptance tests in the series
> >
> >         You can queue them in your series, adding your Signed-off-by tag
> >         after
> >         mine. See:
> >
> https://www.kernel.org/doc/html/latest/process/submitting-patches.html#sign-your-work-the-developer-s-certificate-of-origin
> >
> >             The sign-off is a simple line at the end of the explanation
> >         for the
> >         patch, which certifies that you wrote it or otherwise have the
> >         right to
> >         pass it on as an open-source patch.
> >
> >         See point (c).
> >
> >     Ah that certainly helps. I'll read that page.
> >
> >          >   - integrate Philips work for generalizing the Allwinner
> >         timer, and
> >          > finish it
> >
> >         We can also do that later, and get your work merged first.
> >
> >
> >     Ok that sounds very good! Agreed, lets do the timer work later.
> >
> >
> >          >   - test and fix BSD targets (NetBSD, FreeBSD) [2, 3]
> >          >   - further generalize the series to cover very similar SoCs:
> >         H2+, H5
> >          >
> >          > Does anyone have more comments/requests for the V3 update?
> >          >
> >          > [1]
> >
> https://lists.gnu.org/archive/html/qemu-devel/2019-12/msg04049.html
> >          > [2] https://wiki.netbsd.org/ports/evbarm/allwinner/
> >          > [3]
> >          >
> >
> https://wiki.freebsd.org/action/show/arm/Allwinner?action=show&redirect=FreeBSD%2Farm%2FAllwinner
> >
> >
> >
> >     --
> >     Niek Linnenbank
> >
> >
> >
> > --
> > Niek Linnenbank
> >
>
>

-- 
Niek Linnenbank