Adds support for the rk3399 SoC. Notably:
 *) Split out the default kernel config and image type from
    rockchip-defaults.inc now that not all support chips are ARMv7
 *) Apply a patch to Arm Trusted Firmware to fix a compile issue
 *) Arm Trusted Firmware requires the arm-none-eabi-native compiler to
    compile the M0 firmware.
 *) Modify u-boot to pull in the ATF files when compiling
 *) The rk3399 is support by the panfrost driver in mesa, so enable it

Signed-off-by: Joshua Watt <[email protected]>
---
 conf/machine/include/rk3066.inc               |  3 +
 conf/machine/include/rk3188.inc               |  3 +
 conf/machine/include/rk3288.inc               |  3 +
 conf/machine/include/rk3399.inc               | 27 ++++++
 conf/machine/include/rockchip-defaults.inc    |  2 -
 ...hip-Prevent-macro-expansion-in-paths.patch | 94 +++++++++++++++++++
 .../arm-trusted-firmware_2.2.bb               |  8 +-
 recipes-bsp/u-boot/u-boot%.bbappend           |  8 ++
 recipes-graphics/mesa/mesa_%.bbappend         |  1 +
 wic/rk3399-boot.wks                           | 24 +++++
 10 files changed, 170 insertions(+), 3 deletions(-)
 create mode 100644 conf/machine/include/rk3399.inc
 create mode 100644 
recipes-bsp/arm-trusted-firmware/arm-trusted-firmware/0001-rockchip-Prevent-macro-expansion-in-paths.patch
 create mode 100644 wic/rk3399-boot.wks

diff --git a/conf/machine/include/rk3066.inc b/conf/machine/include/rk3066.inc
index 91fbbaa..dffbee0 100644
--- a/conf/machine/include/rk3066.inc
+++ b/conf/machine/include/rk3066.inc
@@ -6,3 +6,6 @@ SOC_FAMILY = "rk3066"
 require conf/machine/include/tune-cortexa9.inc
 require conf/machine/include/soc-family.inc
 require conf/machine/include/rockchip-defaults.inc
+
+KBUILD_DEFCONFIG = "multi_v7_defconfig"
+KERNEL_IMAGETYPE = "zImage"
diff --git a/conf/machine/include/rk3188.inc b/conf/machine/include/rk3188.inc
index bd36837..59e65d1 100644
--- a/conf/machine/include/rk3188.inc
+++ b/conf/machine/include/rk3188.inc
@@ -6,3 +6,6 @@ SOC_FAMILY  = "rk3188"
 require conf/machine/include/tune-cortexa9.inc
 require conf/machine/include/soc-family.inc
 require conf/machine/include/rockchip-defaults.inc
+
+KBUILD_DEFCONFIG = "multi_v7_defconfig"
+KERNEL_IMAGETYPE = "zImage"
diff --git a/conf/machine/include/rk3288.inc b/conf/machine/include/rk3288.inc
index b261692..a7edac5 100644
--- a/conf/machine/include/rk3288.inc
+++ b/conf/machine/include/rk3288.inc
@@ -7,6 +7,9 @@ require conf/machine/include/tune-cortexa17.inc
 require conf/machine/include/soc-family.inc
 require conf/machine/include/rockchip-defaults.inc
 
+KBUILD_DEFCONFIG = "multi_v7_defconfig"
+KERNEL_IMAGETYPE = "zImage"
+
 SERIAL_CONSOLES = "115200;ttyS2"
 
 PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot"
diff --git a/conf/machine/include/rk3399.inc b/conf/machine/include/rk3399.inc
new file mode 100644
index 0000000..1fd8fd6
--- /dev/null
+++ b/conf/machine/include/rk3399.inc
@@ -0,0 +1,27 @@
+# Copyright (C) 2020 Garmin Ltd. or its subsidaries
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SOC_FAMILY = "rk3399"
+
+DEFAULTTUNE ?= "cortexa72-cortexa53-crypto"
+
+require conf/machine/include/tune-cortexa72-cortexa53.inc
+require conf/machine/include/soc-family.inc
+require conf/machine/include/rockchip-defaults.inc
+
+KBUILD_DEFCONFIG ?= "defconfig"
+KERNEL_CLASSES = "kernel-fitimage"
+KERNEL_IMAGETYPE = "fitImage"
+
+ATF_PLATFORM ?= "rk3399"
+ATF_TARGET ?= "bl31"
+ATF_SUFFIX ?= "elf"
+
+UBOOT_SUFFIX ?= "itb"
+UBOOT_ENTRYPOINT ?= "0x06000000"
+
+SERIAL_CONSOLES = "115200;ttyS2"
+
+PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot"
+SPL_BINARY ?= "idbloader.img"
+
diff --git a/conf/machine/include/rockchip-defaults.inc 
b/conf/machine/include/rockchip-defaults.inc
index ed180f9..0507017 100644
--- a/conf/machine/include/rockchip-defaults.inc
+++ b/conf/machine/include/rockchip-defaults.inc
@@ -3,8 +3,6 @@
 # kernel
 PREFERRED_PROVIDER_virtual/kernel ?= "linux-stable"
 LINUX_VERSION_EXTENSION ?= "-rockchip"
-KBUILD_DEFCONFIG = "multi_v7_defconfig"
-KERNEL_IMAGETYPE = "zImage"
 
 # xserver
 PREFERRED_PROVIDER_virtual/xserver = "xserver-xorg"
diff --git 
a/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware/0001-rockchip-Prevent-macro-expansion-in-paths.patch
 
b/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware/0001-rockchip-Prevent-macro-expansion-in-paths.patch
new file mode 100644
index 0000000..755b618
--- /dev/null
+++ 
b/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware/0001-rockchip-Prevent-macro-expansion-in-paths.patch
@@ -0,0 +1,94 @@
+From 39a97dce61aca9f618e28e26c6e441c8976f3172 Mon Sep 17 00:00:00 2001
+From: Joshua Watt <[email protected]>
+Date: Fri, 13 Dec 2019 13:44:55 -0600
+Subject: [PATCH] rockchip: Prevent macro expansion in paths
+
+Instead of stringizing the paths to binary files, add them as string
+defines on the command line (e.g. -DFOO=\"BAR\" instead of -DFOO=BAR).
+This prevents macros from being expanded inside the string value itself.
+For example, -DFOO=/path/with-linux-in-it would have been expanded to
+"/path/with-1-in-it" because `linux=1` is one of the standard GCC
+defines.
+
+Upstream-Status: Accepted 
[https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/2813]
+Change-Id: I7b65df3c9930faed4f1aff75ad726982ae3671e6
+Signed-off-by: Joshua Watt <[email protected]>
+---
+ plat/rockchip/rk3399/drivers/dp/cdn_dp.c  |  2 +-
+ plat/rockchip/rk3399/drivers/pmu/pmu_fw.c | 24 +++++++++++------------
+ plat/rockchip/rk3399/platform.mk          |  6 +++---
+ 3 files changed, 15 insertions(+), 17 deletions(-)
+
+diff --git a/plat/rockchip/rk3399/drivers/dp/cdn_dp.c 
b/plat/rockchip/rk3399/drivers/dp/cdn_dp.c
+index aa71fdea..a8773f4f 100644
+--- a/plat/rockchip/rk3399/drivers/dp/cdn_dp.c
++++ b/plat/rockchip/rk3399/drivers/dp/cdn_dp.c
+@@ -18,7 +18,7 @@ __asm__(
+       ".global hdcp_handler\n"
+       ".balign 4\n"
+       "hdcp_handler:\n"
+-      ".incbin \"" __XSTRING(HDCPFW) "\"\n"
++      ".incbin \"" HDCPFW "\"\n"
+       ".type hdcp_handler, %function\n"
+       ".size hdcp_handler, .- hdcp_handler\n"
+       ".popsection\n"
+diff --git a/plat/rockchip/rk3399/drivers/pmu/pmu_fw.c 
b/plat/rockchip/rk3399/drivers/pmu/pmu_fw.c
+index a09ad21e..25596b18 100644
+--- a/plat/rockchip/rk3399/drivers/pmu/pmu_fw.c
++++ b/plat/rockchip/rk3399/drivers/pmu/pmu_fw.c
+@@ -5,20 +5,18 @@
+  */
+ 
+ /* convoluted way to make sure that the define is pasted just the right way */
+-#define _INCBIN(file, sym, sec) \
++#define INCBIN(file, sym, sec) \
+       __asm__( \
+-              ".section " #sec "\n" \
+-              ".global " #sym "\n" \
+-              ".type " #sym ", %object\n" \
++              ".section " sec "\n" \
++              ".global " sym "\n" \
++              ".type " sym ", %object\n" \
+               ".align 4\n" \
+-              #sym ":\n" \
+-              ".incbin \"" #file "\"\n" \
+-              ".size " #sym ", .-" #sym "\n" \
+-              ".global " #sym "_end\n" \
+-              #sym "_end:\n" \
++              sym ":\n" \
++              ".incbin \"" file "\"\n" \
++              ".size " sym ", .-" sym "\n" \
++              ".global " sym "_end\n" \
++              sym "_end:\n" \
+       )
+ 
+-#define INCBIN(file, sym, sec) _INCBIN(file, sym, sec)
+-
+-INCBIN(RK3399M0FW, rk3399m0_bin, ".sram.incbin");
+-INCBIN(RK3399M0PMUFW, rk3399m0pmu_bin, ".pmusram.incbin");
++INCBIN(RK3399M0FW, "rk3399m0_bin", ".sram.incbin");
++INCBIN(RK3399M0PMUFW, "rk3399m0pmu_bin", ".pmusram.incbin");
+diff --git a/plat/rockchip/rk3399/platform.mk 
b/plat/rockchip/rk3399/platform.mk
+index cfc48e8f..643c24f5 100644
+--- a/plat/rockchip/rk3399/platform.mk
++++ b/plat/rockchip/rk3399/platform.mk
+@@ -82,13 +82,13 @@ PLAT_M0                 :=      ${PLAT}m0
+ BUILD_M0              :=      ${BUILD_PLAT}/m0
+ 
+ RK3399M0FW=${BUILD_M0}/${PLAT_M0}.bin
+-$(eval $(call add_define,RK3399M0FW))
++$(eval $(call add_define_val,RK3399M0FW,\"$(RK3399M0FW)\"))
+ 
+ RK3399M0PMUFW=${BUILD_M0}/${PLAT_M0}pmu.bin
+-$(eval $(call add_define,RK3399M0PMUFW))
++$(eval $(call add_define_val,RK3399M0PMUFW,\"$(RK3399M0PMUFW)\"))
+ 
+ HDCPFW=${RK_PLAT_SOC}/drivers/dp/hdcp.bin
+-$(eval $(call add_define,HDCPFW))
++$(eval $(call add_define_val,HDCPFW,\"$(HDCPFW)\"))
+ 
+ # CCACHE_EXTRAFILES is needed because ccache doesn't handle .incbin
+ export CCACHE_EXTRAFILES
+-- 
+2.23.0
+
diff --git a/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_2.2.bb 
b/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_2.2.bb
index 710336a..602ce30 100644
--- a/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_2.2.bb
+++ b/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_2.2.bb
@@ -6,10 +6,16 @@ HOMEPAGE = "https://developer.trustedfirmware.org/";
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = 
"file://docs/license.rst;md5=189505435dbcdcc8caa63c46fe93fa89"
 
+# Rockchip RK3399 compiles some M0 firmware which requires an arm-none-eabi GCC
+# toolchain
+DEPENDS_rk3399 = "virtual/arm-none-eabi-gcc"
+
 PROVIDES = "virtual/atf"
 
 BRANCH = "master"
-SRC_URI = 
"git://git.trustedfirmware.org/TF-A/trusted-firmware-a.git;protocol=http;branch=${BRANCH}"
+SRC_URI = 
"git://git.trustedfirmware.org/TF-A/trusted-firmware-a.git;protocol=http;branch=${BRANCH}
 \
+           file://0001-rockchip-Prevent-macro-expansion-in-paths.patch \
+           "
 SRCREV = "a04808c16cfc126d9fe572ae7c4b5a3d39de5796"
 
 S = "${WORKDIR}/git"
diff --git a/recipes-bsp/u-boot/u-boot%.bbappend 
b/recipes-bsp/u-boot/u-boot%.bbappend
index 801f710..401d649 100644
--- a/recipes-bsp/u-boot/u-boot%.bbappend
+++ b/recipes-bsp/u-boot/u-boot%.bbappend
@@ -4,3 +4,11 @@ do_compile_append_rock2-square () {
                cp ${B}/spl/${SPL_BINARY} ${B}
        fi
 }
+
+ATF_DEPENDS ??= ""
+
+EXTRA_OEMAKE_append_rk3399 = " BL31=${DEPLOY_DIR_IMAGE}/bl31.elf"
+ATF_DEPENDS_rk3399 = "virtual/atf:do_deploy"
+
+do_compile[depends] += "${ATF_DEPENDS}"
+
diff --git a/recipes-graphics/mesa/mesa_%.bbappend 
b/recipes-graphics/mesa/mesa_%.bbappend
index 5856c71..3e8711c 100644
--- a/recipes-graphics/mesa/mesa_%.bbappend
+++ b/recipes-graphics/mesa/mesa_%.bbappend
@@ -1 +1,2 @@
 PACKAGECONFIG_append_rk3288 = " kmsro panfrost"
+PACKAGECONFIG_append_rk3399 = " kmsro panfrost"
diff --git a/wic/rk3399-boot.wks b/wic/rk3399-boot.wks
new file mode 100644
index 0000000..100b94d
--- /dev/null
+++ b/wic/rk3399-boot.wks
@@ -0,0 +1,24 @@
+# Copyright (C) 2020 Garmin Ltd. or its subsidiaries
+# Released under the MIT license (see COPYING.MIT for the terms)
+#
+# Disk layout
+# Note that the reference documentation refers to 512 byte disk sectors, but
+# wic uses 1KB blocks
+#
+#   Partition   Start Sector    Number of Sectors
+#   loader1     64              8000
+#   reserved1   8064            128
+#   reserved2   8192            8192
+#   loader2     16384           8192
+#   atf         24576           8192
+#   boot        32768           229376
+#   root        262144          -
+#
+
+part loader1    --align 32     --size 4000K            --source rawcopy 
--sourceparams="file=idbloader.img"
+part reserved1  --align 4032   --size 64K
+part reserved2  --align 4096   --size 4096K
+part loader2    --align 8192   --size 4096K            --source rawcopy 
--sourceparams="file=u-boot.itb"
+part atf        --align 12288  --size 4096K
+part /boot      --align 16384  --size=114688K --active --source 
bootimg-partition --fstype=vfat --label boot --sourceparams="loader=u-boot"
+
-- 
2.24.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#48117): https://lists.yoctoproject.org/g/yocto/message/48117
Mute This Topic: https://lists.yoctoproject.org/mt/70054502/21656
Group Owner: [email protected]
Unsubscribe: https://lists.yoctoproject.org/g/yocto/unsub  
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to