diff --git a/projects/Amlogic/patches/u-boot/u-boot-0001-LOCAL-configs-meson64-prevent-stdout-stderr-on-video.patch b/projects/Amlogic/patches/u-boot/u-boot-0001-LOCAL-configs-meson64-prevent-stdout-stderr-on-video.patch index 32f798a931..8812a26816 100644 --- a/projects/Amlogic/patches/u-boot/u-boot-0001-LOCAL-configs-meson64-prevent-stdout-stderr-on-video.patch +++ b/projects/Amlogic/patches/u-boot/u-boot-0001-LOCAL-configs-meson64-prevent-stdout-stderr-on-video.patch @@ -1,7 +1,7 @@ -From 0d04eb6409191d48adc9e1d347a94af06d84351e Mon Sep 17 00:00:00 2001 +From 3f8ffb82b65019d9ee227f15e6a1b8cc7552e448 Mon Sep 17 00:00:00 2001 From: Christian Hewitt Date: Fri, 13 Nov 2020 02:09:36 +0000 -Subject: [PATCH 1/2] LOCAL: configs: meson64: prevent stdout/stderr on +Subject: [PATCH 01/12] LOCAL: configs: meson64: prevent stdout/stderr on videoconsole Several devices have CONFIG_VIDEO enabled which causes stdout/stderr @@ -14,7 +14,7 @@ Signed-off-by: Christian Hewitt 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/configs/meson64.h b/include/configs/meson64.h -index efab9a624dc..0976774e5c8 100644 +index ccb8ea2e716..8b6f8159e78 100644 --- a/include/configs/meson64.h +++ b/include/configs/meson64.h @@ -28,7 +28,7 @@ diff --git a/projects/Amlogic/patches/u-boot/u-boot-0002-LOCAL-board-amlogic-odroid-n2-remove-amlogic-prefix-.patch b/projects/Amlogic/patches/u-boot/u-boot-0002-LOCAL-board-amlogic-odroid-n2-remove-amlogic-prefix-.patch index 1988f1e9ed..756e4a2b08 100644 --- a/projects/Amlogic/patches/u-boot/u-boot-0002-LOCAL-board-amlogic-odroid-n2-remove-amlogic-prefix-.patch +++ b/projects/Amlogic/patches/u-boot/u-boot-0002-LOCAL-board-amlogic-odroid-n2-remove-amlogic-prefix-.patch @@ -1,8 +1,8 @@ -From e4e38f7442b36cba26eae9edc69f7804e87a6a36 Mon Sep 17 00:00:00 2001 +From 5270aa7c201493773266854466708a8ffd1f0d74 Mon Sep 17 00:00:00 2001 From: Christian Hewitt Date: Tue, 3 Aug 2021 18:42:55 +0000 -Subject: [PATCH 2/2] LOCAL: board: amlogic: odroid-n2: remove /amlogic/ prefix - for dtb path +Subject: [PATCH 02/12] LOCAL: board: amlogic: odroid-n2: remove /amlogic/ + prefix for dtb path Remove the /amlogic/ prefix to align with current LE dtb locations. @@ -12,10 +12,10 @@ Signed-off-by: Christian Hewitt 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/board/amlogic/odroid-n2/odroid-n2.c b/board/amlogic/odroid-n2/odroid-n2.c -index a4bcc62174a..f840afbfd67 100644 +index ae953d0e4ba..e98580631ec 100644 --- a/board/amlogic/odroid-n2/odroid-n2.c +++ b/board/amlogic/odroid-n2/odroid-n2.c -@@ -63,7 +63,7 @@ static void odroid_set_fdtfile(char *soc, char *variant) +@@ -62,7 +62,7 @@ static void odroid_set_fdtfile(char *soc, char *variant) { char s[128]; diff --git a/projects/Amlogic/patches/u-boot/u-boot-0003-FROMGIT-board-libretech-ac-move-board-support-into-d.patch b/projects/Amlogic/patches/u-boot/u-boot-0003-FROMGIT-board-libretech-ac-move-board-support-into-d.patch new file mode 100644 index 0000000000..4d1a4d8de0 --- /dev/null +++ b/projects/Amlogic/patches/u-boot/u-boot-0003-FROMGIT-board-libretech-ac-move-board-support-into-d.patch @@ -0,0 +1,136 @@ +From 17b878fcccac17b59a8abfd7a72f36723bb3fd77 Mon Sep 17 00:00:00 2001 +From: Neil Armstrong +Date: Tue, 17 Sep 2024 14:34:45 +0200 +Subject: [PATCH 03/12] FROMGIT: board: libretech-ac: move board support into + dedicated directory + +The libretech-ac aka aml-s805x-ac supports mainline U-boot +from a dedicated SPI flash, move the board support into +a dedicated vendor/board subdirectory in order to support +vendor specific customization. + +It also aligns with the vendor downstream changes. + +Link: https://lore.kernel.org/r/20240917-u-boot-topic-dynamic-uuid-v2-1-416e39c6e271@linaro.org +Signed-off-by: Neil Armstrong +--- + board/amlogic/p212/MAINTAINERS | 2 - + board/libre-computer/aml-s805x-ac/MAINTAINERS | 8 ++++ + board/libre-computer/aml-s805x-ac/Makefile | 6 +++ + .../aml-s805x-ac/aml-s805x-ac.c | 47 +++++++++++++++++++ + configs/libretech-ac_defconfig | 2 + + 5 files changed, 63 insertions(+), 2 deletions(-) + create mode 100644 board/libre-computer/aml-s805x-ac/MAINTAINERS + create mode 100644 board/libre-computer/aml-s805x-ac/Makefile + create mode 100644 board/libre-computer/aml-s805x-ac/aml-s805x-ac.c + +diff --git a/board/amlogic/p212/MAINTAINERS b/board/amlogic/p212/MAINTAINERS +index b2e3205fdf0..e73a4e52c1f 100644 +--- a/board/amlogic/p212/MAINTAINERS ++++ b/board/amlogic/p212/MAINTAINERS +@@ -5,11 +5,9 @@ L: u-boot-amlogic@groups.io + F: board/amlogic/p212/ + F: include/configs/p212.h + F: configs/khadas-vim_defconfig +-F: configs/libretech-ac_defconfig + F: configs/libretech-cc_defconfig + F: configs/libretech-cc_v2_defconfig + F: configs/p212_defconfig + F: doc/board/amlogic/p212.rst +-F: doc/board/amlogic/libretech-ac.rst + F: doc/board/amlogic/libretech-cc.rst + F: doc/board/amlogic/khadas-vim.rst +diff --git a/board/libre-computer/aml-s805x-ac/MAINTAINERS b/board/libre-computer/aml-s805x-ac/MAINTAINERS +new file mode 100644 +index 00000000000..7cbc08aeb6c +--- /dev/null ++++ b/board/libre-computer/aml-s805x-ac/MAINTAINERS +@@ -0,0 +1,8 @@ ++LIBRE-COMPUTER AML-S805X-AC ++M: Neil Armstrong ++S: Maintained ++L: u-boot-amlogic@groups.io ++F: board/amlogic/aml-s805x-ac/ ++F: include/configs/libretech-ac.h ++F: configs/libretech-ac_defconfig ++F: doc/board/amlogic/libretech-ac.rst +diff --git a/board/libre-computer/aml-s805x-ac/Makefile b/board/libre-computer/aml-s805x-ac/Makefile +new file mode 100644 +index 00000000000..b4367ea522b +--- /dev/null ++++ b/board/libre-computer/aml-s805x-ac/Makefile +@@ -0,0 +1,6 @@ ++# SPDX-License-Identifier: GPL-2.0+ ++# ++# (C) Copyright 2016 BayLibre, SAS ++# Author: Neil Armstrong ++ ++obj-y := aml-s805x-ac.o +diff --git a/board/libre-computer/aml-s805x-ac/aml-s805x-ac.c b/board/libre-computer/aml-s805x-ac/aml-s805x-ac.c +new file mode 100644 +index 00000000000..ae9834c0bf8 +--- /dev/null ++++ b/board/libre-computer/aml-s805x-ac/aml-s805x-ac.c +@@ -0,0 +1,47 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++/* ++ * Copyright (C) 2016 BayLibre, SAS ++ * Author: Neil Armstrong ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define EFUSE_SN_OFFSET 20 ++#define EFUSE_SN_SIZE 16 ++#define EFUSE_MAC_OFFSET 52 ++#define EFUSE_MAC_SIZE 6 ++ ++int misc_init_r(void) ++{ ++ u8 mac_addr[EFUSE_MAC_SIZE + 1]; ++ char serial[EFUSE_SN_SIZE + 1]; ++ ssize_t len; ++ ++ if (!eth_env_get_enetaddr("ethaddr", mac_addr)) { ++ len = meson_sm_read_efuse(EFUSE_MAC_OFFSET, ++ mac_addr, EFUSE_MAC_SIZE); ++ mac_addr[len] = '\0'; ++ if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr)) ++ eth_env_set_enetaddr("ethaddr", mac_addr); ++ else ++ meson_generate_serial_ethaddr(); ++ } ++ ++ if (!env_get("serial#")) { ++ len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial, ++ EFUSE_SN_SIZE); ++ serial[len] = '\0'; ++ if (len == EFUSE_SN_SIZE) ++ env_set("serial#", serial); ++ } ++ ++ return 0; ++} +diff --git a/configs/libretech-ac_defconfig b/configs/libretech-ac_defconfig +index 6ad04570022..11d9795e05d 100644 +--- a/configs/libretech-ac_defconfig ++++ b/configs/libretech-ac_defconfig +@@ -1,5 +1,7 @@ + CONFIG_ARM=y + CONFIG_SYS_CONFIG_NAME="libretech-ac" ++CONFIG_SYS_VENDOR="libre-computer" ++CONFIG_SYS_BOARD="aml-s805x-ac" + CONFIG_ARCH_MESON=y + CONFIG_TEXT_BASE=0x01000000 + CONFIG_NR_DRAM_BANKS=1 +-- +2.34.1 + diff --git a/projects/Amlogic/patches/u-boot/u-boot-0004-FROMGIT-board-libre-computer-aml-s805x-cc-Enable-cap.patch b/projects/Amlogic/patches/u-boot/u-boot-0004-FROMGIT-board-libre-computer-aml-s805x-cc-Enable-cap.patch new file mode 100644 index 0000000000..c7a8c689de --- /dev/null +++ b/projects/Amlogic/patches/u-boot/u-boot-0004-FROMGIT-board-libre-computer-aml-s805x-cc-Enable-cap.patch @@ -0,0 +1,123 @@ +From 766b23d9252d70c2e193876c7cc8b5cca954cba7 Mon Sep 17 00:00:00 2001 +From: Neil Armstrong +Date: Tue, 17 Sep 2024 14:34:46 +0200 +Subject: [PATCH 04/12] FROMGIT: board: libre-computer: aml-s805x-cc: Enable + capsule updates + +Since the aml-s805-cc works well using EFI, and now the capsule updates +backend has been merged, let's enable the missing configs and add +the required structures to support it. + +The GUID is dynamically generated for the board, to get it: +=> efidebug capsule esrt +======================================== +ESRT: fw_resource_count=1 +ESRT: fw_resource_count_max=1 +ESRT: fw_resource_version=1 +[entry 0]============================== +ESRT: fw_class=B8079027-9B2C-57D4-86AA-CC782ADA598C +ESRT: fw_type=unknown +ESRT: fw_version=0 +ESRT: lowest_supported_fw_version=0 +ESRT: capsule_flags=0 +ESRT: last_attempt_version=0 +ESRT: last_attempt_status=success +======================================== + +On the host (with the aml_encrypt_gxl result binary): +$ eficapsule --guid B8079027-9B2C-57D4-86AA-CC782ADA598C -i 1 u-boot.bin u-boot.cap + +On the board (from USB disk containing u-boot.cap at root): +=> load usb 0:1 $kernel_addr_r u-boot.cap +=> efidebug capsule update $kernel_addr_r + +The binary will then be flashed on the SPI. + +Reviewed-by: Ilias Apalodimas +Link: https://lore.kernel.org/r/20240917-u-boot-topic-dynamic-uuid-v2-2-416e39c6e271@linaro.org +Signed-off-by: Neil Armstrong +--- + .../aml-s805x-ac/aml-s805x-ac.c | 24 +++++++++++++++++++ + configs/libretech-ac_defconfig | 6 +++++ + 2 files changed, 30 insertions(+) + +diff --git a/board/libre-computer/aml-s805x-ac/aml-s805x-ac.c b/board/libre-computer/aml-s805x-ac/aml-s805x-ac.c +index ae9834c0bf8..94cf5b4361f 100644 +--- a/board/libre-computer/aml-s805x-ac/aml-s805x-ac.c ++++ b/board/libre-computer/aml-s805x-ac/aml-s805x-ac.c +@@ -8,6 +8,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -19,6 +20,29 @@ + #define EFUSE_MAC_OFFSET 52 + #define EFUSE_MAC_SIZE 6 + ++struct efi_fw_image fw_images[] = { ++ { ++ .fw_name = u"AML_S805X_AC_BOOT", ++ .image_index = 1, ++ }, ++}; ++ ++struct efi_capsule_update_info update_info = { ++ .dfu_string = "sf 0:0=u-boot-bin raw 0 0x10000", ++ .num_images = ARRAY_SIZE(fw_images), ++ .images = fw_images, ++}; ++ ++#if IS_ENABLED(CONFIG_SET_DFU_ALT_INFO) ++void set_dfu_alt_info(char *interface, char *devstr) ++{ ++ if (strcmp(interface, "ram") == 0) ++ env_set("dfu_alt_info", "fitimage ram 0x08080000 0x4000000"); ++ else if (IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT)) ++ env_set("dfu_alt_info", update_info.dfu_string); ++} ++#endif ++ + int misc_init_r(void) + { + u8 mac_addr[EFUSE_MAC_SIZE + 1]; +diff --git a/configs/libretech-ac_defconfig b/configs/libretech-ac_defconfig +index 11d9795e05d..7763a14f203 100644 +--- a/configs/libretech-ac_defconfig ++++ b/configs/libretech-ac_defconfig +@@ -35,6 +35,7 @@ CONFIG_SYS_MAXARGS=32 + # CONFIG_CMD_IMI is not set + CONFIG_CMD_ADC=y + CONFIG_CMD_DFU=y ++CONFIG_CMD_NVEDIT_EFI=y + CONFIG_CMD_GPIO=y + # CONFIG_CMD_LOADS is not set + CONFIG_CMD_MMC=y +@@ -42,6 +43,7 @@ CONFIG_CMD_SF_TEST=y + CONFIG_CMD_SPI=y + CONFIG_CMD_USB=y + CONFIG_CMD_USB_MASS_STORAGE=y ++CONFIG_CMD_EFIDEBUG=y + # CONFIG_CMD_SETEXPR is not set + CONFIG_CMD_REGULATOR=y + CONFIG_OF_CONTROL=y +@@ -49,6 +51,8 @@ CONFIG_ENV_IS_IN_SPI_FLASH=y + CONFIG_SYS_RELOC_GD_ENV_ADDR=y + CONFIG_SARADC_MESON=y + CONFIG_DFU_RAM=y ++CONFIG_DFU_SF=y ++CONFIG_SET_DFU_ALT_INFO=y + CONFIG_MMC_MESON_GX=y + CONFIG_MTD=y + CONFIG_DM_MTD=y +@@ -98,3 +102,5 @@ CONFIG_VIDEO_BMP_RLE8=y + CONFIG_BMP_16BPP=y + CONFIG_BMP_24BPP=y + CONFIG_BMP_32BPP=y ++CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y ++CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y +-- +2.34.1 + diff --git a/projects/Amlogic/patches/u-boot/u-boot-0005-FROMGIT-ARM-meson-add-support-for-Libre-Computer-aml.patch b/projects/Amlogic/patches/u-boot/u-boot-0005-FROMGIT-ARM-meson-add-support-for-Libre-Computer-aml.patch new file mode 100644 index 0000000000..ec0a35b190 --- /dev/null +++ b/projects/Amlogic/patches/u-boot/u-boot-0005-FROMGIT-ARM-meson-add-support-for-Libre-Computer-aml.patch @@ -0,0 +1,337 @@ +From b62cecc1151de8e1d5f694d03c00fff67ceee4ec Mon Sep 17 00:00:00 2001 +From: Neil Armstrong +Date: Fri, 20 Sep 2024 15:33:33 +0200 +Subject: [PATCH 05/12] FROMGIT: ARM: meson: add support for Libre Computer + aml-a311d-cc + +Add support for the Libre Computer aml-a311d-cc "Alta" board: +https://libre.computer/products/aml-a311d-cc/ + +The Alta board has a Credit Card form factor, similar to the +the prvevious "Le Potato" card, but with the Amlogic A311D SoC, +MIPI DSI and CSI connectors. PoE header and a single USB2 Type-C +connector replacing the microUSB one for power and USB 2.0. + +The board has an embedded SPI NOR flash, and EFI Capsule support +is added. + +The GUID is dynamically generated for the board, to get it: +=> efidebug capsule esrt +======================================== +ESRT: fw_resource_count=1 +ESRT: fw_resource_count_max=1 +ESRT: fw_resource_version=1 +[entry 0]============================== +ESRT: fw_class=17E07D9D-4D91-53F4-8780-1D91F279C1A5 +ESRT: fw_type=unknown +ESRT: fw_version=0 +ESRT: lowest_supported_fw_version=0 +ESRT: capsule_flags=0 +ESRT: last_attempt_version=0 +ESRT: last_attempt_status=success +======================================== + +On the host (with the aml_encrypt_g12a result binary): +$ eficapsule --guid 17E07D9D-4D91-53F4-8780-1D91F279C1A5 -i 1 u-boot.bin u-boot.cap + +On the board (from USB disk containing u-boot.cap at root): +=> load usb 0:1 $kernel_addr_r u-boot.cap +=> efidebug capsule update $kernel_addr_r + +The binary will then be flashed on the SPI. + +Link: https://lore.kernel.org/r/20240920-u-boot-topic-libre-computer-solitude-alta-v1-1-8915b108840b@linaro.org +Signed-off-by: Neil Armstrong +--- + .../meson-g12b-a311d-libretech-cc-u-boot.dtsi | 15 +++ + board/libre-computer/aml-a311d-cc/MAINTAINERS | 7 ++ + board/libre-computer/aml-a311d-cc/Makefile | 6 + + .../aml-a311d-cc/aml-a311d-cc.c | 44 +++++++ + configs/aml-a311d-cc_defconfig | 108 ++++++++++++++++++ + doc/board/amlogic/aml-a311d-cc.rst | 46 ++++++++ + doc/board/amlogic/index.rst | 1 + + 7 files changed, 227 insertions(+) + create mode 100644 arch/arm/dts/meson-g12b-a311d-libretech-cc-u-boot.dtsi + create mode 100644 board/libre-computer/aml-a311d-cc/MAINTAINERS + create mode 100644 board/libre-computer/aml-a311d-cc/Makefile + create mode 100644 board/libre-computer/aml-a311d-cc/aml-a311d-cc.c + create mode 100644 configs/aml-a311d-cc_defconfig + create mode 100644 doc/board/amlogic/aml-a311d-cc.rst + +diff --git a/arch/arm/dts/meson-g12b-a311d-libretech-cc-u-boot.dtsi b/arch/arm/dts/meson-g12b-a311d-libretech-cc-u-boot.dtsi +new file mode 100644 +index 00000000000..cbada739042 +--- /dev/null ++++ b/arch/arm/dts/meson-g12b-a311d-libretech-cc-u-boot.dtsi +@@ -0,0 +1,15 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (c) 2023 Neil Armstrong ++ */ ++ ++#include "meson-g12-common-u-boot.dtsi" ++ ++&sd_emmc_c { ++ pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_4b_pins>; ++ bus-width = <4>; ++}; ++ ++&spifc { ++ status = "okay"; ++}; +diff --git a/board/libre-computer/aml-a311d-cc/MAINTAINERS b/board/libre-computer/aml-a311d-cc/MAINTAINERS +new file mode 100644 +index 00000000000..b4b77acd23b +--- /dev/null ++++ b/board/libre-computer/aml-a311d-cc/MAINTAINERS +@@ -0,0 +1,7 @@ ++LIBRE-COMPUTER AML-A311D-CC ++M: Neil Armstrong ++S: Maintained ++L: u-boot-amlogic@groups.io ++F: board/amlogic/aml-a311d-cc/ ++F: configs/aml-a311d-cc_defconfig ++F: doc/board/amlogic/aml-a311d-cc.rst +diff --git a/board/libre-computer/aml-a311d-cc/Makefile b/board/libre-computer/aml-a311d-cc/Makefile +new file mode 100644 +index 00000000000..461955def3a +--- /dev/null ++++ b/board/libre-computer/aml-a311d-cc/Makefile +@@ -0,0 +1,6 @@ ++# SPDX-License-Identifier: GPL-2.0+ ++# ++# (C) Copyright 2016 BayLibre, SAS ++# Author: Neil Armstrong ++ ++obj-y := aml-a311d-cc.o +diff --git a/board/libre-computer/aml-a311d-cc/aml-a311d-cc.c b/board/libre-computer/aml-a311d-cc/aml-a311d-cc.c +new file mode 100644 +index 00000000000..e45cfd5d8a3 +--- /dev/null ++++ b/board/libre-computer/aml-a311d-cc/aml-a311d-cc.c +@@ -0,0 +1,44 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++/* ++ * Copyright (C) 2016 BayLibre, SAS ++ * Author: Neil Armstrong ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++struct efi_fw_image fw_images[] = { ++ { ++ .fw_name = u"AML_A311D_CC_BOOT", ++ .image_index = 1, ++ }, ++}; ++ ++struct efi_capsule_update_info update_info = { ++ .dfu_string = "sf 0:0=u-boot-bin raw 0 0x10000", ++ .num_images = ARRAY_SIZE(fw_images), ++ .images = fw_images, ++}; ++ ++ ++#if IS_ENABLED(CONFIG_SET_DFU_ALT_INFO) ++void set_dfu_alt_info(char *interface, char *devstr) ++{ ++ if (strcmp(interface, "ram") == 0) ++ env_set("dfu_alt_info", "fitimage ram 0x08080000 0x4000000"); ++ else if (IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT)) ++ env_set("dfu_alt_info", update_info.dfu_string); ++} ++#endif ++ ++int misc_init_r(void) ++{ ++ meson_generate_serial_ethaddr(); ++ ++ return 0; ++} +diff --git a/configs/aml-a311d-cc_defconfig b/configs/aml-a311d-cc_defconfig +new file mode 100644 +index 00000000000..c8e22200419 +--- /dev/null ++++ b/configs/aml-a311d-cc_defconfig +@@ -0,0 +1,108 @@ ++CONFIG_ARM=y ++CONFIG_SYS_VENDOR="libre-computer" ++CONFIG_SYS_BOARD="aml-a311d-cc" ++CONFIG_ARCH_MESON=y ++CONFIG_TEXT_BASE=0x01000000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y ++CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x20000000 ++CONFIG_ENV_SIZE=0x2000 ++CONFIG_ENV_OFFSET=0xFFFF0000 ++CONFIG_ENV_SECT_SIZE=0x10000 ++CONFIG_DM_GPIO=y ++CONFIG_DEFAULT_DEVICE_TREE="amlogic/meson-g12b-a311d-libretech-cc" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_DM_RESET=y ++CONFIG_MESON_G12A=y ++CONFIG_DEBUG_UART_BASE=0xff803000 ++CONFIG_DEBUG_UART_CLOCK=24000000 ++CONFIG_IDENT_STRING="aml-a311d-cc" ++CONFIG_SYS_LOAD_ADDR=0x1000000 ++CONFIG_DEBUG_UART=y ++CONFIG_REMAKE_ELF=y ++CONFIG_FIT=y ++CONFIG_FIT_SIGNATURE=y ++CONFIG_FIT_VERBOSE=y ++CONFIG_LEGACY_IMAGE_FORMAT=y ++CONFIG_OF_BOARD_SETUP=y ++# CONFIG_DISPLAY_CPUINFO is not set ++CONFIG_MISC_INIT_R=y ++CONFIG_SYS_MAXARGS=32 ++# CONFIG_CMD_BDI is not set ++# CONFIG_CMD_IMI is not set ++CONFIG_CMD_DFU=y ++CONFIG_CMD_NVEDIT_EFI=y ++CONFIG_CMD_GPIO=y ++# CONFIG_CMD_LOADS is not set ++CONFIG_CMD_MMC=y ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_SPI=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_USB_MASS_STORAGE=y ++CONFIG_CMD_EFIDEBUG=y ++# CONFIG_CMD_SETEXPR is not set ++CONFIG_CMD_REGULATOR=y ++CONFIG_OF_CONTROL=y ++CONFIG_ENV_IS_IN_SPI_FLASH=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_ADC=y ++CONFIG_SARADC_MESON=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_ADC=y ++CONFIG_DFU_RAM=y ++CONFIG_DFU_SF=y ++CONFIG_SET_DFU_ALT_INFO=y ++CONFIG_MMC_MESON_GX=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_GIGADEVICE=y ++CONFIG_SPI_FLASH_SPANSION=y ++CONFIG_PHY_REALTEK=y ++CONFIG_DM_MDIO=y ++CONFIG_DM_MDIO_MUX=y ++CONFIG_ETH_DESIGNWARE_MESON8B=y ++CONFIG_MDIO_MUX_MESON_G12A=y ++CONFIG_MESON_G12A_USB_PHY=y ++CONFIG_PINCTRL=y ++CONFIG_PINCTRL_MESON_G12A=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MESON_EE_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DEBUG_UART_ANNOUNCE=y ++CONFIG_DEBUG_UART_SKIP_INIT=y ++CONFIG_MESON_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MESON_SPIFC=y ++CONFIG_SYSINFO=y ++CONFIG_SYSINFO_SMBIOS=y ++CONFIG_USB=y ++CONFIG_DM_USB_GADGET=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_DWC3=y ++CONFIG_USB_DWC3=y ++# CONFIG_USB_DWC3_GADGET is not set ++CONFIG_USB_DWC3_MESON_G12A=y ++CONFIG_USB_KEYBOARD=y ++CONFIG_USB_GADGET=y ++CONFIG_USB_GADGET_VENDOR_NUM=0x1b8e ++CONFIG_USB_GADGET_PRODUCT_NUM=0xfada ++CONFIG_USB_GADGET_DWC2_OTG=y ++CONFIG_USB_GADGET_DWC2_OTG_PHY_BUS_WIDTH_8=y ++CONFIG_USB_GADGET_DOWNLOAD=y ++CONFIG_VIDEO=y ++# CONFIG_VIDEO_BPP8 is not set ++# CONFIG_VIDEO_BPP16 is not set ++CONFIG_SYS_WHITE_ON_BLACK=y ++CONFIG_VIDEO_MESON=y ++CONFIG_VIDEO_DT_SIMPLEFB=y ++CONFIG_SPLASH_SCREEN=y ++CONFIG_SPLASH_SCREEN_ALIGN=y ++CONFIG_VIDEO_BMP_RLE8=y ++CONFIG_BMP_16BPP=y ++CONFIG_BMP_24BPP=y ++CONFIG_BMP_32BPP=y ++CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y ++CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y +diff --git a/doc/board/amlogic/aml-a311d-cc.rst b/doc/board/amlogic/aml-a311d-cc.rst +new file mode 100644 +index 00000000000..25c1e01906a +--- /dev/null ++++ b/doc/board/amlogic/aml-a311d-cc.rst +@@ -0,0 +1,46 @@ ++.. SPDX-License-Identifier: GPL-2.0+ ++ ++U-Boot for Libre Computer AML-A311D-CC 'Alta' (A311D) ++===================================================== ++ ++AML-A311D-CC is a Single Board Computer manufactured by Libre Computer Technology with ++the following specifications: ++ ++ - Amlogic A311D Arm Cortex-A53 dual-core + Cortex-A73 quad-core SoC ++ - 2 or 4GB LPDDR4 SDRAM ++ - Gigabit Ethernet ++ - HDMI 2.1 display ++ - 40-pin GPIO header ++ - 4 x USB 3.0 Host, 1 x USB 2.0 Type-C ++ - eMMC 5.x SM Interface for Libre Computer Modules ++ - microSD ++ - Infrared receiver ++ ++Schematics are available on the manufacturer website. ++ ++U-Boot Compilation ++------------------ ++ ++.. code-block:: bash ++ ++ $ export CROSS_COMPILE=aarch64-none-elf- ++ $ make aml-a311d-cc_defconfig ++ $ make ++ ++U-Boot Signing with Pre-Built FIP repo ++-------------------------------------- ++ ++.. code-block:: bash ++ ++ $ git clone https://github.com/LibreELEC/amlogic-boot-fip --depth=1 ++ $ cd amlogic-boot-fip ++ $ mkdir my-output-dir ++ $ ./build-fip.sh aml-a311d-cc /path/to/u-boot/u-boot.bin my-output-dir ++ ++Then write U-Boot to SD or eMMC with: ++ ++.. code-block:: bash ++ ++ $ DEV=/dev/boot_device ++ $ dd if=fip/u-boot.bin.sd.bin of=$DEV conv=fsync,notrunc bs=512 skip=1 seek=1 ++ $ dd if=fip/u-boot.bin.sd.bin of=$DEV conv=fsync,notrunc bs=1 count=440 +diff --git a/doc/board/amlogic/index.rst b/doc/board/amlogic/index.rst +index 46f44bf34ec..de91b21f977 100644 +--- a/doc/board/amlogic/index.rst ++++ b/doc/board/amlogic/index.rst +@@ -85,6 +85,7 @@ Board Documentation + .. toctree:: + :maxdepth: 1 + ++ aml-a311d-cc + bananapi-cm4io + bananapi-m2pro + bananapi-m2s +-- +2.34.1 + diff --git a/projects/Amlogic/patches/u-boot/u-boot-0006-FROMGIT-ARM-meson-add-support-for-Libre-Computer-aml.patch b/projects/Amlogic/patches/u-boot/u-boot-0006-FROMGIT-ARM-meson-add-support-for-Libre-Computer-aml.patch new file mode 100644 index 0000000000..240ac95d0b --- /dev/null +++ b/projects/Amlogic/patches/u-boot/u-boot-0006-FROMGIT-ARM-meson-add-support-for-Libre-Computer-aml.patch @@ -0,0 +1,337 @@ +From b2b6496c521a9299aec3e0114595a90894bd1ccd Mon Sep 17 00:00:00 2001 +From: Neil Armstrong +Date: Fri, 20 Sep 2024 15:33:34 +0200 +Subject: [PATCH 06/12] FROMGIT: ARM: meson: add support for Libre Computer + aml-s905d3-cc + +Add support for the Libre Computer aml-s905d3-cc "Solitude" board: +https://libre.computer/products/aml-s905d3-cc/ + +The Solitude board has a Credit Card form factor, similar to the +the previous "Le Potato" card, but with the Amlogic A311D SoC, +MIPI DSI and CSI connectors. PoE header and a single USB2 Type-C +connector replacing the microUSB one for power and USB 2.0. + +The board has an embedded SPI NOR flash, and EFI Capsule support +is added. + +The GUID is dynamically generated for the board, to get it: +=> efidebug capsule esrt +======================================== +ESRT: fw_resource_count=1 +ESRT: fw_resource_count_max=1 +ESRT: fw_resource_version=1 +[entry 0]============================== +ESRT: fw_class=4302C3CB-2502-5EFE-87E0-894A8A322893 +ESRT: fw_type=unknown +ESRT: fw_version=0 +ESRT: lowest_supported_fw_version=0 +ESRT: capsule_flags=0 +ESRT: last_attempt_version=0 +ESRT: last_attempt_status=success +======================================== + +On the host (with the aml_encrypt_g12a result binary): +$ eficapsule --guid 4302C3CB-2502-5EFE-87E0-894A8A322893 -i 1 u-boot.bin u-boot.cap + +On the board (from USB disk containing u-boot.cap at root): +=> load usb 0:1 $kernel_addr_r u-boot.cap +=> efidebug capsule update $kernel_addr_r + +The binary will then be flashed on the SPI. + +Link: https://lore.kernel.org/r/20240920-u-boot-topic-libre-computer-solitude-alta-v1-2-8915b108840b@linaro.org +Signed-off-by: Neil Armstrong +--- + .../meson-sm1-s905d3-libretech-cc-u-boot.dtsi | 15 +++ + .../libre-computer/aml-s905d3-cc/MAINTAINERS | 7 ++ + board/libre-computer/aml-s905d3-cc/Makefile | 6 + + .../aml-s905d3-cc/aml-s905d3-cc.c | 44 +++++++ + configs/aml-s905d3-cc_defconfig | 108 ++++++++++++++++++ + doc/board/amlogic/aml-s905d3-cc.rst | 46 ++++++++ + doc/board/amlogic/index.rst | 1 + + 7 files changed, 227 insertions(+) + create mode 100644 arch/arm/dts/meson-sm1-s905d3-libretech-cc-u-boot.dtsi + create mode 100644 board/libre-computer/aml-s905d3-cc/MAINTAINERS + create mode 100644 board/libre-computer/aml-s905d3-cc/Makefile + create mode 100644 board/libre-computer/aml-s905d3-cc/aml-s905d3-cc.c + create mode 100644 configs/aml-s905d3-cc_defconfig + create mode 100644 doc/board/amlogic/aml-s905d3-cc.rst + +diff --git a/arch/arm/dts/meson-sm1-s905d3-libretech-cc-u-boot.dtsi b/arch/arm/dts/meson-sm1-s905d3-libretech-cc-u-boot.dtsi +new file mode 100644 +index 00000000000..1c4f019120f +--- /dev/null ++++ b/arch/arm/dts/meson-sm1-s905d3-libretech-cc-u-boot.dtsi +@@ -0,0 +1,15 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (c) 2023 Neil Armstrong ++ */ ++ ++#include "meson-g12-common-u-boot.dtsi" ++ ++&sd_emmc_c { ++ pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_4b_pins>, <&emmc_ds_pins>; ++ bus-width = <4>; ++}; ++ ++&spifc { ++ status = "okay"; ++}; +diff --git a/board/libre-computer/aml-s905d3-cc/MAINTAINERS b/board/libre-computer/aml-s905d3-cc/MAINTAINERS +new file mode 100644 +index 00000000000..4b75c815c07 +--- /dev/null ++++ b/board/libre-computer/aml-s905d3-cc/MAINTAINERS +@@ -0,0 +1,7 @@ ++LIBRE-COMPUTER AML-S905D3-CC ++M: Neil Armstrong ++S: Maintained ++L: u-boot-amlogic@groups.io ++F: board/amlogic/aml-s905d3-cc/ ++F: configs/aml-s905d3-cc_defconfig ++F: doc/board/amlogic/aml-s905d3-cc.rst +diff --git a/board/libre-computer/aml-s905d3-cc/Makefile b/board/libre-computer/aml-s905d3-cc/Makefile +new file mode 100644 +index 00000000000..7d2c41e6436 +--- /dev/null ++++ b/board/libre-computer/aml-s905d3-cc/Makefile +@@ -0,0 +1,6 @@ ++# SPDX-License-Identifier: GPL-2.0+ ++# ++# (C) Copyright 2016 BayLibre, SAS ++# Author: Neil Armstrong ++ ++obj-y := aml-s905d3-cc.o +diff --git a/board/libre-computer/aml-s905d3-cc/aml-s905d3-cc.c b/board/libre-computer/aml-s905d3-cc/aml-s905d3-cc.c +new file mode 100644 +index 00000000000..f641db5a494 +--- /dev/null ++++ b/board/libre-computer/aml-s905d3-cc/aml-s905d3-cc.c +@@ -0,0 +1,44 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++/* ++ * Copyright (C) 2016 BayLibre, SAS ++ * Author: Neil Armstrong ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++struct efi_fw_image fw_images[] = { ++ { ++ .fw_name = u"AML_S905D3_CC_BOOT", ++ .image_index = 1, ++ }, ++}; ++ ++struct efi_capsule_update_info update_info = { ++ .dfu_string = "sf 0:0=u-boot-bin raw 0 0x10000", ++ .num_images = ARRAY_SIZE(fw_images), ++ .images = fw_images, ++}; ++ ++ ++#if IS_ENABLED(CONFIG_SET_DFU_ALT_INFO) ++void set_dfu_alt_info(char *interface, char *devstr) ++{ ++ if (strcmp(interface, "ram") == 0) ++ env_set("dfu_alt_info", "fitimage ram 0x08080000 0x4000000"); ++ else if (IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT)) ++ env_set("dfu_alt_info", update_info.dfu_string); ++} ++#endif ++ ++int misc_init_r(void) ++{ ++ meson_generate_serial_ethaddr(); ++ ++ return 0; ++} +diff --git a/configs/aml-s905d3-cc_defconfig b/configs/aml-s905d3-cc_defconfig +new file mode 100644 +index 00000000000..a6e5d584c0a +--- /dev/null ++++ b/configs/aml-s905d3-cc_defconfig +@@ -0,0 +1,108 @@ ++CONFIG_ARM=y ++CONFIG_SYS_VENDOR="libre-computer" ++CONFIG_SYS_BOARD="aml-s905d3-cc" ++CONFIG_ARCH_MESON=y ++CONFIG_TEXT_BASE=0x01000000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y ++CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x20000000 ++CONFIG_ENV_SIZE=0x2000 ++CONFIG_ENV_OFFSET=0xFFFF0000 ++CONFIG_ENV_SECT_SIZE=0x10000 ++CONFIG_DM_GPIO=y ++CONFIG_DEFAULT_DEVICE_TREE="amlogic/meson-sm1-s905d3-libretech-cc" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_DM_RESET=y ++CONFIG_MESON_G12A=y ++CONFIG_DEBUG_UART_BASE=0xff803000 ++CONFIG_DEBUG_UART_CLOCK=24000000 ++CONFIG_IDENT_STRING="aml-s905d3-cc" ++CONFIG_SYS_LOAD_ADDR=0x1000000 ++CONFIG_DEBUG_UART=y ++CONFIG_REMAKE_ELF=y ++CONFIG_FIT=y ++CONFIG_FIT_SIGNATURE=y ++CONFIG_FIT_VERBOSE=y ++CONFIG_LEGACY_IMAGE_FORMAT=y ++CONFIG_OF_BOARD_SETUP=y ++# CONFIG_DISPLAY_CPUINFO is not set ++CONFIG_MISC_INIT_R=y ++CONFIG_SYS_MAXARGS=32 ++# CONFIG_CMD_BDI is not set ++# CONFIG_CMD_IMI is not set ++CONFIG_CMD_DFU=y ++CONFIG_CMD_NVEDIT_EFI=y ++CONFIG_CMD_GPIO=y ++# CONFIG_CMD_LOADS is not set ++CONFIG_CMD_MMC=y ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_SPI=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_USB_MASS_STORAGE=y ++CONFIG_CMD_EFIDEBUG=y ++# CONFIG_CMD_SETEXPR is not set ++CONFIG_CMD_REGULATOR=y ++CONFIG_OF_CONTROL=y ++CONFIG_ENV_IS_IN_SPI_FLASH=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_ADC=y ++CONFIG_SARADC_MESON=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_ADC=y ++CONFIG_DFU_RAM=y ++CONFIG_DFU_SF=y ++CONFIG_SET_DFU_ALT_INFO=y ++CONFIG_MMC_MESON_GX=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_GIGADEVICE=y ++CONFIG_SPI_FLASH_SPANSION=y ++CONFIG_PHY_REALTEK=y ++CONFIG_DM_MDIO=y ++CONFIG_DM_MDIO_MUX=y ++CONFIG_ETH_DESIGNWARE_MESON8B=y ++CONFIG_MDIO_MUX_MESON_G12A=y ++CONFIG_MESON_G12A_USB_PHY=y ++CONFIG_PINCTRL=y ++CONFIG_PINCTRL_MESON_G12A=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MESON_EE_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DEBUG_UART_ANNOUNCE=y ++CONFIG_DEBUG_UART_SKIP_INIT=y ++CONFIG_MESON_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MESON_SPIFC=y ++CONFIG_SYSINFO=y ++CONFIG_SYSINFO_SMBIOS=y ++CONFIG_USB=y ++CONFIG_DM_USB_GADGET=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_DWC3=y ++CONFIG_USB_DWC3=y ++# CONFIG_USB_DWC3_GADGET is not set ++CONFIG_USB_DWC3_MESON_G12A=y ++CONFIG_USB_KEYBOARD=y ++CONFIG_USB_GADGET=y ++CONFIG_USB_GADGET_VENDOR_NUM=0x1b8e ++CONFIG_USB_GADGET_PRODUCT_NUM=0xfada ++CONFIG_USB_GADGET_DWC2_OTG=y ++CONFIG_USB_GADGET_DWC2_OTG_PHY_BUS_WIDTH_8=y ++CONFIG_USB_GADGET_DOWNLOAD=y ++CONFIG_VIDEO=y ++# CONFIG_VIDEO_BPP8 is not set ++# CONFIG_VIDEO_BPP16 is not set ++CONFIG_SYS_WHITE_ON_BLACK=y ++CONFIG_VIDEO_MESON=y ++CONFIG_VIDEO_DT_SIMPLEFB=y ++CONFIG_SPLASH_SCREEN=y ++CONFIG_SPLASH_SCREEN_ALIGN=y ++CONFIG_VIDEO_BMP_RLE8=y ++CONFIG_BMP_16BPP=y ++CONFIG_BMP_24BPP=y ++CONFIG_BMP_32BPP=y ++CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y ++CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y +diff --git a/doc/board/amlogic/aml-s905d3-cc.rst b/doc/board/amlogic/aml-s905d3-cc.rst +new file mode 100644 +index 00000000000..083a591fc52 +--- /dev/null ++++ b/doc/board/amlogic/aml-s905d3-cc.rst +@@ -0,0 +1,46 @@ ++.. SPDX-License-Identifier: GPL-2.0+ ++ ++U-Boot for Libre Computer AML-S905D3-CC 'Solitude' (S905D3) ++=========================================================== ++ ++AML-S905D3-CC is a Single Board Computer manufactured by Libre Computer Technology with ++the following specifications: ++ ++ - Amlogic S905D3 Cortex-A55 quad-core SoC ++ - 2 or 4GB LPDDR4 SDRAM ++ - Gigabit Ethernet ++ - HDMI 2.1 display ++ - 40-pin GPIO header ++ - 4 x USB 3.0 Host, 1 x USB 2.0 Type-C ++ - eMMC 5.x SM Interface for Libre Computer Modules ++ - microSD ++ - Infrared receiver ++ ++Schematics are available on the manufacturer website. ++ ++U-Boot Compilation ++------------------ ++ ++.. code-block:: bash ++ ++ $ export CROSS_COMPILE=aarch64-none-elf- ++ $ make aml-s905d3-cc_defconfig ++ $ make ++ ++U-Boot Signing with Pre-Built FIP repo ++-------------------------------------- ++ ++.. code-block:: bash ++ ++ $ git clone https://github.com/LibreELEC/amlogic-boot-fip --depth=1 ++ $ cd amlogic-boot-fip ++ $ mkdir my-output-dir ++ $ ./build-fip.sh aml-s905d3-cc /path/to/u-boot/u-boot.bin my-output-dir ++ ++Then write U-Boot to SD or eMMC with: ++ ++.. code-block:: bash ++ ++ $ DEV=/dev/boot_device ++ $ dd if=fip/u-boot.bin.sd.bin of=$DEV conv=fsync,notrunc bs=512 skip=1 seek=1 ++ $ dd if=fip/u-boot.bin.sd.bin of=$DEV conv=fsync,notrunc bs=1 count=440 +diff --git a/doc/board/amlogic/index.rst b/doc/board/amlogic/index.rst +index de91b21f977..dcd935224ac 100644 +--- a/doc/board/amlogic/index.rst ++++ b/doc/board/amlogic/index.rst +@@ -86,6 +86,7 @@ Board Documentation + :maxdepth: 1 + + aml-a311d-cc ++ aml-s905d3-cc + bananapi-cm4io + bananapi-m2pro + bananapi-m2s +-- +2.34.1 + diff --git a/projects/Amlogic/patches/u-boot/u-boot-0007-FROMGIT-dts-meson-g12-common-u-boot-do-not-disable-c.patch b/projects/Amlogic/patches/u-boot/u-boot-0007-FROMGIT-dts-meson-g12-common-u-boot-do-not-disable-c.patch new file mode 100644 index 0000000000..d8785f8797 --- /dev/null +++ b/projects/Amlogic/patches/u-boot/u-boot-0007-FROMGIT-dts-meson-g12-common-u-boot-do-not-disable-c.patch @@ -0,0 +1,33 @@ +From 2089ed103a91fa226af44bd6c72a14e7066277aa Mon Sep 17 00:00:00 2001 +From: Neil Armstrong +Date: Tue, 8 Oct 2024 18:23:42 +0200 +Subject: [PATCH 07/12] FROMGIT: dts: meson-g12-common-u-boot: do not disable + canvas + +We were disabling canvas, which causes meson vpu probe failure, +just stop and leave canvas alone. + +Fixes: ce9fa7bffc5 ("ARM: dts: meson-g12a: add U-Boot specific DT for graphics") +Signed-off-by: Neil Armstrong +--- + arch/arm/dts/meson-g12-common-u-boot.dtsi | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/arch/arm/dts/meson-g12-common-u-boot.dtsi b/arch/arm/dts/meson-g12-common-u-boot.dtsi +index 8070b62af5b..6629f3256a8 100644 +--- a/arch/arm/dts/meson-g12-common-u-boot.dtsi ++++ b/arch/arm/dts/meson-g12-common-u-boot.dtsi +@@ -17,10 +17,6 @@ + }; + }; + +-&canvas { +- status = "disabled"; +-}; +- + &vpu { + reg = <0x0 0xff900000 0x0 0x100000>, + <0x0 0xff63c000 0x0 0x1000>, +-- +2.34.1 + diff --git a/projects/Amlogic/patches/u-boot/u-boot-0008-FROMGIT-video-meson-dw-hdmi-do-not-fail-probe-if-HDM.patch b/projects/Amlogic/patches/u-boot/u-boot-0008-FROMGIT-video-meson-dw-hdmi-do-not-fail-probe-if-HDM.patch new file mode 100644 index 0000000000..5fbee18f84 --- /dev/null +++ b/projects/Amlogic/patches/u-boot/u-boot-0008-FROMGIT-video-meson-dw-hdmi-do-not-fail-probe-if-HDM.patch @@ -0,0 +1,35 @@ +From 3afcf6403a22a276be297d57ed1af9342510ea3b Mon Sep 17 00:00:00 2001 +From: Neil Armstrong +Date: Wed, 9 Oct 2024 10:01:56 +0200 +Subject: [PATCH 08/12] FROMGIT: video: meson: dw-hdmi: do not fail probe if + HDMI regulator is already enabled + +If the regulator is already enabled, this happens if the regulator +is set in regulator-always-on, regulator_set_enable() return -EALREADY. + +Ignore the -EALREADY return since it's not an error. + +Suggested-by: Jonas Karlman +Signed-off-by: Neil Armstrong +--- + drivers/video/meson/meson_dw_hdmi.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/video/meson/meson_dw_hdmi.c b/drivers/video/meson/meson_dw_hdmi.c +index 587df7beb9b..1631dc38416 100644 +--- a/drivers/video/meson/meson_dw_hdmi.c ++++ b/drivers/video/meson/meson_dw_hdmi.c +@@ -418,8 +418,8 @@ static int meson_dw_hdmi_probe(struct udevice *dev) + } + + if (!ret) { +- ret = regulator_set_enable(supply, true); +- if (ret) ++ ret = regulator_set_enable_if_allowed(supply, true); ++ if (ret && ret != -ENOSYS) + return ret; + } + #endif +-- +2.34.1 + diff --git a/projects/Amlogic/patches/u-boot/u-boot-0009-FROMGIT-clk-meson-gxbb-add-HDMI-clocks.patch b/projects/Amlogic/patches/u-boot/u-boot-0009-FROMGIT-clk-meson-gxbb-add-HDMI-clocks.patch new file mode 100644 index 0000000000..578ee73ffa --- /dev/null +++ b/projects/Amlogic/patches/u-boot/u-boot-0009-FROMGIT-clk-meson-gxbb-add-HDMI-clocks.patch @@ -0,0 +1,169 @@ +From 0af7ea971441f33a16e2b669a43c08878ec9615a Mon Sep 17 00:00:00 2001 +From: Neil Armstrong +Date: Wed, 9 Oct 2024 11:15:20 +0200 +Subject: [PATCH 09/12] FROMGIT: clk: meson: gxbb: add HDMI clocks + +Align with g12a driver to handle the CLKID_HDMI, CLKID_HDMI_SEL +and CLKID_HDMI_DIV clocks since they were added to the upstream +GXBB/GXL Devicetree on v6.11 with [1] + +[1] https://lore.kernel.org/all/20240626152733.1350376-1-jbrunet@baylibre.com/ + +Signed-off-by: Neil Armstrong +--- + drivers/clk/meson/gxbb.c | 50 +++++++++++++++++++++++++++++++++++++++- + 1 file changed, 49 insertions(+), 1 deletion(-) + +diff --git a/drivers/clk/meson/gxbb.c b/drivers/clk/meson/gxbb.c +index 72ad4fd0e85..51f124869c9 100644 +--- a/drivers/clk/meson/gxbb.c ++++ b/drivers/clk/meson/gxbb.c +@@ -66,6 +66,8 @@ + #define CLKID_VDEC_HEVC_SEL 154 + #define CLKID_VDEC_HEVC_DIV 155 + ++#define CLKID_XTAL 0x10000000 ++ + #define XTAL_RATE 24000000 + + struct meson_clk { +@@ -192,6 +194,7 @@ static struct meson_gate gates[] = { + MESON_GATE(CLKID_VAPB_0, HHI_VAPBCLK_CNTL, 8), + MESON_GATE(CLKID_VAPB_1, HHI_VAPBCLK_CNTL, 24), + MESON_GATE(CLKID_VAPB, HHI_VAPBCLK_CNTL, 30), ++ MESON_GATE(CLKID_HDMI, HHI_HDMI_CLK_CNTL, 8), + }; + + static int meson_set_gate_by_id(struct clk *clk, unsigned long id, bool on) +@@ -267,6 +270,12 @@ static struct parm meson_vapb_1_div_parm = { + + int meson_vapb_1_div_parent = CLKID_VAPB_1_SEL; + ++static struct parm meson_hdmi_div_parm = { ++ HHI_HDMI_CLK_CNTL, 0, 7, ++}; ++ ++int meson_hdmi_div_parent = CLKID_HDMI_SEL; ++ + static ulong meson_div_get_rate(struct clk *clk, unsigned long id) + { + struct meson_clk *priv = dev_get_priv(clk->dev); +@@ -292,6 +301,10 @@ static ulong meson_div_get_rate(struct clk *clk, unsigned long id) + parm = &meson_vapb_1_div_parm; + parent = meson_vapb_1_div_parent; + break; ++ case CLKID_HDMI_DIV: ++ parm = &meson_hdmi_div_parm; ++ parent = meson_hdmi_div_parent; ++ break; + default: + return -ENOENT; + } +@@ -347,6 +360,10 @@ static ulong meson_div_set_rate(struct clk *clk, unsigned long id, ulong rate, + parm = &meson_vapb_1_div_parm; + parent = meson_vapb_1_div_parent; + break; ++ case CLKID_HDMI_DIV: ++ parm = &meson_hdmi_div_parm; ++ parent = meson_hdmi_div_parent; ++ break; + default: + return -ENOENT; + } +@@ -443,6 +460,17 @@ static int meson_vapb_0_1_mux_parents[] = { + CLKID_FCLK_DIV7, + }; + ++static struct parm meson_hdmi_mux_parm = { ++ HHI_HDMI_CLK_CNTL, 9, 2, ++}; ++ ++static int meson_hdmi_mux_parents[] = { ++ CLKID_XTAL, ++ CLKID_FCLK_DIV4, ++ CLKID_FCLK_DIV3, ++ CLKID_FCLK_DIV5, ++}; ++ + static ulong meson_mux_get_parent(struct clk *clk, unsigned long id) + { + struct meson_clk *priv = dev_get_priv(clk->dev); +@@ -475,6 +503,10 @@ static ulong meson_mux_get_parent(struct clk *clk, unsigned long id) + parm = &meson_vapb_1_mux_parm; + parents = meson_vapb_0_1_mux_parents; + break; ++ case CLKID_HDMI_SEL: ++ parm = &meson_hdmi_mux_parm; ++ parents = meson_hdmi_mux_parents; ++ break; + default: + return -ENOENT; + } +@@ -532,6 +564,10 @@ static ulong meson_mux_set_parent(struct clk *clk, unsigned long id, + parm = &meson_vapb_1_mux_parm; + parents = meson_vapb_0_1_mux_parents; + break; ++ case CLKID_HDMI_SEL: ++ parm = &meson_hdmi_mux_parm; ++ parents = meson_hdmi_mux_parents; ++ break; + default: + /* Not a mux */ + return -ENOENT; +@@ -572,7 +608,7 @@ static unsigned long meson_clk81_get_rate(struct clk *clk) + unsigned long parent_rate; + uint reg; + int parents[] = { +- -1, ++ CLKID_XTAL, + -1, + CLKID_FCLK_DIV7, + CLKID_MPLL1, +@@ -727,6 +763,9 @@ static ulong meson_clk_get_rate_by_id(struct clk *clk, unsigned long id) + ulong rate; + + switch (id) { ++ case CLKID_XTAL: ++ rate = XTAL_RATE; ++ break; + case CLKID_FIXED_PLL: + case CLKID_SYS_PLL: + rate = meson_pll_get_rate(clk, id); +@@ -769,10 +808,14 @@ static ulong meson_clk_get_rate_by_id(struct clk *clk, unsigned long id) + case CLKID_VAPB_1: + rate = meson_div_get_rate(clk, CLKID_VAPB_1_DIV); + break; ++ case CLKID_HDMI: ++ rate = meson_div_get_rate(clk, CLKID_HDMI_DIV); ++ break; + case CLKID_VPU_0_DIV: + case CLKID_VPU_1_DIV: + case CLKID_VAPB_0_DIV: + case CLKID_VAPB_1_DIV: ++ case CLKID_HDMI_DIV: + rate = meson_div_get_rate(clk, id); + break; + case CLKID_VPU: +@@ -781,6 +824,7 @@ static ulong meson_clk_get_rate_by_id(struct clk *clk, unsigned long id) + case CLKID_VAPB_SEL: + case CLKID_VAPB_0_SEL: + case CLKID_VAPB_1_SEL: ++ case CLKID_HDMI_SEL: + rate = meson_mux_get_rate(clk, id); + break; + default: +@@ -851,7 +895,11 @@ static ulong meson_clk_set_rate_by_id(struct clk *clk, unsigned long id, + case CLKID_VPU_1_DIV: + case CLKID_VAPB_0_DIV: + case CLKID_VAPB_1_DIV: ++ case CLKID_HDMI_DIV: + return meson_div_set_rate(clk, id, rate, current_rate); ++ case CLKID_HDMI: ++ return meson_clk_set_rate_by_id(clk, CLKID_HDMI_DIV, ++ rate, current_rate); + default: + return -ENOENT; + } +-- +2.34.1 + diff --git a/projects/Amlogic/patches/u-boot/u-boot-0010-FROMGIT-power-domain-meson-ee-pwrc-make-sure-to-not-.patch b/projects/Amlogic/patches/u-boot/u-boot-0010-FROMGIT-power-domain-meson-ee-pwrc-make-sure-to-not-.patch new file mode 100644 index 0000000000..dd8962b64d --- /dev/null +++ b/projects/Amlogic/patches/u-boot/u-boot-0010-FROMGIT-power-domain-meson-ee-pwrc-make-sure-to-not-.patch @@ -0,0 +1,67 @@ +From 1698107823f718396364641b24a2ee9ae5f3c862 Mon Sep 17 00:00:00 2001 +From: Neil Armstrong +Date: Wed, 9 Oct 2024 11:15:21 +0200 +Subject: [PATCH 10/12] FROMGIT: power/domain: meson-ee-pwrc: make sure to not + enable a domain twice + +The upstream Device Tree for GXBB/GXL/G12A was updated with VPU domain +shared between the VPU and HDMI node, causing a double enable. + +Simply store the enable state and avoid enabling twice, fixing +HDMI output on all platforms. + +Signed-off-by: Neil Armstrong +--- + drivers/power/domain/meson-ee-pwrc.c | 15 +++++++++++++-- + 1 file changed, 13 insertions(+), 2 deletions(-) + +diff --git a/drivers/power/domain/meson-ee-pwrc.c b/drivers/power/domain/meson-ee-pwrc.c +index 20e9f32b381..4d9f3bba644 100644 +--- a/drivers/power/domain/meson-ee-pwrc.c ++++ b/drivers/power/domain/meson-ee-pwrc.c +@@ -60,6 +60,7 @@ struct meson_ee_pwrc_domain_desc { + unsigned int mem_pd_count; + struct meson_ee_pwrc_mem_domain *mem_pd; + bool (*get_power)(struct power_domain *power_domain); ++ bool enabled; + }; + + struct meson_ee_pwrc_domain_data { +@@ -306,6 +307,8 @@ static int meson_ee_pwrc_off(struct power_domain *power_domain) + clk_disable_bulk(&priv->clks); + } + ++ pwrc_domain->enabled = false; ++ + return 0; + } + +@@ -317,6 +320,9 @@ static int meson_ee_pwrc_on(struct power_domain *power_domain) + + pwrc_domain = &priv->data->domains[power_domain->id]; + ++ if (pwrc_domain->enabled) ++ return 0; ++ + if (pwrc_domain->top_pd) + regmap_update_bits(priv->regmap_ao, + pwrc_domain->top_pd->sleep_reg, +@@ -347,8 +353,13 @@ static int meson_ee_pwrc_on(struct power_domain *power_domain) + return ret; + } + +- if (pwrc_domain->clk_names_count) +- return clk_enable_bulk(&priv->clks); ++ if (pwrc_domain->clk_names_count) { ++ ret = clk_enable_bulk(&priv->clks); ++ if (ret) ++ return ret; ++ } ++ ++ pwrc_domain->enabled = true; + + return 0; + } +-- +2.34.1 + diff --git a/projects/Amlogic/patches/u-boot/u-boot-0011-FROMGIT-configs-meson64-Ensure-commands-for-boot-tar.patch b/projects/Amlogic/patches/u-boot/u-boot-0011-FROMGIT-configs-meson64-Ensure-commands-for-boot-tar.patch new file mode 100644 index 0000000000..29491b6cd1 --- /dev/null +++ b/projects/Amlogic/patches/u-boot/u-boot-0011-FROMGIT-configs-meson64-Ensure-commands-for-boot-tar.patch @@ -0,0 +1,79 @@ +From b4ca194c66389e2d9f27d3346e93f856aff9120b Mon Sep 17 00:00:00 2001 +From: Callum Parsey +Date: Sat, 12 Oct 2024 08:03:51 +0000 +Subject: [PATCH 11/12] FROMGIT: configs: meson64: Ensure commands for boot + targets are available + +When populating BOOT_TARGET_DEVICES on Amlogic Meson platforms, verify +that the shell commands for accessing the relevant media have been +enabled in the build configuration. + +This was already being done for USB, NVME and SCSI devices, but not +for MMC devices or network boot. This meant that configuring U-Boot +without the networking or MMC subsystems/drivers would cause an error +to be thrown during preprocessing. + +Signed-off-by: Callum Parsey +Reviewed-by: Neil Armstrong +Link: https://lore.kernel.org/r/20241012080340.2596-1-callum@neoninteger.au +Signed-off-by: Neil Armstrong +--- + include/configs/meson64.h | 28 +++++++++++++++++++++++----- + 1 file changed, 23 insertions(+), 5 deletions(-) + +diff --git a/include/configs/meson64.h b/include/configs/meson64.h +index 8b6f8159e78..72d3caa30be 100644 +--- a/include/configs/meson64.h ++++ b/include/configs/meson64.h +@@ -77,6 +77,15 @@ + #define BOOTENV_DEV_NAME_USB_DFU(devtypeu, devtypel, instance) + #endif + ++#ifdef CONFIG_CMD_MMC ++ #define BOOT_TARGET_MMC(func) \ ++ func(MMC, mmc, 0) \ ++ func(MMC, mmc, 1) \ ++ func(MMC, mmc, 2) ++#else ++ #define BOOT_TARGET_MMC(func) ++#endif ++ + #ifdef CONFIG_CMD_USB + #define BOOT_TARGET_DEVICES_USB(func) func(USB, usb, 0) + #else +@@ -95,18 +104,27 @@ + #define BOOT_TARGET_SCSI(func) + #endif + ++#if defined(CONFIG_CMD_DHCP) && defined(CONFIG_CMD_PXE) ++ #define BOOT_TARGET_PXE(func) func(PXE, pxe, na) ++ #define BOOT_TARGET_DHCP(func) func(DHCP, dhcp, na) ++#elif defined(CONFIG_CMD_DHCP) ++ #define BOOT_TARGET_PXE(func) ++ #define BOOT_TARGET_DHCP(func) func(DHCP, dhcp, na) ++#else ++ #define BOOT_TARGET_PXE(func) ++ #define BOOT_TARGET_DHCP(func) ++#endif ++ + #ifndef BOOT_TARGET_DEVICES + #define BOOT_TARGET_DEVICES(func) \ + func(ROMUSB, romusb, na) \ + func(USB_DFU, usbdfu, na) \ +- func(MMC, mmc, 0) \ +- func(MMC, mmc, 1) \ +- func(MMC, mmc, 2) \ ++ BOOT_TARGET_MMC(func) \ + BOOT_TARGET_DEVICES_USB(func) \ + BOOT_TARGET_NVME(func) \ + BOOT_TARGET_SCSI(func) \ +- func(PXE, pxe, na) \ +- func(DHCP, dhcp, na) ++ BOOT_TARGET_PXE(func) \ ++ BOOT_TARGET_DHCP(func) + #endif + + #define BOOTM_SIZE __stringify(0x1700000) +-- +2.34.1 + diff --git a/projects/Amlogic/patches/u-boot/u-boot-0012-TESTING-test-uart_ao_a_pins-bias-disable-on-Odroid-C.patch b/projects/Amlogic/patches/u-boot/u-boot-0012-TESTING-test-uart_ao_a_pins-bias-disable-on-Odroid-C.patch new file mode 100644 index 0000000000..22422870e0 --- /dev/null +++ b/projects/Amlogic/patches/u-boot/u-boot-0012-TESTING-test-uart_ao_a_pins-bias-disable-on-Odroid-C.patch @@ -0,0 +1,52 @@ +From ea0cd07c6f4628f2ad5d283a3a634f0691e99ff7 Mon Sep 17 00:00:00 2001 +From: Christian Hewitt +Date: Tue, 8 Oct 2024 06:48:13 +0000 +Subject: [PATCH 12/12] TESTING: test uart_ao_a_pins bias disable on Odroid C2 + and WeTek Hub + +This appears to resolve the reports of non-booting C2 boards. No feedback +on WeTek Hub yet. + +Suggested-by: Martin Blumenstingl +Signed-off-by: Christian Hewitt +--- + arch/arm/dts/meson-gxbb-odroidc2-u-boot.dtsi | 7 +++++++ + arch/arm/dts/meson-gxbb-wetek-hub-u-boot.dtsi | 7 +++++++ + 2 files changed, 14 insertions(+) + +diff --git a/arch/arm/dts/meson-gxbb-odroidc2-u-boot.dtsi b/arch/arm/dts/meson-gxbb-odroidc2-u-boot.dtsi +index 5a2be8171e1..b73ce8378c9 100644 +--- a/arch/arm/dts/meson-gxbb-odroidc2-u-boot.dtsi ++++ b/arch/arm/dts/meson-gxbb-odroidc2-u-boot.dtsi +@@ -35,6 +35,13 @@ + snps,reset-active-low; + }; + ++&uart_ao_a_pins { ++ mux { ++ /delete-property/ bias-disable; ++ bias-pull-up; ++ }; ++}; ++ + &usb0 { + status = "disabled"; + }; +diff --git a/arch/arm/dts/meson-gxbb-wetek-hub-u-boot.dtsi b/arch/arm/dts/meson-gxbb-wetek-hub-u-boot.dtsi +index 3743053eb9c..857007a134b 100644 +--- a/arch/arm/dts/meson-gxbb-wetek-hub-u-boot.dtsi ++++ b/arch/arm/dts/meson-gxbb-wetek-hub-u-boot.dtsi +@@ -11,3 +11,10 @@ + snps,reset-delays-us = <0 10000 1000000>; + snps,reset-active-low; + }; ++ ++&uart_ao_a_pins { ++ mux { ++ /delete-property/ bias-disable; ++ bias-pull-up; ++ }; ++}; +-- +2.34.1 +