qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Niek Linnenbank <nieklinnenbank@gmail.com>
To: qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org,
	Niek Linnenbank <nieklinnenbank@gmail.com>,
	qemu-arm@nongnu.org, philmd@redhat.com
Subject: [PATCH v2 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine
Date: Tue, 17 Dec 2019 00:35:09 +0100	[thread overview]
Message-ID: <20191216233519.29030-1-nieklinnenbank@gmail.com> (raw)

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



             reply	other threads:[~2019-12-16 23:37 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-16 23:35 Niek Linnenbank [this message]
2019-12-16 23:35 ` [PATCH v2 01/10] hw: arm: add Allwinner H3 System-on-Chip Niek Linnenbank
2019-12-16 23:35 ` [PATCH v2 02/10] hw: arm: add Xunlong Orange Pi PC machine Niek Linnenbank
2019-12-17  7:31   ` Philippe Mathieu-Daudé
2019-12-18 20:14     ` Niek Linnenbank
2019-12-19 19:06       ` Philippe Mathieu-Daudé
2019-12-16 23:35 ` [PATCH v2 03/10] arm: allwinner-h3: add Clock Control Unit Niek Linnenbank
2019-12-16 23:35 ` [PATCH v2 04/10] arm: allwinner-h3: add USB host controller Niek Linnenbank
2019-12-16 23:35 ` [PATCH v2 05/10] arm: allwinner-h3: add System Control module Niek Linnenbank
2019-12-16 23:35 ` [PATCH v2 06/10] arm/arm-powerctl: rebuild hflags after setting CP15 bits in arm_set_cpu_on() Niek Linnenbank
2019-12-16 23:44   ` Niek Linnenbank
2019-12-17 16:12     ` Peter Maydell
2019-12-17 16:41       ` Richard Henderson
2019-12-17 17:39         ` Peter Maydell
2019-12-18 21:01         ` Niek Linnenbank
2019-12-18 23:25           ` Richard Henderson
2019-12-16 23:35 ` [PATCH v2 07/10] arm: allwinner-h3: add CPU Configuration module Niek Linnenbank
2019-12-16 23:35 ` [PATCH v2 08/10] arm: allwinner-h3: add Security Identifier device Niek Linnenbank
2019-12-17  7:45   ` Philippe Mathieu-Daudé
2019-12-18 20:49     ` Niek Linnenbank
2019-12-30 14:49       ` Philippe Mathieu-Daudé
2020-01-07 21:53         ` Niek Linnenbank
2019-12-16 23:35 ` [PATCH v2 09/10] arm: allwinner-h3: add SD/MMC host controller Niek Linnenbank
2019-12-16 23:35 ` [PATCH v2 10/10] arm: allwinner-h3: add EMAC ethernet device Niek Linnenbank
2019-12-30 11:28 ` [PATCH v2 00/10] Add Allwinner H3 SoC and Orange Pi PC Machine Niek Linnenbank
2019-12-30 14:56   ` Philippe Mathieu-Daudé
2019-12-30 20:10     ` Niek Linnenbank
2020-01-02 19:52       ` Niek Linnenbank
2020-01-02 21:11         ` Philippe Mathieu-Daudé
2020-01-02 22:06           ` Niek Linnenbank

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191216233519.29030-1-nieklinnenbank@gmail.com \
    --to=nieklinnenbank@gmail.com \
    --cc=peter.maydell@linaro.org \
    --cc=philmd@redhat.com \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).