Patrick Rudolph has uploaded this change for review. ( https://review.coreboot.org/25152
Change subject: payloads/LinuxBoot: Add ARM64 support ......................................................................
payloads/LinuxBoot: Add ARM64 support
Add support for ARCH=ARM64 and introduce CROSS_COMPILE for all architectures.
Change-Id: I9a0cc248283432fb2384956ca55e687d4127398c Signed-off-by: Patrick Rudolph patrick.rudolph@9elements.com --- M payloads/external/LinuxBoot/Kconfig M payloads/external/LinuxBoot/Kconfig.name M payloads/external/LinuxBoot/Makefile A payloads/external/LinuxBoot/arm64/defconfig A payloads/external/LinuxBoot/arm64/kernel_fdt.its M payloads/external/LinuxBoot/targets/u-root.mk M payloads/external/Makefile.inc 7 files changed, 345 insertions(+), 26 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/52/25152/1
diff --git a/payloads/external/LinuxBoot/Kconfig b/payloads/external/LinuxBoot/Kconfig index 74e6c94..278a8ef 100644 --- a/payloads/external/LinuxBoot/Kconfig +++ b/payloads/external/LinuxBoot/Kconfig @@ -20,19 +20,30 @@
config LINUXBOOT_X86_64 bool "x86_64" + depends on ARCH_X86 help AMD64 kernel and initramfs
config LINUXBOOT_X86 bool "x86" + depends on ARCH_X86 help X86 kernel and initramfs + +config LINUXBOOT_ARM64 + bool "arm64" + depends on ARCH_ARM64 + select PAYLOAD_UIMAGE + help + AARCH64 kernel and initramfs + endchoice
config LINUXBOOT_ARCH string default "amd64" if LINUXBOOT_X86_64 default "386" if LINUXBOOT_X86 + default "arm64" if LINUXBOOT_ARM64
choice prompt "Kernel version" @@ -61,6 +72,13 @@ help Add your own kernel command-line arguments.
+config LINUXBOOT_DTB_FILE + string "Compiled devicetree file" + depends on LINUXBOOT_ARM64 + default "" + help + Add your own devicetree blob. + config PAYLOAD_FILE default "payloads/external/LinuxBoot/linuxboot/kernel-image"
@@ -107,6 +125,7 @@
config PAYLOAD_USERSPACE string "" + depends on ARCH_X86 default "payloads/external/LinuxBoot/linuxboot/initramfs.cpio.xz"
endif diff --git a/payloads/external/LinuxBoot/Kconfig.name b/payloads/external/LinuxBoot/Kconfig.name index b7b1085..18438c7 100644 --- a/payloads/external/LinuxBoot/Kconfig.name +++ b/payloads/external/LinuxBoot/Kconfig.name @@ -14,7 +14,7 @@
config PAYLOAD_LINUXBOOT bool "LinuxBoot" - depends on ARCH_X86 + depends on ARCH_X86 || ARCH_ARM64 help Select this option if you want to build a coreboot image with a LinuxBoot payload. If you don't know what this is diff --git a/payloads/external/LinuxBoot/Makefile b/payloads/external/LinuxBoot/Makefile index 10ad0c3..e0ef998 100644 --- a/payloads/external/LinuxBoot/Makefile +++ b/payloads/external/LinuxBoot/Makefile @@ -17,9 +17,30 @@ kernel_dir=$(project_dir)/kernel
unexport $(COREBOOT_EXPORTS) +unexport MAKEFLAGS + +XGCC:=$(PWD)/util/crossgcc/xgcc/bin +ifeq ($(CONFIG_LINUXBOOT_ARCH),386) +CROSS_COMPILE?=$(XGCC)/i386-linux- +ARCH?=x86 +else ifeq ($(CONFIG_LINUXBOOT_ARCH),amd64) +CROSS_COMPILE?=$(XGCC)/x86_64-linux- +ARCH?=x86_64 +else ifeq ($(CONFIG_LINUXBOOT_ARCH),arm64) +CROSS_COMPILE?=$(XGCC)/aarch64-linux- +ARCH?=arm64 +endif + +OBJCOPY:=$(CROSS_COMPILE)objcopy
all: payload
+toolchain: + if [[ ! -x "$(CROSS_COMPILE)gcc" ]]; then \ + echo "Toolchain '$(CROSS_COMPILE)*' is missing."; \ + exit 1; \ + fi + $(kernel_dir)/.config: echo " WWW Download Linux $(CONFIG_LINUXBOOT_KERNEL_VERSION)" mkdir -p $(kernel_dir) @@ -36,23 +57,44 @@ cp x86/defconfig $(kernel_dir)/.config else ifeq ($(CONFIG_LINUXBOOT_ARCH),amd64) cp x86_64/defconfig $(kernel_dir)/.config +else ifeq ($(CONFIG_LINUXBOOT_ARCH),arm64) + cp arm64/defconfig $(kernel_dir)/.config endif
-$(project_dir)/kernel-image: config +ifneq (,$(filter $(CONFIG_LINUXBOOT_ARCH),386 amd64)) +$(kernel_dir)/arch/x86/boot/bzImage: config toolchain +else ifeq ($(CONFIG_LINUXBOOT_ARCH),arm64) +$(kernel_dir)/vmlinux: config toolchain +endif echo " MAKE Kernel $(CONFIG_LINUXBOOT_KERNEL_VERSION)" - $(MAKE) -C $(kernel_dir) olddefconfig - $(MAKE) -C $(kernel_dir) -j $(CPUS) -ifeq ($(CONFIG_LINUXBOOT_ARCH),386) - cp $(kernel_dir)/arch/x86/boot/bzImage $(project_dir)/kernel-image -else ifeq ($(CONFIG_LINUXBOOT_ARCH),amd64) - cp $(kernel_dir)/arch/x86/boot/bzImage $(project_dir)/kernel-image + $(MAKE) -C $(kernel_dir) olddefconfig CROSS_COMPILE=$(CROSS_COMPILE) ARCH=$(ARCH) + $(MAKE) -C $(kernel_dir) -j $(CPUS) CROSS_COMPILE=$(CROSS_COMPILE) ARCH=$(ARCH) + +ifneq (,$(filter $(CONFIG_LINUXBOOT_ARCH),386 amd64)) +$(project_dir)/kernel-image: $(kernel_dir)/arch/x86/boot/bzImage + cp $< $@ +else ifeq ($(CONFIG_LINUXBOOT_ARCH),arm64) +$(project_dir)/vmlinux.bin: $(kernel_dir)/vmlinux + $(OBJCOPY) -O binary $< $@ + +$(project_dir)/target.dtb: $(CONFIG_LINUXBOOT_DTB_FILE) + cp $< $@ + +$(project_dir)/kernel-image: $(project_dir)/vmlinux.bin $(project_dir)/../arm64/kernel_fdt.its $(project_dir)/target.dtb $(project_dir)/initramfs.cpio.xz + cp $(project_dir)/../arm64/kernel_fdt.its $(project_dir) + mkimage -f $(project_dir)/kernel_fdt.its $@ endif
-payload: $(project_dir)/kernel-image ifeq ($(CONFIG_LINUXBOOT_UROOT),y) +$(project_dir)/initramfs.cpio.xz: $(MAKE) -f targets/u-root.mk +else +$(project_dir)/initramfs.cpio.xz: + echo "Building without u-root support" endif
+payload: $(project_dir)/kernel-image $(project_dir)/initramfs.cpio.xz + clean: if [ -d "$(kernel_dir)" ]; then make -C $(kernel_dir) clean; fi rm -f $(project_dir)/initramfs.cpio.xz @@ -60,4 +102,4 @@ distclean: rm -rf $(project_dir)
-.PHONY: config patch payload clean distclean clone fetch all +.PHONY: config patch payload clean distclean clone fetch all toolchain diff --git a/payloads/external/LinuxBoot/arm64/defconfig b/payloads/external/LinuxBoot/arm64/defconfig new file mode 100644 index 0000000..fd7bac4 --- /dev/null +++ b/payloads/external/LinuxBoot/arm64/defconfig @@ -0,0 +1,184 @@ +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_NO_HZ_IDLE=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_IRQ_TIME_ACCOUNTING=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_NUMA_BALANCING=y +CONFIG_USER_NS=y +CONFIG_BLK_DEV_INITRD=y +# CONFIG_RD_GZIP is not set +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set +# CONFIG_RD_LZ4 is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_KALLSYMS_ALL=y +# CONFIG_COMPAT_BRK is not set +CONFIG_JUMP_LABEL=y +# CONFIG_BLK_DEBUG_FS is not set +# CONFIG_IOSCHED_DEADLINE is not set +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_MQ_IOSCHED_DEADLINE is not set +# CONFIG_MQ_IOSCHED_KYBER is not set +CONFIG_ARCH_THUNDER=y +CONFIG_ARCH_THUNDER2=y +CONFIG_ARCH_UNIPHIER=y +CONFIG_ARCH_VEXPRESS=y +CONFIG_ARM64_VA_BITS_48=y +CONFIG_SCHED_MC=y +CONFIG_NR_CPUS=8 +CONFIG_HOTPLUG_CPU=y +CONFIG_NUMA=y +CONFIG_PREEMPT=y +# CONFIG_COMPACTION is not set +CONFIG_KSM=y +CONFIG_CMA=y +CONFIG_SECCOMP=y +# CONFIG_ARM64_VHE is not set +# CONFIG_EFI is not set +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +# CONFIG_BINFMT_SCRIPT is not set +# CONFIG_SUSPEND is not set +CONFIG_CPU_IDLE=y +CONFIG_ARM_CPUIDLE=y +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +# CONFIG_FIRMWARE_IN_KERNEL is not set +CONFIG_DMA_CMA=y +CONFIG_BRCMSTB_GISB_ARB=y +# CONFIG_BLK_DEV is not set +CONFIG_SRAM=y +CONFIG_SCSI=y +# CONFIG_SCSI_PROC_FS is not set +CONFIG_BLK_DEV_SD=y +CONFIG_SCSI_SAS_LIBSAS=y +CONFIG_INPUT_POLLDEV=y +CONFIG_INPUT_EVDEV=y +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_CROS_EC=y +CONFIG_INPUT_MISC=y +# CONFIG_SERIO_SERPORT is not set +CONFIG_SERIO_AMBAKMI=y +CONFIG_LEGACY_PTY_COUNT=16 +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_8250_DW=y +CONFIG_SERIAL_8250_UNIPHIER=y +CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +CONFIG_SERIAL_XILINX_PS_UART=y +CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y +CONFIG_SERIAL_DEV_BUS=y +CONFIG_VIRTIO_CONSOLE=y +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_MUX=y +CONFIG_I2C_MUX_PCA954x=y +CONFIG_I2C_DESIGNWARE_PLATFORM=y +CONFIG_I2C_RK3X=y +CONFIG_I2C_UNIPHIER_F=y +CONFIG_I2C_CROS_EC_TUNNEL=y +CONFIG_I2C_SLAVE=y +# CONFIG_PINCTRL_UNIPHIER is not set +CONFIG_GPIO_DWAPB=y +CONFIG_GPIO_PL061=y +CONFIG_GPIO_UNIPHIER=y +CONFIG_GPIO_XGENE=y +CONFIG_GPIO_PCA953X=y +CONFIG_GPIO_PCA953X_IRQ=y +CONFIG_GPIO_MAX77620=y +CONFIG_POWER_RESET_BRCMSTB=y +CONFIG_POWER_RESET_XGENE=y +CONFIG_POWER_RESET_SYSCON=y +CONFIG_SYSCON_REBOOT_MODE=y +CONFIG_BATTERY_BQ27XXX=y +# CONFIG_HWMON is not set +CONFIG_MFD_CROS_EC=y +CONFIG_MFD_CROS_EC_I2C=y +CONFIG_MFD_HI6421_PMIC=y +CONFIG_MFD_MAX77620=y +CONFIG_MFD_RK808=y +CONFIG_MFD_SEC_CORE=y +CONFIG_FB=y +CONFIG_FB_ARMCLCD=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +# CONFIG_USB_SUPPORT is not set +CONFIG_SYNC_FILE=y +CONFIG_VIRTIO_BALLOON=y +CONFIG_VIRTIO_MMIO=y +CONFIG_COMMON_CLK_RK808=y +CONFIG_COMMON_CLK_SCPI=y +CONFIG_COMMON_CLK_CS2000_CP=y +CONFIG_COMMON_CLK_S2MPS11=y +CONFIG_CLK_QORIQ=y +CONFIG_ARM_TIMER_SP804=y +CONFIG_MAILBOX=y +CONFIG_ARM_MHU=y +CONFIG_PLATFORM_MHU=y +# CONFIG_IOMMU_SUPPORT is not set +CONFIG_SOC_BRCMSTB=y +CONFIG_EXTCON=y +CONFIG_EXTCON_USB_GPIO=y +CONFIG_PHY_XGENE=y +CONFIG_TEE=y +CONFIG_OPTEE=y +CONFIG_ARM_SCPI_PROTOCOL=y +# CONFIG_ARM_SCPI_POWER_DOMAIN is not set +CONFIG_GOOGLE_FIRMWARE=y +CONFIG_GOOGLE_COREBOOT_TABLE_OF=y +CONFIG_GOOGLE_MEMCONSOLE_COREBOOT=y +CONFIG_GOOGLE_VPD=y +# CONFIG_MANDATORY_FILE_LOCKING is not set +# CONFIG_DNOTIFY is not set +# CONFIG_INOTIFY_USER is not set +CONFIG_TMPFS=y +# CONFIG_MISC_FILESYSTEMS is not set +CONFIG_PRINTK_TIME=y +CONFIG_DEBUG_INFO=y +CONFIG_DEBUG_FS=y +CONFIG_MAGIC_SYSRQ=y +CONFIG_DEBUG_KERNEL=y +# CONFIG_SCHED_DEBUG is not set +# CONFIG_DEBUG_PREEMPT is not set +# CONFIG_FTRACE is not set +CONFIG_MEMTEST=y +CONFIG_KEYS=y +CONFIG_SECURITY=y +CONFIG_CRYPTO_ECDH=y +CONFIG_CRYPTO_CTR=y +CONFIG_CRYPTO_ECB=y +CONFIG_CRYPTO_CMAC=y +CONFIG_CRYPTO_GHASH=y +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_SHA512=y +CONFIG_CRYPTO_ARC4=y +CONFIG_CRYPTO_DES=y +CONFIG_CRYPTO_ANSI_CPRNG=y +CONFIG_ASYMMETRIC_KEY_TYPE=y +CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y +CONFIG_X509_CERTIFICATE_PARSER=y +CONFIG_PKCS7_MESSAGE_PARSER=y +CONFIG_SYSTEM_TRUSTED_KEYRING=y +CONFIG_ARM64_CRYPTO=y +CONFIG_CRYPTO_SHA512_ARM64=y +CONFIG_CRYPTO_SHA1_ARM64_CE=y +CONFIG_CRYPTO_SHA2_ARM64_CE=y +CONFIG_CRYPTO_GHASH_ARM64_CE=y +CONFIG_CRYPTO_CRCT10DIF_ARM64_CE=y +CONFIG_CRYPTO_CRC32_ARM64_CE=y +CONFIG_CRYPTO_AES_ARM64_CE_CCM=y +CONFIG_CRYPTO_AES_ARM64_CE_BLK=y +CONFIG_CRYPTO_CHACHA20_NEON=y +CONFIG_CRYPTO_AES_ARM64_BS=y +CONFIG_CRC16=y +CONFIG_CRC_T10DIF=y +CONFIG_CRC_ITU_T=y +CONFIG_CRC7=y +CONFIG_LIBCRC32C=y diff --git a/payloads/external/LinuxBoot/arm64/kernel_fdt.its b/payloads/external/LinuxBoot/arm64/kernel_fdt.its new file mode 100644 index 0000000..f078395 --- /dev/null +++ b/payloads/external/LinuxBoot/arm64/kernel_fdt.its @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2017 Facebook Inc. + * Simple U-Boot uImage source file containing a single kernel and FDT blob + */ + +/dts-v1/; + +/ { + description = "Simple image with single Linux kernel and FDT blob"; + #address-cells = <1>; + + images { + kernel { + description = "Vanilla Linux kernel"; + data = /incbin/("vmlinux.bin"); + type = "kernel"; + arch = "arm64"; + os = "linux"; + compression = "none"; + load = <10000000>; + entry = <10000000>; + hash-1 { + algo = "crc32"; + }; + hash-2 { + algo = "sha1"; + }; + hash-3 { + algo = "sha256"; + }; + }; + fdt-1 { + description = "Flattened Device Tree blob"; + data = /incbin/("target.dtb"); + type = "flat_dt"; + arch = "arm64"; + compression = "none"; + hash-1 { + algo = "crc32"; + }; + hash-2 { + algo = "sha1"; + }; + hash-3 { + algo = "sha256"; + }; + }; + ramdisk-1 { + description = "Compressed Initramfs"; + data = /incbin/("initramfs.cpio.xz"); + type = "ramdisk"; + arch = "arm64"; + os = "linux"; + compression = "none"; + load = <00000000>; + entry = <00000000>; + hash-1 { + algo = "sha1"; + }; + hash-2 { + algo = "sha256"; + }; + }; + }; + + configurations { + default = "conf-1"; + conf-1 { + description = "Boot Linux kernel with FDT blob and u-root"; + kernel = "kernel"; + fdt = "fdt-1"; + ramdisk = "ramdisk-1"; + }; + }; +}; diff --git a/payloads/external/LinuxBoot/targets/u-root.mk b/payloads/external/LinuxBoot/targets/u-root.mk index 9b0e568..4c2994c 100644 --- a/payloads/external/LinuxBoot/targets/u-root.mk +++ b/payloads/external/LinuxBoot/targets/u-root.mk @@ -52,8 +52,11 @@ done;,true;) \ fi
-$(project_dir)/initramfs.cpio.xz: checkout - cd $(uroot_dir); GOARCH=$(CONFIG_LINUXBOOT_ARCH) GOPATH=$(go_path_dir) go build u-root.go +$(uroot_dir)/u-root: $(uroot_dir)/u-root.go + echo " GO u-root" + cd $(uroot_dir); GOPATH=$(go_path_dir) go build u-root.go + +$(project_dir)/initramfs.cpio.xz: checkout $(uroot_dir)/u-root echo " MAKE u-root $(CONFIG_LINUXBOOT_UROOT_VERSION)" ifneq ($(CONFIG_LINUXBOOT_UROOT_COMMANDS),) ifneq ($(CONFIG_LINUXBOOT_UROOT_FILES),) diff --git a/payloads/external/Makefile.inc b/payloads/external/Makefile.inc index 3943db9..6ce5f1e 100644 --- a/payloads/external/Makefile.inc +++ b/payloads/external/Makefile.inc @@ -33,10 +33,14 @@ endif
ifeq ($(CONFIG_PAYLOAD_LINUXBOOT),y) -ifneq ($(strip $(call strip_quotes,$(CONFIG_LINUXBOOT_KERNEL_COMMANDLINE))),) + ifeq ($(CONFIG_ARCH_X86),y) + ifneq ($(strip $(call strip_quotes,$(CONFIG_LINUXBOOT_KERNEL_COMMANDLINE))),) ADDITIONAL_PAYLOAD_CONFIG+=-C $(CONFIG_LINUXBOOT_KERNEL_COMMANDLINE) -endif -ADDITIONAL_PAYLOAD_CONFIG+=-I $(CONFIG_PAYLOAD_USERSPACE) + endif + ifneq ($(strip $(call strip_quotes,$(CONFIG_PAYLOAD_USERSPACE))),) + ADDITIONAL_PAYLOAD_CONFIG+=-I $(strip $(call strip_quotes,$(CONFIG_PAYLOAD_USERSPACE))) + endif + endif endif
ifeq ($(CONFIG_PAYLOAD_LINUX),y) @@ -253,16 +257,6 @@
linuxboot: $(MAKE) -C payloads/external/LinuxBoot \ - HOSTCC="$(HOSTCC)" \ - CC="$(HOSTCC)" \ - GCC_CC_x86_32=$(GCC_CC_x86_32) \ - GCC_CC_x86_64=$(GCC_CC_x86_64) \ - GCC_CC_arm=$(GCC_CC_arm) \ - GCC_CC_arm64=$(GCC_CC_arm64) \ - OBJCOPY_x86_32=$(OBJCOPY_x86_32) \ - OBJCOPY_x86_64=$(OBJCOPY_x86_64) \ - OBJCOPY_arm=$(OBJCOPY_arm) \ - OBJCOPY_arm64=$(OBJCOPY_arm64) \ CPUS=$(CPUS) \ CONFIG_LINUXBOOT_KERNEL_VERSION=$(CONFIG_LINUXBOOT_KERNEL_VERSION) \ CONFIG_LINUXBOOT_KERNEL_CONFIGFILE=$(CONFIG_LINUXBOOT_KERNEL_CONFIGFILE) \ @@ -271,7 +265,9 @@ CONFIG_LINUXBOOT_UROOT_COMMANDS="$(CONFIG_LINUXBOOT_UROOT_COMMANDS)" \ CONFIG_LINUXBOOT_ARCH=$(CONFIG_LINUXBOOT_ARCH) \ CONFIG_LINUXBOOT_UROOT=$(CONFIG_LINUXBOOT_UROOT) \ - CONFIG_LINUXBOOT_UROOT_FILES=$(CONFIG_LINUXBOOT_UROOT_FILES) + CONFIG_LINUXBOOT_UROOT_FILES=$(CONFIG_LINUXBOOT_UROOT_FILES) \ + CONFIG_LINUXBOOT_DTB_FILE=$(CONFIG_LINUXBOOT_DTB_FILE) +
payloads/external/LinuxBoot/linuxboot/kernel-image: linuxboot payloads/external/LinuxBoot/linuxboot/initramfs.cpio.xz: linuxboot