[PATCH 1/2] ARM: meson: add support for Libre Computer aml-a311d-cc

Ilias Apalodimas ilias.apalodimas at linaro.org
Sat Oct 5 16:28:16 CEST 2024


Thanks Neil,


On Fri, Sep 20, 2024 at 03:33:33PM +0200, Neil Armstrong wrote:
> 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.
>
> Signed-off-by: Neil Armstrong <neil.armstrong at linaro.org>
> ---
>  .../dts/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 ++
>  board/libre-computer/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(+)
>
> 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 <neil.armstrong at linaro.org>
> + */
> +
> +#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 <neil.armstrong at linaro.org>
> +S:	Maintained
> +L:	u-boot-amlogic at 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 <narmstrong at baylibre.com>
> +
> +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 <narmstrong at baylibre.com>
> + */
> +
> +#include <dm.h>
> +#include <env.h>
> +#include <init.h>
> +#include <net.h>
> +#include <efi_loader.h>
> +#include <asm/io.h>
> +#include <asm/arch/eth.h>
> +
> +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
>

Board boots fine, I haven't tested everything though

Tested-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>



More information about the U-Boot mailing list