Add support for Samsung Galaxy S20 5G, based on exynos 990, to the current samsung board support. This platform, just like exynos8895, needs a bit to be set in order to allow the framebuffer to refresh.
Barebox has to be packaged as an android boot image: mkbootimg --kernel images/barebox-exynos.img \ --ramdisk ramdisk.bin \ --dt stock.dtb --cmdline "buildvariant=eng" \ --base 0x10000000 \ --kernel_offset 0x00008000 \ --ramdisk_offset 0x01000000 \ --second_offset 0x00f00000 \ --tags_offset 0x00000100 \ --os_version 9.0.0 \ --os_patch_level 2019-10 \ --pagesize 2048 \ --hash sha1 \ --output boot.img And then flashed to the boot partition: heimdall flash --BOOT boot.img Currently, only a minimal set of features work. It's possible to boot a FIT image packaged as a ramdisk with mkbootimg. Signed-off-by: Ivaylo Ivanov <ivo.ivanov.ivan...@gmail.com> Tested-by: Umer Uddin <umer.ud...@mentallysanemainliners.org> --- The tester is also the one who upstreamed support for x1s in mainline linux. He volunteered for me to upstream barebox support for it alongside dreamlte, hence why I have my copyright in the x1s overlay device tree. --- arch/arm/boards/samsung-exynos/board.c | 4 ++++ .../samsung-exynos/defaultenv-exynos/boot/ramfit | 4 ++++ arch/arm/boards/samsung-exynos/lowlevel.c | 3 +++ arch/arm/dts/Makefile | 3 ++- arch/arm/dts/exynos990-x1s.dts | 13 +++++++++++++ 5 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 arch/arm/dts/exynos990-x1s.dts diff --git a/arch/arm/boards/samsung-exynos/board.c b/arch/arm/boards/samsung-exynos/board.c index 2d0c2248..f26da64a 100644 --- a/arch/arm/boards/samsung-exynos/board.c +++ b/arch/arm/boards/samsung-exynos/board.c @@ -13,6 +13,7 @@ #include <of_address.h> #define EXYNOS8895_DECON0 0x12860000 +#define EXYNOS990_DECON0 0x19050000 #define HW_SW_TRIG_CONTROL 0x70 #define TRIG_AUTO_MASK_EN BIT(12) #define SW_TRIG_EN BIT(8) @@ -30,6 +31,8 @@ static int exynos_postcore_init(void) */ if (of_machine_is_compatible("samsung,exynos8895")) trig_ctrl = IOMEM(EXYNOS8895_DECON0 + HW_SW_TRIG_CONTROL); + else if (of_machine_is_compatible("samsung,exynos990")) + trig_ctrl = IOMEM(EXYNOS990_DECON0 + HW_SW_TRIG_CONTROL); else return 0; @@ -52,6 +55,7 @@ static inline int exynos_init(struct device *dev) static const struct of_device_id exynos_of_match[] = { { .compatible = "samsung,dreamlte" }, + { .compatible = "samsung,x1s" }, { /* Sentinel */}, }; diff --git a/arch/arm/boards/samsung-exynos/defaultenv-exynos/boot/ramfit b/arch/arm/boards/samsung-exynos/defaultenv-exynos/boot/ramfit index 0912c9fc..c8fc7e55 100644 --- a/arch/arm/boards/samsung-exynos/defaultenv-exynos/boot/ramfit +++ b/arch/arm/boards/samsung-exynos/defaultenv-exynos/boot/ramfit @@ -8,5 +8,9 @@ if test "$global.model" = "Samsung Galaxy S8 (SM-G950F)"; then global fit_offset=0x9000000 fi +if test "$global.model" = "Samsung Galaxy S20 5G"; then + global fit_offset=0x4000000 +fi + addpart /dev/ram0 0x2000000@$global.fit_offset(fit) bootm -f /dev/ram0.fit diff --git a/arch/arm/boards/samsung-exynos/lowlevel.c b/arch/arm/boards/samsung-exynos/lowlevel.c index bb040611..fe6fd6ed 100644 --- a/arch/arm/boards/samsung-exynos/lowlevel.c +++ b/arch/arm/boards/samsung-exynos/lowlevel.c @@ -12,6 +12,7 @@ #include <asm/mmu.h> extern char __dtb_exynos8895_dreamlte_start[]; +extern char __dtb_exynos990_x1s_start[]; /* called from assembly */ void lowlevel_exynos(void *downstream_fdt); @@ -55,6 +56,8 @@ static noinline void exynos_continue(void *downstream_fdt) /* select device tree dynamically */ if (is_model(downstream_fdt, "Samsung DREAMLTE")) { __dtb_start = __dtb_exynos8895_dreamlte_start; + } else if (is_model(downstream_fdt, "Samsung X1S")) { + __dtb_start = __dtb_exynos990_x1s_start; } else { /* we didn't match any device */ return; diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index a53834f7..58f05871 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -13,7 +13,8 @@ lwl-$(CONFIG_MACH_BEAGLEPLAY) += k3-am625-beagleplay.dtb.o k3-am625-r5-beaglepla lwl-$(CONFIG_MACH_CLEP7212) += ep7212-clep7212.dtb.o lwl-$(CONFIG_MACH_CM_FX6) += imx6dl-cm-fx6.dtb.o imx6q-cm-fx6.dtb.o imx6q-utilite.dtb.o lwl-$(CONFIG_MACH_DFI_FS700_M60) += imx6q-dfi-fs700-m60-6q.dtb.o imx6dl-dfi-fs700-m60-6s.dtb.o -lwl-$(CONFIG_MACH_EXYNOS) += exynos8895-dreamlte.dtb.o +lwl-$(CONFIG_MACH_EXYNOS) += exynos8895-dreamlte.dtb.o \ + exynos990-x1s.dtb.o lwl-$(CONFIG_MACH_DUCKBILL) += imx28-duckbill.dtb.o lwl-$(CONFIG_MACH_KINDLE_MX50) += imx50-kindle-d01100.dtb.o imx50-kindle-d01200.dtb.o imx50-kindle-ey21.dtb.o lwl-$(CONFIG_MACH_EFIKA_MX_SMARTBOOK) += imx51-genesi-efika-sb.dtb.o diff --git a/arch/arm/dts/exynos990-x1s.dts b/arch/arm/dts/exynos990-x1s.dts new file mode 100644 index 00000000..19d59eaa --- /dev/null +++ b/arch/arm/dts/exynos990-x1s.dts @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause +/* + * Samsung Galaxy S20 5G (x1s/SM-G981B) barebox device tree source + * + * Copyright (c) 2025, Ivaylo Ivanov <ivo.ivanov.ivan...@gmail.com> + */ + +/dts-v1/; +#include <arm64/exynos/exynos990-x1s.dts> + +/ { + barebox,deep-probe; +}; -- 2.43.0