Re: [U-Boot] [PATCH 2/2] ARM: Add a new arch + board for QEMU's 'virt' machine
Hi, On Wed, 9 May 2018 12:56:46 +0200 Paulo Neves wrote: > Hello I have successfully built u-boot and launched qemu with the > flags proposed by the patch. My problems start when I try to boot the > kernel > > What is the linux kernel defconfig that should be used to boot this > machine? multi_v7_defconfig does work at least. > I tried the versatile one but they are different in some key > places like the sd card. The end result is that I can only see > Starting Kernel, and nothing else. What bootargs do you pass to the > kernel to have the serial output in qemu? The serial port in Linux is ttyAMA0. But I think it works without any console= specified as well, because the QEMU-generated dtb specifies /chosen/stdout-path already pointing to that serial port. ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Re: [U-Boot] [PATCH 2/2] ARM: Add a new arch + board for QEMU's 'virt' machine
Hello I have successfully built u-boot and launched qemu with the flags proposed by the patch. My problems start when I try to boot the kernel What is the linux kernel defconfig that should be used to boot this machine? I tried the versatile one but they are different in some key places like the sd card. The end result is that I can only see Starting Kernel, and nothing else. What bootargs do you pass to the kernel to have the serial output in qemu? Paulo Neves ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Re: [U-Boot] [PATCH 2/2] ARM: Add a new arch + board for QEMU's 'virt' machine
Hi, On 08/31/2017 09:55 AM, Bin Meng wrote: Hi Tuomas, On Wed, Aug 30, 2017 at 4:31 PM, Tuomas Tynkkynen wrote: This board builds an U-Boot binary that is bootable with QEMU's 'virt' machine on ARM. The minimal QEMU command line is: qemu-system-arm -machine virt,highmem=off -bios u-boot.bin (Note that the 'highmem=off' parameter to the 'virt' machine is required for PCI to work in U-Boot.) This command line enables the following: - u-boot.bin loaded and executing in the emulated flash at address 0x0 - A generated device tree blob placed at the start of RAM - A freely configurable amount of RAM, described by the DTB - A PL011 serial port, discoverable via the DTB - An ARMv7 architected timer - PSCI for rebooting the system - A generic ECAM-based PCI host controller, discoverable via the DTB Additionally, QEMU allows plugging a bunch of useful peripherals to the PCI bus. The following ones are supported by both U-Boot and Linux: - To enable a Serial ATA disk via an Intel ICH9 AHCI controller, pass e.g.: -drive if=none,file=disk.img,id=mydisk -device ich9-ahci,id=ahci -device ide-drive,drive=mydisk,bus=ahci.0 - To enable an Intel E1000 network adapter, pass e.g.: -net nic,model=e1000 -net user - To add an EHCI-compliant USB host controller, pass e.g.: -device usb-ehci,id=ehci Can we enable the NVMe driver (CONFIG_NVME) here? Yes, 'nvme scan' and 'nvme list' it appear to work. I'll enable it. There is a bunch of spew of this form though: CACHE: Misaligned operation at range [bef5d000, bef5d020] Signed-off-by: Tuomas Tynkkynen --- arch/arm/Kconfig | 10 arch/arm/mach-qemu/Kconfig | 9 +++ board/qemu-arm/Makefile| 5 board/qemu-arm/qemu-arm.c | 35 ++ configs/qemu_arm_defconfig | 27 include/configs/qemu-arm.h | 63 ++ 6 files changed, 149 insertions(+) create mode 100644 arch/arm/mach-qemu/Kconfig create mode 100644 board/qemu-arm/Makefile create mode 100644 board/qemu-arm/qemu-arm.c create mode 100644 configs/qemu_arm_defconfig create mode 100644 include/configs/qemu-arm.h diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 53d0831935..0d01ba1b73 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -630,6 +630,14 @@ config ARCH_MX5 select CPU_V7 select BOARD_EARLY_INIT_F +config ARCH_QEMU + bool "QEMU Virtual Platform" + select CPU_V7 + select ARCH_SUPPORT_PSCI + select DM + select DM_SERIAL + select OF_CONTROL + config ARCH_RMOBILE bool "Renesas ARM SoCs" select DM @@ -1149,6 +1157,8 @@ source "arch/arm/mach-stm32/Kconfig" source "arch/arm/mach-sunxi/Kconfig" +source "arch/arm/mach-qemu/Kconfig" + Can you insert this by following alphabetical order? Oops, yes of course. source "arch/arm/mach-tegra/Kconfig" source "arch/arm/mach-uniphier/Kconfig" diff --git a/arch/arm/mach-qemu/Kconfig b/arch/arm/mach-qemu/Kconfig new file mode 100644 index 00..89d2a36719 --- /dev/null +++ b/arch/arm/mach-qemu/Kconfig @@ -0,0 +1,9 @@ +if ARCH_QEMU + +config SYS_BOARD + default "qemu-arm" + +config SYS_CONFIG_NAME + default "qemu-arm" + +endif diff --git a/board/qemu-arm/Makefile b/board/qemu-arm/Makefile new file mode 100644 index 00..3e9907d983 --- /dev/null +++ b/board/qemu-arm/Makefile Can this new board be put into the board/emulation/qemu-arm directory? Since qemu-x86 is put there. Sure. There is still qemu-mips directly under board/ though. @@ -0,0 +1,5 @@ +# +# SPDX-License-Identifier: GPL-2.0 +# + +obj-y += qemu-arm.o diff --git a/board/qemu-arm/qemu-arm.c b/board/qemu-arm/qemu-arm.c new file mode 100644 index 00..90d7badbf4 --- /dev/null +++ b/board/qemu-arm/qemu-arm.c @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017 Tuomas Tynkkynen + * + * SPDX-License-Identifier:GPL-2.0+ + */ +#include +#include + +DECLARE_GLOBAL_DATA_PTR; This is not needed as gd is not referenced in this file. Now removed. Thank you for the review. ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Re: [U-Boot] [PATCH 2/2] ARM: Add a new arch + board for QEMU's 'virt' machine
Hi Tuomas, On Fri, Sep 1, 2017 at 5:56 AM, Tuomas Tynkkynen wrote: > Hi, > > > On 08/31/2017 09:55 AM, Bin Meng wrote: >> >> Hi Tuomas, >> >> On Wed, Aug 30, 2017 at 4:31 PM, Tuomas Tynkkynen >> wrote: >>> >>> This board builds an U-Boot binary that is bootable with QEMU's 'virt' >>> machine on ARM. The minimal QEMU command line is: >>> >>> qemu-system-arm -machine virt,highmem=off -bios u-boot.bin >>> >>> (Note that the 'highmem=off' parameter to the 'virt' machine is required >>> for >>> PCI to work in U-Boot.) This command line enables the following: >>> - u-boot.bin loaded and executing in the emulated flash at address >>> 0x0 >>> - A generated device tree blob placed at the start of RAM >>> - A freely configurable amount of RAM, described by the DTB >>> - A PL011 serial port, discoverable via the DTB >>> - An ARMv7 architected timer >>> - PSCI for rebooting the system >>> - A generic ECAM-based PCI host controller, discoverable via the DTB >>> >>> Additionally, QEMU allows plugging a bunch of useful peripherals to the >>> PCI bus. >>> The following ones are supported by both U-Boot and Linux: >>> >>> - To enable a Serial ATA disk via an Intel ICH9 AHCI controller, pass >>> e.g.: >>> -drive if=none,file=disk.img,id=mydisk -device ich9-ahci,id=ahci >>> -device ide-drive,drive=mydisk,bus=ahci.0 >>> - To enable an Intel E1000 network adapter, pass e.g.: >>> -net nic,model=e1000 -net user >>> - To add an EHCI-compliant USB host controller, pass e.g.: >>> -device usb-ehci,id=ehci >> >> >> Can we enable the NVMe driver (CONFIG_NVME) here? >> > > Yes, 'nvme scan' and 'nvme list' it appear to work. I'll enable it. > There is a bunch of spew of this form though: > > CACHE: Misaligned operation at range [bef5d000, bef5d020] > I think I've fixed this already and is now in v2017.09-rc3. But rc3 is still not shown on git.denx.de. Not sure why. > > >>> >>> Signed-off-by: Tuomas Tynkkynen >>> --- >>> arch/arm/Kconfig | 10 >>> arch/arm/mach-qemu/Kconfig | 9 +++ >>> board/qemu-arm/Makefile| 5 >>> board/qemu-arm/qemu-arm.c | 35 ++ >>> configs/qemu_arm_defconfig | 27 >>> include/configs/qemu-arm.h | 63 >>> ++ >>> 6 files changed, 149 insertions(+) >>> create mode 100644 arch/arm/mach-qemu/Kconfig >>> create mode 100644 board/qemu-arm/Makefile >>> create mode 100644 board/qemu-arm/qemu-arm.c >>> create mode 100644 configs/qemu_arm_defconfig >>> create mode 100644 include/configs/qemu-arm.h >>> >>> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig >>> index 53d0831935..0d01ba1b73 100644 >>> --- a/arch/arm/Kconfig >>> +++ b/arch/arm/Kconfig >>> @@ -630,6 +630,14 @@ config ARCH_MX5 >>> select CPU_V7 >>> select BOARD_EARLY_INIT_F >>> >>> +config ARCH_QEMU >>> + bool "QEMU Virtual Platform" >>> + select CPU_V7 >>> + select ARCH_SUPPORT_PSCI >>> + select DM >>> + select DM_SERIAL >>> + select OF_CONTROL >>> + >>> config ARCH_RMOBILE >>> bool "Renesas ARM SoCs" >>> select DM >>> @@ -1149,6 +1157,8 @@ source "arch/arm/mach-stm32/Kconfig" >>> >>> source "arch/arm/mach-sunxi/Kconfig" >>> >>> +source "arch/arm/mach-qemu/Kconfig" >>> + >> >> >> Can you insert this by following alphabetical order? >> > > Oops, yes of course. > >>> source "arch/arm/mach-tegra/Kconfig" >>> >>> source "arch/arm/mach-uniphier/Kconfig" >>> diff --git a/arch/arm/mach-qemu/Kconfig b/arch/arm/mach-qemu/Kconfig >>> new file mode 100644 >>> index 00..89d2a36719 >>> --- /dev/null >>> +++ b/arch/arm/mach-qemu/Kconfig >>> @@ -0,0 +1,9 @@ >>> +if ARCH_QEMU >>> + >>> +config SYS_BOARD >>> + default "qemu-arm" >>> + >>> +config SYS_CONFIG_NAME >>> + default "qemu-arm" >>> + >>> +endif >>> diff --git a/board/qemu-arm/Makefile b/board/qemu-arm/Makefile >>> new file mode 100644 >>> index 00..3e9907d983 >>> --- /dev/null >>> +++ b/board/qemu-arm/Makefile >> >> >> Can this new board be put into the board/emulation/qemu-arm directory? >> Since qemu-x86 is put there. >> > > Sure. There is still qemu-mips directly under board/ though. Yep, so a separate patch to move all these qemu- boards into emulation would be nice. > >>> @@ -0,0 +1,5 @@ >>> +# >>> +# SPDX-License-Identifier: GPL-2.0 >>> +# >>> + >>> +obj-y += qemu-arm.o >>> diff --git a/board/qemu-arm/qemu-arm.c b/board/qemu-arm/qemu-arm.c >>> new file mode 100644 >>> index 00..90d7badbf4 >>> --- /dev/null >>> +++ b/board/qemu-arm/qemu-arm.c >>> @@ -0,0 +1,35 @@ >>> +/* >>> + * Copyright (c) 2017 Tuomas Tynkkynen >>> + * >>> + * SPDX-License-Identifier:GPL-2.0+ >>> + */ >>> +#include >>> +#include >>> + >>> +DECLARE_GLOBAL_DATA_PTR; >> >> >> This is not needed as gd is not referenced in this file. >> > > Now removed. > > Thank you for the review. Regards, Bin __
Re: [U-Boot] [PATCH 2/2] ARM: Add a new arch + board for QEMU's 'virt' machine
Hi Tuomas, On Wed, Aug 30, 2017 at 4:31 PM, Tuomas Tynkkynen wrote: > This board builds an U-Boot binary that is bootable with QEMU's 'virt' > machine on ARM. The minimal QEMU command line is: > > qemu-system-arm -machine virt,highmem=off -bios u-boot.bin > > (Note that the 'highmem=off' parameter to the 'virt' machine is required for > PCI to work in U-Boot.) This command line enables the following: > - u-boot.bin loaded and executing in the emulated flash at address 0x0 > - A generated device tree blob placed at the start of RAM > - A freely configurable amount of RAM, described by the DTB > - A PL011 serial port, discoverable via the DTB > - An ARMv7 architected timer > - PSCI for rebooting the system > - A generic ECAM-based PCI host controller, discoverable via the DTB > > Additionally, QEMU allows plugging a bunch of useful peripherals to the PCI > bus. > The following ones are supported by both U-Boot and Linux: > > - To enable a Serial ATA disk via an Intel ICH9 AHCI controller, pass e.g.: > -drive if=none,file=disk.img,id=mydisk -device ich9-ahci,id=ahci -device > ide-drive,drive=mydisk,bus=ahci.0 > - To enable an Intel E1000 network adapter, pass e.g.: > -net nic,model=e1000 -net user > - To add an EHCI-compliant USB host controller, pass e.g.: > -device usb-ehci,id=ehci Can we enable the NVMe driver (CONFIG_NVME) here? > > Signed-off-by: Tuomas Tynkkynen > --- > arch/arm/Kconfig | 10 > arch/arm/mach-qemu/Kconfig | 9 +++ > board/qemu-arm/Makefile| 5 > board/qemu-arm/qemu-arm.c | 35 ++ > configs/qemu_arm_defconfig | 27 > include/configs/qemu-arm.h | 63 > ++ > 6 files changed, 149 insertions(+) > create mode 100644 arch/arm/mach-qemu/Kconfig > create mode 100644 board/qemu-arm/Makefile > create mode 100644 board/qemu-arm/qemu-arm.c > create mode 100644 configs/qemu_arm_defconfig > create mode 100644 include/configs/qemu-arm.h > > diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig > index 53d0831935..0d01ba1b73 100644 > --- a/arch/arm/Kconfig > +++ b/arch/arm/Kconfig > @@ -630,6 +630,14 @@ config ARCH_MX5 > select CPU_V7 > select BOARD_EARLY_INIT_F > > +config ARCH_QEMU > + bool "QEMU Virtual Platform" > + select CPU_V7 > + select ARCH_SUPPORT_PSCI > + select DM > + select DM_SERIAL > + select OF_CONTROL > + > config ARCH_RMOBILE > bool "Renesas ARM SoCs" > select DM > @@ -1149,6 +1157,8 @@ source "arch/arm/mach-stm32/Kconfig" > > source "arch/arm/mach-sunxi/Kconfig" > > +source "arch/arm/mach-qemu/Kconfig" > + Can you insert this by following alphabetical order? > source "arch/arm/mach-tegra/Kconfig" > > source "arch/arm/mach-uniphier/Kconfig" > diff --git a/arch/arm/mach-qemu/Kconfig b/arch/arm/mach-qemu/Kconfig > new file mode 100644 > index 00..89d2a36719 > --- /dev/null > +++ b/arch/arm/mach-qemu/Kconfig > @@ -0,0 +1,9 @@ > +if ARCH_QEMU > + > +config SYS_BOARD > + default "qemu-arm" > + > +config SYS_CONFIG_NAME > + default "qemu-arm" > + > +endif > diff --git a/board/qemu-arm/Makefile b/board/qemu-arm/Makefile > new file mode 100644 > index 00..3e9907d983 > --- /dev/null > +++ b/board/qemu-arm/Makefile Can this new board be put into the board/emulation/qemu-arm directory? Since qemu-x86 is put there. > @@ -0,0 +1,5 @@ > +# > +# SPDX-License-Identifier: GPL-2.0 > +# > + > +obj-y += qemu-arm.o > diff --git a/board/qemu-arm/qemu-arm.c b/board/qemu-arm/qemu-arm.c > new file mode 100644 > index 00..90d7badbf4 > --- /dev/null > +++ b/board/qemu-arm/qemu-arm.c > @@ -0,0 +1,35 @@ > +/* > + * Copyright (c) 2017 Tuomas Tynkkynen > + * > + * SPDX-License-Identifier:GPL-2.0+ > + */ > +#include > +#include > + > +DECLARE_GLOBAL_DATA_PTR; This is not needed as gd is not referenced in this file. > + > +int board_init(void) > +{ > + return 0; > +} > + > +int dram_init(void) > +{ > + if (fdtdec_setup_memory_size() != 0) > + return -EINVAL; > + > + return 0; > +} > + > +int dram_init_banksize(void) > +{ > + fdtdec_setup_memory_banksize(); > + > + return 0; > +} > + > +void *board_fdt_blob_setup(void) > +{ > + /* QEMU loads a generated DTB for us at the start of RAM. */ > + return (void *)CONFIG_SYS_SDRAM_BASE; > +} > diff --git a/configs/qemu_arm_defconfig b/configs/qemu_arm_defconfig > new file mode 100644 > index 00..d34512dd0d > --- /dev/null > +++ b/configs/qemu_arm_defconfig > @@ -0,0 +1,27 @@ > +CONFIG_ARM=y > +CONFIG_ARM_SMCCC=y > +CONFIG_ARCH_QEMU=y > +CONFIG_AHCI=y > +CONFIG_DISTRO_DEFAULTS=y > +# CONFIG_DISPLAY_CPUINFO is not set > +# CONFIG_DISPLAY_BOARDINFO is not set > +# CONFIG_CMD_IMLS is not set > +CONFIG_CMD_PCI=y > +CONFIG_CMD_USB=y > +CONFIG_OF_BOARD=y > +CONFIG_AHCI_PCI=y > +CONFIG_BLK=y > +# CONFIG_MMC is not set > +CONFI
[U-Boot] [PATCH 2/2] ARM: Add a new arch + board for QEMU's 'virt' machine
This board builds an U-Boot binary that is bootable with QEMU's 'virt' machine on ARM. The minimal QEMU command line is: qemu-system-arm -machine virt,highmem=off -bios u-boot.bin (Note that the 'highmem=off' parameter to the 'virt' machine is required for PCI to work in U-Boot.) This command line enables the following: - u-boot.bin loaded and executing in the emulated flash at address 0x0 - A generated device tree blob placed at the start of RAM - A freely configurable amount of RAM, described by the DTB - A PL011 serial port, discoverable via the DTB - An ARMv7 architected timer - PSCI for rebooting the system - A generic ECAM-based PCI host controller, discoverable via the DTB Additionally, QEMU allows plugging a bunch of useful peripherals to the PCI bus. The following ones are supported by both U-Boot and Linux: - To enable a Serial ATA disk via an Intel ICH9 AHCI controller, pass e.g.: -drive if=none,file=disk.img,id=mydisk -device ich9-ahci,id=ahci -device ide-drive,drive=mydisk,bus=ahci.0 - To enable an Intel E1000 network adapter, pass e.g.: -net nic,model=e1000 -net user - To add an EHCI-compliant USB host controller, pass e.g.: -device usb-ehci,id=ehci Signed-off-by: Tuomas Tynkkynen --- arch/arm/Kconfig | 10 arch/arm/mach-qemu/Kconfig | 9 +++ board/qemu-arm/Makefile| 5 board/qemu-arm/qemu-arm.c | 35 ++ configs/qemu_arm_defconfig | 27 include/configs/qemu-arm.h | 63 ++ 6 files changed, 149 insertions(+) create mode 100644 arch/arm/mach-qemu/Kconfig create mode 100644 board/qemu-arm/Makefile create mode 100644 board/qemu-arm/qemu-arm.c create mode 100644 configs/qemu_arm_defconfig create mode 100644 include/configs/qemu-arm.h diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 53d0831935..0d01ba1b73 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -630,6 +630,14 @@ config ARCH_MX5 select CPU_V7 select BOARD_EARLY_INIT_F +config ARCH_QEMU + bool "QEMU Virtual Platform" + select CPU_V7 + select ARCH_SUPPORT_PSCI + select DM + select DM_SERIAL + select OF_CONTROL + config ARCH_RMOBILE bool "Renesas ARM SoCs" select DM @@ -1149,6 +1157,8 @@ source "arch/arm/mach-stm32/Kconfig" source "arch/arm/mach-sunxi/Kconfig" +source "arch/arm/mach-qemu/Kconfig" + source "arch/arm/mach-tegra/Kconfig" source "arch/arm/mach-uniphier/Kconfig" diff --git a/arch/arm/mach-qemu/Kconfig b/arch/arm/mach-qemu/Kconfig new file mode 100644 index 00..89d2a36719 --- /dev/null +++ b/arch/arm/mach-qemu/Kconfig @@ -0,0 +1,9 @@ +if ARCH_QEMU + +config SYS_BOARD + default "qemu-arm" + +config SYS_CONFIG_NAME + default "qemu-arm" + +endif diff --git a/board/qemu-arm/Makefile b/board/qemu-arm/Makefile new file mode 100644 index 00..3e9907d983 --- /dev/null +++ b/board/qemu-arm/Makefile @@ -0,0 +1,5 @@ +# +# SPDX-License-Identifier: GPL-2.0 +# + +obj-y += qemu-arm.o diff --git a/board/qemu-arm/qemu-arm.c b/board/qemu-arm/qemu-arm.c new file mode 100644 index 00..90d7badbf4 --- /dev/null +++ b/board/qemu-arm/qemu-arm.c @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017 Tuomas Tynkkynen + * + * SPDX-License-Identifier:GPL-2.0+ + */ +#include +#include + +DECLARE_GLOBAL_DATA_PTR; + +int board_init(void) +{ + return 0; +} + +int dram_init(void) +{ + if (fdtdec_setup_memory_size() != 0) + return -EINVAL; + + return 0; +} + +int dram_init_banksize(void) +{ + fdtdec_setup_memory_banksize(); + + return 0; +} + +void *board_fdt_blob_setup(void) +{ + /* QEMU loads a generated DTB for us at the start of RAM. */ + return (void *)CONFIG_SYS_SDRAM_BASE; +} diff --git a/configs/qemu_arm_defconfig b/configs/qemu_arm_defconfig new file mode 100644 index 00..d34512dd0d --- /dev/null +++ b/configs/qemu_arm_defconfig @@ -0,0 +1,27 @@ +CONFIG_ARM=y +CONFIG_ARM_SMCCC=y +CONFIG_ARCH_QEMU=y +CONFIG_AHCI=y +CONFIG_DISTRO_DEFAULTS=y +# CONFIG_DISPLAY_CPUINFO is not set +# CONFIG_DISPLAY_BOARDINFO is not set +# CONFIG_CMD_IMLS is not set +CONFIG_CMD_PCI=y +CONFIG_CMD_USB=y +CONFIG_OF_BOARD=y +CONFIG_AHCI_PCI=y +CONFIG_BLK=y +# CONFIG_MMC is not set +CONFIG_DM_ETH=y +CONFIG_E1000=y +CONFIG_PCI=y +CONFIG_DM_PCI=y +CONFIG_PCIE_ECAM_GENERIC=y +CONFIG_SCSI=y +CONFIG_DM_SCSI=y +CONFIG_SYSRESET=y +CONFIG_SYSRESET_PSCI=y +CONFIG_USB=y +CONFIG_DM_USB=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_PCI=y diff --git a/include/configs/qemu-arm.h b/include/configs/qemu-arm.h new file mode 100644 index 00..2bcc0efad0 --- /dev/null +++ b/include/configs/qemu-arm.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2017 Tuomas Tynkkynen + * + * SPDX-License-Identifier:GPL-2.0+ + */ + +#ifndef __CONFIG_H +#define __CONFIG_H + +#include + +/* Physical memory map */ +#define CONFIG_SYS_TEXT_BASE 0x00