On Fri, 20 Sept 2024 at 16:33, Neil Armstrong <neil.armstr...@linaro.org> wrote: > > 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. > > Signed-off-by: Neil Armstrong <neil.armstr...@linaro.org> > --- > .../dts/meson-sm1-s905d3-libretech-cc-u-boot.dtsi | 15 +++ > board/libre-computer/aml-s905d3-cc/MAINTAINERS | 7 ++ > board/libre-computer/aml-s905d3-cc/Makefile | 6 ++ > board/libre-computer/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(+) > > 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 <neil.armstr...@linaro.org> > + */ > + > +#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 <neil.armstr...@linaro.org> > +S: Maintained > +L: u-boot-amlo...@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 <narmstr...@baylibre.com> > + > +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 <narmstr...@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_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 >
Tested basic booting of debian and yocto. Tested-by: Ilias Apalodimas <ilias.apalodi...@linaro.org>