diff mbox series

[v4,3/3] configs/beaglev_ahead: new defconfig

Message ID 20240214233028.1226645-4-kilian.zinnecker@mail.de
State New
Headers show
Series Add board support for the BeagleV-Ahead | expand

Commit Message

Kilian Zinnecker Feb. 14, 2024, 11:30 p.m. UTC
This patch adds board support for the BeagleV-Ahead. It uses a
custom kernel for the board's SoC. As the SoC has an outdated and
currently not supported version of the RISC-V vector extension, the
vector extension is disabled. The used OpenSBI version for this board
support does not define the neccessary flags for GCC 12 to activate
the zicsr and zifencei extensions. Therefore this board support uses
GCC 13.

The boot command for the custom uboot to boot the kernel could not
easily be changed. It seemed that a default boot command was persisent
and any change to it by normal means (e.g., uboot config parameters
like CONFIG_BOOT_COMMAND) did not have any effect. Hence a patch for
the custom u-boot is introduced for now, to insert the proper boot
command.

The custom kernel has CLOCK_ALLOW_WRITE_DEBUGFS enabled by default.
Therefore, this boards supports features a patch, which disables this
again, as this option can be dangerous, if activated.

https://www.beagleboard.org/boards/beaglev-ahead

Signed-off-by: Kilian Zinnecker <kilian.zinnecker@mail.de>
---
 DEVELOPERS                                    |  2 +
 board/beaglev-ahead/genimage.cfg              | 62 +++++++++++++++
 board/beaglev-ahead/linux.fragment            |  2 +
 ...01-Disable-CLOCK_ALLOW_WRITE_DEBUGFS.patch | 30 +++++++
 .../0001-Overwrite-bootcmd-by-force.patch     | 30 +++++++
 board/beaglev-ahead/post-image.sh             |  6 ++
 board/beaglev-ahead/readme.txt                | 78 +++++++++++++++++++
 board/beaglev-ahead/uEnv.txt                  |  4 +
 board/beaglev-ahead/uboot.fragment            |  2 +
 configs/beaglev_ahead_defconfig               | 46 +++++++++++
 10 files changed, 262 insertions(+)
 create mode 100644 board/beaglev-ahead/genimage.cfg
 create mode 100644 board/beaglev-ahead/linux.fragment
 create mode 100644 board/beaglev-ahead/patches/linux/0001-Disable-CLOCK_ALLOW_WRITE_DEBUGFS.patch
 create mode 100644 board/beaglev-ahead/patches/uboot/0001-Overwrite-bootcmd-by-force.patch
 create mode 100755 board/beaglev-ahead/post-image.sh
 create mode 100644 board/beaglev-ahead/readme.txt
 create mode 100644 board/beaglev-ahead/uEnv.txt
 create mode 100644 board/beaglev-ahead/uboot.fragment
 create mode 100644 configs/beaglev_ahead_defconfig

Comments

Giulio Benetti Feb. 15, 2024, 5:57 p.m. UTC | #1
Hi Kilian,

On 15/02/24 00:30, Kilian Zinnecker via buildroot wrote:
> This patch adds board support for the BeagleV-Ahead. It uses a
> custom kernel for the board's SoC. As the SoC has an outdated and
> currently not supported version of the RISC-V vector extension, the
> vector extension is disabled. The used OpenSBI version for this board
> support does not define the neccessary flags for GCC 12 to activate
> the zicsr and zifencei extensions. Therefore this board support uses
> GCC 13.
> 
> The boot command for the custom uboot to boot the kernel could not
> easily be changed. It seemed that a default boot command was persisent
> and any change to it by normal means (e.g., uboot config parameters
> like CONFIG_BOOT_COMMAND) did not have any effect. Hence a patch for
> the custom u-boot is introduced for now, to insert the proper boot
> command.
> 
> The custom kernel has CLOCK_ALLOW_WRITE_DEBUGFS enabled by default.
> Therefore, this boards supports features a patch, which disables this
> again, as this option can be dangerous, if activated.
> 
> https://www.beagleboard.org/boards/beaglev-ahead
> 
> Signed-off-by: Kilian Zinnecker <kilian.zinnecker@mail.de>
> ---
>   DEVELOPERS                                    |  2 +
>   board/beaglev-ahead/genimage.cfg              | 62 +++++++++++++++
>   board/beaglev-ahead/linux.fragment            |  2 +
>   ...01-Disable-CLOCK_ALLOW_WRITE_DEBUGFS.patch | 30 +++++++
>   .../0001-Overwrite-bootcmd-by-force.patch     | 30 +++++++
>   board/beaglev-ahead/post-image.sh             |  6 ++
>   board/beaglev-ahead/readme.txt                | 78 +++++++++++++++++++
>   board/beaglev-ahead/uEnv.txt                  |  4 +
>   board/beaglev-ahead/uboot.fragment            |  2 +
>   configs/beaglev_ahead_defconfig               | 46 +++++++++++
>   10 files changed, 262 insertions(+)
>   create mode 100644 board/beaglev-ahead/genimage.cfg
>   create mode 100644 board/beaglev-ahead/linux.fragment
>   create mode 100644 board/beaglev-ahead/patches/linux/0001-Disable-CLOCK_ALLOW_WRITE_DEBUGFS.patch
>   create mode 100644 board/beaglev-ahead/patches/uboot/0001-Overwrite-bootcmd-by-force.patch
>   create mode 100755 board/beaglev-ahead/post-image.sh
>   create mode 100644 board/beaglev-ahead/readme.txt
>   create mode 100644 board/beaglev-ahead/uEnv.txt
>   create mode 100644 board/beaglev-ahead/uboot.fragment
>   create mode 100644 configs/beaglev_ahead_defconfig
> 
> diff --git a/DEVELOPERS b/DEVELOPERS
> index e9a9910d69..adc6c09a7a 100644
> --- a/DEVELOPERS
> +++ b/DEVELOPERS
> @@ -1895,8 +1895,10 @@ F:	package/libcamera/
>   
>   N:	Kilian Zinnecker <kilian.zinnecker@mail.de>
>   F:	board/avnet/rzboard_v2l/
> +F:	board/beaglev-ahead/
>   F:	board/radxa/rock5b/
>   F:	configs/avnet_rzboard_v2l_defconfig
> +F:	configs/beaglev_ahead_defconfig
>   F:	configs/rock5b_defconfig
>   F:	package/rockchip-rkbin/
>   F:	package/xuantie-bins/
> diff --git a/board/beaglev-ahead/genimage.cfg b/board/beaglev-ahead/genimage.cfg
> new file mode 100644
> index 0000000000..080b169527
> --- /dev/null
> +++ b/board/beaglev-ahead/genimage.cfg
> @@ -0,0 +1,62 @@
> +# SD card image for BeagleV-Ahead
> +
> +image boot.vfat {
> +	vfat {
> +		files = {
> +			"fw_dynamic.bin",
> +			"Image",
> +			"light_aon_fpga.bin",
> +			"light-beagle.dtb",
> +			"light_c906_audio.bin",
> +		}
> +
> +		file uEnv.txt {
> +			image = "uEnv.txt"
> +		}

file uEnv.txt can be listed in files = {} group

> +
> +		file overlays/BBORG_LOAD-00A2.dtbo {
> +			image = "overlays/BBORG_LOAD-00A2.dtbo"
> +		}
> +
> +		file overlays/BBORG_RELAY-00A2.dtbo {
> +			image = "overlays/BBORG_RELAY-00A2.dtbo"
> +		}
> +
> +		file overlays/BONE-LED_P8_03.dtbo {
> +			image = "overlays/BONE-LED_P8_03.dtbo"
> +		}
> +
> +		file overlays/BONE-LED_P9_11.dtbo {
> +			image = "overlays/BONE-LED_P9_11.dtbo"
> +		}
> +
> +		file overlays/BVA-MIKROBUS-0.dtbo {
> +			image = "overlays/BVA-MIKROBUS-0.dtbo"
> +		}

same goes for the entire overlays folder like this:
image boot.vfat {
         vfat {
                 files = {
                         "fw_dynamic.bin",
                         "Image",
                         "light_aon_fpga.bin",
                         "light-beagle.dtb",
                         "light_c906_audio.bin",
                         "uEnv.txt",
                         "overlays"
                 }
         }
         size = 48M
}

you can check it works by mounting boot.vfat in images folder like this:
$ cd output/images
$ mkdir mnt
$ sudo mount -o loop boot.vfat mnt/
$ cd mnt
$ ls
$ cd overlays
$ ls

you will see all the needed files there

> +	}
> +	size = 48M
> +}
> +
> +image sdcard.img {
> +	hdimage {
> +		partition-table-type = "gpt"
> +		gpt-location = 2M
> +	}
> +
> +	partition uboot {
> +		in-partition-table = "false"
> +		image = "u-boot-with-spl.bin"
> +		offset = 0
> +		holes = {"(440; 1048576)"}
> +	}
> +
> +	partition boot {
> +		bootable = "true"
> +		image = "boot.vfat"
> +	}
> +
> +	partition rootfs {
> +		image = "rootfs.ext2"
> +	}
> +}
> +
> diff --git a/board/beaglev-ahead/linux.fragment b/board/beaglev-ahead/linux.fragment
> new file mode 100644
> index 0000000000..00f93f39a4
> --- /dev/null
> +++ b/board/beaglev-ahead/linux.fragment
> @@ -0,0 +1,2 @@
> +# CONFIG_VECTOR is not set
> +# CONFIG_VECTOR_0_7 is not set
> diff --git a/board/beaglev-ahead/patches/linux/0001-Disable-CLOCK_ALLOW_WRITE_DEBUGFS.patch b/board/beaglev-ahead/patches/linux/0001-Disable-CLOCK_ALLOW_WRITE_DEBUGFS.patch
> new file mode 100644
> index 0000000000..0487e43101
> --- /dev/null
> +++ b/board/beaglev-ahead/patches/linux/0001-Disable-CLOCK_ALLOW_WRITE_DEBUGFS.patch
> @@ -0,0 +1,30 @@
> +From c82d614da43c3c2f7cdc7580c9ee24bd2ce203cd Mon Sep 17 00:00:00 2001
> +From: Kilian Zinnecker <kilian.zinnecker@mail.de>
> +Date: Wed, 14 Feb 2024 20:54:37 +0100
> +Subject: [PATCH] Disable CLOCK_ALLOW_WRITE_DEBUGFS
> +
> +CLOCK_ALLOW_WRITE_DEBUGFS is disabled as default, as it can be
> +very dangerous, see:
> +
> +https://lkml.org/lkml/2022/1/24/3382
> +
> +Signed-off-by: Kilian Zinnecker <kilian.zinnecker@mail.de>
> +---
> + drivers/clk/clk.c | 1 -
> + 1 file changed, 1 deletion(-)
> +
> +diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
> +index 77774a8c701b..a6ba04ce0237 100644
> +--- a/drivers/clk/clk.c
> ++++ b/drivers/clk/clk.c
> +@@ -3131,7 +3131,6 @@ static int clk_dump_show(struct seq_file *s, void *data)
> + }
> + DEFINE_SHOW_ATTRIBUTE(clk_dump);
> +
> +-#define CLOCK_ALLOW_WRITE_DEBUGFS
> + #ifdef CLOCK_ALLOW_WRITE_DEBUGFS
> + /*
> +  * This can be dangerous, therefore don't provide any real compile time
> +--
> +2.34.1
> +
> diff --git a/board/beaglev-ahead/patches/uboot/0001-Overwrite-bootcmd-by-force.patch b/board/beaglev-ahead/patches/uboot/0001-Overwrite-bootcmd-by-force.patch
> new file mode 100644
> index 0000000000..bcf5b965ce
> --- /dev/null
> +++ b/board/beaglev-ahead/patches/uboot/0001-Overwrite-bootcmd-by-force.patch
> @@ -0,0 +1,30 @@
> +From 81db2d155db74192e127ae1d98dd4ec415f53dd3 Mon Sep 17 00:00:00 2001
> +From: Kilian Zinnecker <kilian.zinnecker@mail.de>
> +Date: Mon, 21 Aug 2023 23:51:59 +0200
> +Subject: [PATCH] Overwrite bootcmd by force
> +
> +This patch is a dirty hack: Trying to overwrite the bootcmd via the
> +usual BOOT_COMMAND had no effect: Upon boot the bootcmd defaulted
> +to some preset value and could not be changed easily. Therefore a
> +hook is used to force the bootcmd to be overwritten.
> +
> +Signed-off-by: Kilian Zinnecker <kilian.zinnecker@mail.de>
> +---
> + board/thead/light-c910/light.c | 1 +
> + 1 file changed, 1 insertion(+)
> +
> +diff --git a/board/thead/light-c910/light.c b/board/thead/light-c910/light.c
> +index 8d5478e916..1448db974e 100644
> +--- a/board/thead/light-c910/light.c
> ++++ b/board/thead/light-c910/light.c
> +@@ -2282,6 +2282,7 @@ int board_late_init(void)
> + 	light_usb_boot_check();
> + 	do_firmware_load();
> + 	ap_peri_clk_disable();
> ++	run_command("load mmc 1:1 $ramdisk_addr_r uEnv.txt; env import -t $ramdisk_addr_r $filesize; run uenvcmd", 0);

as pointed in V3 this should be solved without this patch, please keep
testing u-boot variables using uEnv.txt in VFAT and once it works, and
it should because you've found the same problem using custom and
mainline u-boot, please drop this patch.

> + 	return 0;
> + }
> +
> +--
> +2.34.1
> +
> diff --git a/board/beaglev-ahead/post-image.sh b/board/beaglev-ahead/post-image.sh
> new file mode 100755
> index 0000000000..9e16eeff3f
> --- /dev/null
> +++ b/board/beaglev-ahead/post-image.sh
> @@ -0,0 +1,6 @@
> +#!/usr/bin/env bash
> +set -e
> +
> +cp -r ${BUILD_DIR}/linux-custom/arch/riscv/boot/dts/thead/overlays/ ${BINARIES_DIR}
> +cp board/beaglev-ahead/uEnv.txt ${BINARIES_DIR}/
> +support/scripts/genimage.sh -c board/beaglev-ahead/genimage.cfg
> diff --git a/board/beaglev-ahead/readme.txt b/board/beaglev-ahead/readme.txt
> new file mode 100644
> index 0000000000..758082a792
> --- /dev/null
> +++ b/board/beaglev-ahead/readme.txt
> @@ -0,0 +1,78 @@
> +BeagleV-Ahead
> +==============
> +https://www.beagleboard.org/boards/beaglev-ahead
> +https://forum.beagleboard.org/c/beaglev/
> +
> +The SoC (TH1520) of the BeagleV-Ahead implements an outdated and
> +currently not supported version of the RISC-V vector extension. Hence,
> +the vector extension is disabled. The used OpenSBI version for this
> +board support does not define the neccessary flags for GCC 12 to
> +activate the zicsr and zifencei extensions. Therefore this board
> +support uses GCC 13.
> +
> +Build:
> +======
> +  $ make beaglev_ahead_defconfig
> +  $ make
> +
> +Files created in output directory
> +=================================
> +
> +output/images
> +.
> +├── boot.vfat
> +├── bootloader-JH7100-buildroot.bin.out
> +├── ddrinit-2133-buildroot.bin.out
> +├── fw_dynamic.bin
> +├── fw_dynamic.elf
> +├── fw_jump.bin
> +├── fw_jump.elf
> +├── fw_payload.bin
> +├── fw_payload.elf
> +├── Image
> +├── light-beagle.dtb
> +├── light_aon_fpga.bin
> +├── light_c906_audio.bin
> +├── overlays

overlays/

> +├── rootfs.ext2
> +├── rootfs.ext4
> +├── rootfs.tar
> +├── sdcard.img
> +├── u-boot-with-spl.bin
> +├── u-boot.bin
> +└── uEnv.txt
> +
> +Creating bootable SD card:
> +==========================
> +
> +Simply invoke (as root)
> +
> +sudo dd if=output/images/sdcard.img of=/dev/sdX && sync
> +
> +Where X is your SD card device.
> +
> +Booting:
> +========
> +
> +SD card boot button:
> +--------------------
> +To let the board boot from SD card, keep the "SD button" pressed during power
> +up / power cycle. The button is near the SD card slot.
> +
> +Serial console:
> +---------------
> +The BeagleV-Ahead has a "Debug" GPIO header. Its layout can be seen here:
> +https://docs.beagleboard.org/latest/boards/beaglev/ahead/02-quick-start.html#access-uart-debug-console
> +
> +Note, that there are reported issues with some uart interface cables/dongles:
> +https://forum.beagleboard.org/t/beaglev-ahead-debug-terminal-problems/35331
> +
> +Baudrate for this board is 115200.
> +
> +Login:
> +------
> +Enter 'root' as login user, and the prompt is ready.
> +
> +wiki link:
> +----------
> +https://docs.beagleboard.org/latest/boards/beaglev/ahead/index.html
> diff --git a/board/beaglev-ahead/uEnv.txt b/board/beaglev-ahead/uEnv.txt
> new file mode 100644
> index 0000000000..7e98ae5f81
> --- /dev/null
> +++ b/board/beaglev-ahead/uEnv.txt
> @@ -0,0 +1,4 @@
> +bootcmd=booti ${kernel_addr_r} - ${fdt_addr_r}
> +uenvcmd=fatload mmc 1:1 ${kernel_addr_r} Image; fatload mmc 1:1 ${fdt_addr_r} light-beagle.dtb
> +bootargs=root=/dev/mmcblk1p2 rootfstype=ext4 rootwait ro console=ttyS0,115200 earlycon clk_ignore_unused net.ifnames=0
> +
> diff --git a/board/beaglev-ahead/uboot.fragment b/board/beaglev-ahead/uboot.fragment
> new file mode 100644
> index 0000000000..1f51cef106
> --- /dev/null
> +++ b/board/beaglev-ahead/uboot.fragment
> @@ -0,0 +1,2 @@
> +CONFIG_LEGACY_IMAGE_FORMAT=y
> +CONFIG_AUTOBOOT=y
> diff --git a/configs/beaglev_ahead_defconfig b/configs/beaglev_ahead_defconfig
> new file mode 100644
> index 0000000000..9000b1f0ad
> --- /dev/null
> +++ b/configs/beaglev_ahead_defconfig
> @@ -0,0 +1,46 @@
> +BR2_riscv=y
> +BR2_riscv_custom=y
> +BR2_RISCV_ISA_RVM=y
> +BR2_RISCV_ISA_RVA=y
> +BR2_RISCV_ISA_RVF=y
> +BR2_RISCV_ISA_RVD=y
> +BR2_RISCV_ISA_RVC=y
> +# Use GCC 13 for OpenSBI zicsr zifencei issue
> +BR2_GCC_VERSION_13_X=y
> +BR2_GLOBAL_PATCH_DIR="board/beaglev-ahead/patches"
> +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/beaglev-ahead/post-image.sh"
> +BR2_TARGET_GENERIC_HOSTNAME="BeagleV-Ahead"
> +BR2_TARGET_GENERIC_ISSUE="Welcome to the BeagleV-Ahead"
> +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y
> +BR2_LINUX_KERNEL=y
> +BR2_LINUX_KERNEL_CUSTOM_GIT=y
> +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
> +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/beagleboard/linux/archive/refs/heads/beaglev-v5.10.113-1.1.2-ubuntu.tar.gz"
> +BR2_LINUX_KERNEL_DEFCONFIG="beaglev"
> +BR2_LINUX_KERNEL_DTS_SUPPORT=y
> +BR2_LINUX_KERNEL_INTREE_DTS_NAME="thead/light-beagle"
> +BR2_LINUX_KERNEL_INSTALL_TARGET=y
> +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
> +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/beaglev-ahead/linux.fragment"
> +BR2_TARGET_ROOTFS_EXT2=y
> +BR2_TARGET_ROOTFS_EXT2_4=y
> +BR2_TARGET_BEAGLEV_DDRINIT=y
> +BR2_TARGET_BEAGLEV_SECONDBOOT=y
> +BR2_TARGET_OPENSBI=y
> +BR2_TARGET_OPENSBI_CUSTOM_TARBALL=y
> +BR2_TARGET_OPENSBI_CUSTOM_TARBALL_LOCATION="https://github.com/beagleboard/beaglev-ahead-opensbi/archive/refs/heads/0.9-1.1.2-ubuntu.tar.gz"
> +BR2_TARGET_OPENSBI_PLAT="generic"
> +BR2_TARGET_OPENSBI_UBOOT_PAYLOAD=y
> +BR2_TARGET_UBOOT=y
> +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
> +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y
> +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="https://github.com/beagleboard/beaglev-ahead-u-boot/archive/refs/heads/beaglev-v2020.01-1.1.2-ubuntu.tar.gz"

if I've understood correctly the board works using latest stable
mainline u-boot. So please use that one instead of this that looks
unmaintained.

> +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="light_beagle"
> +BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="board/beaglev-ahead/uboot.fragment"
> +BR2_TARGET_UBOOT_FORMAT_BIN=y
> +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y
> +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-with-spl.bin"
> +BR2_PACKAGE_HOST_DOSFSTOOLS=y
> +BR2_PACKAGE_HOST_MTOOLS=y
> +BR2_PACKAGE_HOST_GENIMAGE=y
> +BR2_PACKAGE_XUANTIE_BINS=y

Thank you!

Best regards
diff mbox series

Patch

diff --git a/DEVELOPERS b/DEVELOPERS
index e9a9910d69..adc6c09a7a 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -1895,8 +1895,10 @@  F:	package/libcamera/
 
 N:	Kilian Zinnecker <kilian.zinnecker@mail.de>
 F:	board/avnet/rzboard_v2l/
+F:	board/beaglev-ahead/
 F:	board/radxa/rock5b/
 F:	configs/avnet_rzboard_v2l_defconfig
+F:	configs/beaglev_ahead_defconfig
 F:	configs/rock5b_defconfig
 F:	package/rockchip-rkbin/
 F:	package/xuantie-bins/
diff --git a/board/beaglev-ahead/genimage.cfg b/board/beaglev-ahead/genimage.cfg
new file mode 100644
index 0000000000..080b169527
--- /dev/null
+++ b/board/beaglev-ahead/genimage.cfg
@@ -0,0 +1,62 @@ 
+# SD card image for BeagleV-Ahead
+
+image boot.vfat {
+	vfat {
+		files = {
+			"fw_dynamic.bin",
+			"Image",
+			"light_aon_fpga.bin",
+			"light-beagle.dtb",
+			"light_c906_audio.bin",
+		}
+
+		file uEnv.txt {
+			image = "uEnv.txt"
+		}
+
+		file overlays/BBORG_LOAD-00A2.dtbo {
+			image = "overlays/BBORG_LOAD-00A2.dtbo"
+		}
+
+		file overlays/BBORG_RELAY-00A2.dtbo {
+			image = "overlays/BBORG_RELAY-00A2.dtbo"
+		}
+
+		file overlays/BONE-LED_P8_03.dtbo {
+			image = "overlays/BONE-LED_P8_03.dtbo"
+		}
+
+		file overlays/BONE-LED_P9_11.dtbo {
+			image = "overlays/BONE-LED_P9_11.dtbo"
+		}
+
+		file overlays/BVA-MIKROBUS-0.dtbo {
+			image = "overlays/BVA-MIKROBUS-0.dtbo"
+		}
+	}
+	size = 48M
+}
+
+image sdcard.img {
+	hdimage {
+		partition-table-type = "gpt"
+		gpt-location = 2M
+	}
+
+	partition uboot {
+		in-partition-table = "false"
+		image = "u-boot-with-spl.bin"
+		offset = 0
+		holes = {"(440; 1048576)"}
+	}
+
+	partition boot {
+		bootable = "true"
+		image = "boot.vfat"
+	}
+
+	partition rootfs {
+		image = "rootfs.ext2"
+	}
+}
+
diff --git a/board/beaglev-ahead/linux.fragment b/board/beaglev-ahead/linux.fragment
new file mode 100644
index 0000000000..00f93f39a4
--- /dev/null
+++ b/board/beaglev-ahead/linux.fragment
@@ -0,0 +1,2 @@ 
+# CONFIG_VECTOR is not set
+# CONFIG_VECTOR_0_7 is not set
diff --git a/board/beaglev-ahead/patches/linux/0001-Disable-CLOCK_ALLOW_WRITE_DEBUGFS.patch b/board/beaglev-ahead/patches/linux/0001-Disable-CLOCK_ALLOW_WRITE_DEBUGFS.patch
new file mode 100644
index 0000000000..0487e43101
--- /dev/null
+++ b/board/beaglev-ahead/patches/linux/0001-Disable-CLOCK_ALLOW_WRITE_DEBUGFS.patch
@@ -0,0 +1,30 @@ 
+From c82d614da43c3c2f7cdc7580c9ee24bd2ce203cd Mon Sep 17 00:00:00 2001
+From: Kilian Zinnecker <kilian.zinnecker@mail.de>
+Date: Wed, 14 Feb 2024 20:54:37 +0100
+Subject: [PATCH] Disable CLOCK_ALLOW_WRITE_DEBUGFS
+
+CLOCK_ALLOW_WRITE_DEBUGFS is disabled as default, as it can be
+very dangerous, see:
+
+https://lkml.org/lkml/2022/1/24/3382
+
+Signed-off-by: Kilian Zinnecker <kilian.zinnecker@mail.de>
+---
+ drivers/clk/clk.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
+index 77774a8c701b..a6ba04ce0237 100644
+--- a/drivers/clk/clk.c
++++ b/drivers/clk/clk.c
+@@ -3131,7 +3131,6 @@ static int clk_dump_show(struct seq_file *s, void *data)
+ }
+ DEFINE_SHOW_ATTRIBUTE(clk_dump);
+ 
+-#define CLOCK_ALLOW_WRITE_DEBUGFS
+ #ifdef CLOCK_ALLOW_WRITE_DEBUGFS
+ /*
+  * This can be dangerous, therefore don't provide any real compile time
+-- 
+2.34.1
+
diff --git a/board/beaglev-ahead/patches/uboot/0001-Overwrite-bootcmd-by-force.patch b/board/beaglev-ahead/patches/uboot/0001-Overwrite-bootcmd-by-force.patch
new file mode 100644
index 0000000000..bcf5b965ce
--- /dev/null
+++ b/board/beaglev-ahead/patches/uboot/0001-Overwrite-bootcmd-by-force.patch
@@ -0,0 +1,30 @@ 
+From 81db2d155db74192e127ae1d98dd4ec415f53dd3 Mon Sep 17 00:00:00 2001
+From: Kilian Zinnecker <kilian.zinnecker@mail.de>
+Date: Mon, 21 Aug 2023 23:51:59 +0200
+Subject: [PATCH] Overwrite bootcmd by force
+
+This patch is a dirty hack: Trying to overwrite the bootcmd via the
+usual BOOT_COMMAND had no effect: Upon boot the bootcmd defaulted
+to some preset value and could not be changed easily. Therefore a
+hook is used to force the bootcmd to be overwritten.
+
+Signed-off-by: Kilian Zinnecker <kilian.zinnecker@mail.de>
+---
+ board/thead/light-c910/light.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/board/thead/light-c910/light.c b/board/thead/light-c910/light.c
+index 8d5478e916..1448db974e 100644
+--- a/board/thead/light-c910/light.c
++++ b/board/thead/light-c910/light.c
+@@ -2282,6 +2282,7 @@ int board_late_init(void)
+ 	light_usb_boot_check();
+ 	do_firmware_load();
+ 	ap_peri_clk_disable();
++	run_command("load mmc 1:1 $ramdisk_addr_r uEnv.txt; env import -t $ramdisk_addr_r $filesize; run uenvcmd", 0);
+ 	return 0;
+ }
+
+--
+2.34.1
+
diff --git a/board/beaglev-ahead/post-image.sh b/board/beaglev-ahead/post-image.sh
new file mode 100755
index 0000000000..9e16eeff3f
--- /dev/null
+++ b/board/beaglev-ahead/post-image.sh
@@ -0,0 +1,6 @@ 
+#!/usr/bin/env bash
+set -e
+
+cp -r ${BUILD_DIR}/linux-custom/arch/riscv/boot/dts/thead/overlays/ ${BINARIES_DIR}
+cp board/beaglev-ahead/uEnv.txt ${BINARIES_DIR}/
+support/scripts/genimage.sh -c board/beaglev-ahead/genimage.cfg
diff --git a/board/beaglev-ahead/readme.txt b/board/beaglev-ahead/readme.txt
new file mode 100644
index 0000000000..758082a792
--- /dev/null
+++ b/board/beaglev-ahead/readme.txt
@@ -0,0 +1,78 @@ 
+BeagleV-Ahead
+==============
+https://www.beagleboard.org/boards/beaglev-ahead
+https://forum.beagleboard.org/c/beaglev/
+
+The SoC (TH1520) of the BeagleV-Ahead implements an outdated and
+currently not supported version of the RISC-V vector extension. Hence,
+the vector extension is disabled. The used OpenSBI version for this
+board support does not define the neccessary flags for GCC 12 to
+activate the zicsr and zifencei extensions. Therefore this board
+support uses GCC 13.
+
+Build:
+======
+  $ make beaglev_ahead_defconfig
+  $ make
+
+Files created in output directory
+=================================
+
+output/images
+.
+├── boot.vfat
+├── bootloader-JH7100-buildroot.bin.out
+├── ddrinit-2133-buildroot.bin.out
+├── fw_dynamic.bin
+├── fw_dynamic.elf
+├── fw_jump.bin
+├── fw_jump.elf
+├── fw_payload.bin
+├── fw_payload.elf
+├── Image
+├── light-beagle.dtb
+├── light_aon_fpga.bin
+├── light_c906_audio.bin
+├── overlays
+├── rootfs.ext2
+├── rootfs.ext4
+├── rootfs.tar
+├── sdcard.img
+├── u-boot-with-spl.bin
+├── u-boot.bin
+└── uEnv.txt
+
+Creating bootable SD card:
+==========================
+
+Simply invoke (as root)
+
+sudo dd if=output/images/sdcard.img of=/dev/sdX && sync
+
+Where X is your SD card device.
+
+Booting:
+========
+
+SD card boot button:
+--------------------
+To let the board boot from SD card, keep the "SD button" pressed during power
+up / power cycle. The button is near the SD card slot.
+
+Serial console:
+---------------
+The BeagleV-Ahead has a "Debug" GPIO header. Its layout can be seen here:
+https://docs.beagleboard.org/latest/boards/beaglev/ahead/02-quick-start.html#access-uart-debug-console
+
+Note, that there are reported issues with some uart interface cables/dongles:
+https://forum.beagleboard.org/t/beaglev-ahead-debug-terminal-problems/35331
+
+Baudrate for this board is 115200.
+
+Login:
+------
+Enter 'root' as login user, and the prompt is ready.
+
+wiki link:
+----------
+https://docs.beagleboard.org/latest/boards/beaglev/ahead/index.html
diff --git a/board/beaglev-ahead/uEnv.txt b/board/beaglev-ahead/uEnv.txt
new file mode 100644
index 0000000000..7e98ae5f81
--- /dev/null
+++ b/board/beaglev-ahead/uEnv.txt
@@ -0,0 +1,4 @@ 
+bootcmd=booti ${kernel_addr_r} - ${fdt_addr_r}
+uenvcmd=fatload mmc 1:1 ${kernel_addr_r} Image; fatload mmc 1:1 ${fdt_addr_r} light-beagle.dtb
+bootargs=root=/dev/mmcblk1p2 rootfstype=ext4 rootwait ro console=ttyS0,115200 earlycon clk_ignore_unused net.ifnames=0
+
diff --git a/board/beaglev-ahead/uboot.fragment b/board/beaglev-ahead/uboot.fragment
new file mode 100644
index 0000000000..1f51cef106
--- /dev/null
+++ b/board/beaglev-ahead/uboot.fragment
@@ -0,0 +1,2 @@ 
+CONFIG_LEGACY_IMAGE_FORMAT=y
+CONFIG_AUTOBOOT=y
diff --git a/configs/beaglev_ahead_defconfig b/configs/beaglev_ahead_defconfig
new file mode 100644
index 0000000000..9000b1f0ad
--- /dev/null
+++ b/configs/beaglev_ahead_defconfig
@@ -0,0 +1,46 @@ 
+BR2_riscv=y
+BR2_riscv_custom=y
+BR2_RISCV_ISA_RVM=y
+BR2_RISCV_ISA_RVA=y
+BR2_RISCV_ISA_RVF=y
+BR2_RISCV_ISA_RVD=y
+BR2_RISCV_ISA_RVC=y
+# Use GCC 13 for OpenSBI zicsr zifencei issue
+BR2_GCC_VERSION_13_X=y
+BR2_GLOBAL_PATCH_DIR="board/beaglev-ahead/patches"
+BR2_ROOTFS_POST_IMAGE_SCRIPT="board/beaglev-ahead/post-image.sh"
+BR2_TARGET_GENERIC_HOSTNAME="BeagleV-Ahead"
+BR2_TARGET_GENERIC_ISSUE="Welcome to the BeagleV-Ahead"
+BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y
+BR2_LINUX_KERNEL=y
+BR2_LINUX_KERNEL_CUSTOM_GIT=y
+BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
+BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/beagleboard/linux/archive/refs/heads/beaglev-v5.10.113-1.1.2-ubuntu.tar.gz"
+BR2_LINUX_KERNEL_DEFCONFIG="beaglev"
+BR2_LINUX_KERNEL_DTS_SUPPORT=y
+BR2_LINUX_KERNEL_INTREE_DTS_NAME="thead/light-beagle"
+BR2_LINUX_KERNEL_INSTALL_TARGET=y
+BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
+BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/beaglev-ahead/linux.fragment"
+BR2_TARGET_ROOTFS_EXT2=y
+BR2_TARGET_ROOTFS_EXT2_4=y
+BR2_TARGET_BEAGLEV_DDRINIT=y
+BR2_TARGET_BEAGLEV_SECONDBOOT=y
+BR2_TARGET_OPENSBI=y
+BR2_TARGET_OPENSBI_CUSTOM_TARBALL=y
+BR2_TARGET_OPENSBI_CUSTOM_TARBALL_LOCATION="https://github.com/beagleboard/beaglev-ahead-opensbi/archive/refs/heads/0.9-1.1.2-ubuntu.tar.gz"
+BR2_TARGET_OPENSBI_PLAT="generic"
+BR2_TARGET_OPENSBI_UBOOT_PAYLOAD=y
+BR2_TARGET_UBOOT=y
+BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
+BR2_TARGET_UBOOT_CUSTOM_TARBALL=y
+BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="https://github.com/beagleboard/beaglev-ahead-u-boot/archive/refs/heads/beaglev-v2020.01-1.1.2-ubuntu.tar.gz"
+BR2_TARGET_UBOOT_BOARD_DEFCONFIG="light_beagle"
+BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="board/beaglev-ahead/uboot.fragment"
+BR2_TARGET_UBOOT_FORMAT_BIN=y
+BR2_TARGET_UBOOT_FORMAT_CUSTOM=y
+BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-with-spl.bin"
+BR2_PACKAGE_HOST_DOSFSTOOLS=y
+BR2_PACKAGE_HOST_MTOOLS=y
+BR2_PACKAGE_HOST_GENIMAGE=y
+BR2_PACKAGE_XUANTIE_BINS=y