board: add support for Schneider HMIBSC board

Support for Schneider Electric HMIBSC. Features:
- Qualcomm Snapdragon 410C SoC - APQ8016 (4xCortex A53, Adreno 306)
- 2GiB RAM
- 64GiB eMMC, SD slot
- WiFi and Bluetooth
- 2x Host, 1x Device USB port
- HDMI
- Discrete TPM2 chip over SPI

Features enabled in U-Boot:
- RAUC updates
- Environment protection
- USB based ethernet adaptors

Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
This commit is contained in:
Sumit Garg 2024-04-12 15:24:38 +05:30 committed by Caleb Connolly
parent 8954ef38f7
commit 969e3dd13e
No known key found for this signature in database
GPG key ID: 0583312B195F64B6
7 changed files with 204 additions and 0 deletions

View file

@ -0,0 +1,6 @@
HMIBSC BOARD
M: Sumit Garg <sumit.garg@linaro.org>
S: Maintained
F: board/schneider/hmibsc/
F: include/configs/hmibsc.h
F: configs/hmibsc_defconfig

View file

@ -0,0 +1,40 @@
/* SPDX-License-Identifier: GPL-2.0+ */
loadaddr=0x90000000
bootcmd=
echo "Booting RAUC A/B system";
setenv devtype mmc; setenv devnum 0;
test -n "${BOOT_ORDER}" || setenv BOOT_ORDER "A B";
test -n "${BOOT_A_LEFT}" || setenv BOOT_A_LEFT 3;
test -n "${BOOT_B_LEFT}" || setenv BOOT_B_LEFT 3;
setenv raucslot;
for BOOT_SLOT in "${BOOT_ORDER}"; do
if test "x${raucslot}" != "x"; then
echo "skip remaining slots...";
elif test "x${BOOT_SLOT}" = "xA"; then
if test ${BOOT_A_LEFT} -gt 0; then
setexpr BOOT_A_LEFT ${BOOT_A_LEFT} - 1;
echo "Found valid RAUC slot A";
setenv raucslot "rauc.slot=A";
setenv raucpart A; setenv distro_bootpart 6;
fi;
elif test "x${BOOT_SLOT}" = "xB"; then
if test ${BOOT_B_LEFT} -gt 0; then
setexpr BOOT_B_LEFT ${BOOT_B_LEFT} - 1;
echo "Found valid RAUC slot B";
setenv raucslot "rauc.slot=B";
setenv raucpart B; setenv distro_bootpart 7;
fi;
fi;
done;
if test -n "${raucslot}"; then
setenv bootargs console=ttyMSM1 root=PARTLABEL=rootfs_${raucpart} rw rootwait ${raucslot};
saveenv;
else
echo "No valid RAUC slot found. Resetting tries to 3";
setenv BOOT_A_LEFT 3;
setenv BOOT_B_LEFT 3;
saveenv;
reset;
fi;
load ${devtype} ${devnum}:${distro_bootpart} ${loadaddr} /boot/fitImage && bootm;

87
configs/hmibsc_defconfig Normal file
View file

@ -0,0 +1,87 @@
CONFIG_ARM=y
CONFIG_SYS_VENDOR="schneider"
CONFIG_SYS_BOARD="hmibsc"
CONFIG_ENABLE_ARM_SOC_BOOT0_HOOK=y
CONFIG_ARCH_SNAPDRAGON=y
CONFIG_TEXT_BASE=0x8f600000
CONFIG_SYS_MALLOC_LEN=0x802000
CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x8007fff0
CONFIG_ENV_SIZE=0x2000
CONFIG_ENV_OFFSET=0x0
CONFIG_DEFAULT_DEVICE_TREE="apq8016-schneider-hmibsc"
# CONFIG_OF_UPSTREAM is not set
CONFIG_OF_LIBFDT_OVERLAY=y
CONFIG_IDENT_STRING="\nSchneider Electric-HMIBSC"
CONFIG_SYS_LOAD_ADDR=0x80080000
CONFIG_REMAKE_ELF=y
# CONFIG_ANDROID_BOOT_IMAGE is not set
CONFIG_FIT=y
CONFIG_HUSH_PARSER=y
CONFIG_SYS_CBSIZE=2048
# CONFIG_DISPLAY_CPUINFO is not set
# CONFIG_DISPLAY_BOARDINFO is not set
CONFIG_SYS_PROMPT="hmibsc => "
CONFIG_SYS_MAXARGS=64
CONFIG_CMD_DHCP=y
CONFIG_CMD_PING=y
CONFIG_CMD_FS_GENERIC=y
# CONFIG_CMD_IMI is not set
CONFIG_CMD_MD5SUM=y
CONFIG_CMD_MEMINFO=y
CONFIG_CMD_EXT2=y
CONFIG_CMD_EXT4=y
CONFIG_CMD_FAT=y
CONFIG_CMD_GPIO=y
CONFIG_CMD_GPT=y
CONFIG_CMD_MMC=y
CONFIG_CMD_PART=y
CONFIG_CMD_USB=y
CONFIG_BOOTP_BOOTFILESIZE=y
CONFIG_CMD_CACHE=y
CONFIG_CMD_TIMER=y
CONFIG_CMD_ENV_FLAGS=y
CONFIG_CMD_ENV_EXISTS=y
CONFIG_CMD_NVEDIT_INFO=y
CONFIG_ENV_WRITEABLE_LIST=y
CONFIG_ENV_ACCESS_IGNORE_FORCE=y
CONFIG_ENV_IS_IN_MMC=y
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
CONFIG_SYS_MMC_ENV_PART=2
CONFIG_BUTTON_QCOM_PMIC=y
CONFIG_CLK=y
CONFIG_CLK_QCOM_APQ8016=y
CONFIG_USB_FUNCTION_FASTBOOT=y
CONFIG_FASTBOOT_BUF_ADDR=0x91000000
CONFIG_FASTBOOT_FLASH=y
CONFIG_FASTBOOT_FLASH_MMC_DEV=0
CONFIG_MSM_GPIO=y
CONFIG_QCOM_PMIC_GPIO=y
CONFIG_LED=y
CONFIG_LED_GPIO=y
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_MSM=y
CONFIG_PHY=y
CONFIG_PINCTRL=y
CONFIG_PINCONF=y
CONFIG_PINCTRL_QCOM_APQ8016=y
CONFIG_DM_PMIC=y
CONFIG_PMIC_QCOM=y
CONFIG_MSM_SERIAL=y
CONFIG_SPMI_MSM=y
CONFIG_USB=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_MSM=y
CONFIG_USB_ULPI_VIEWPORT=y
CONFIG_USB_ULPI=y
CONFIG_USB_HOST_ETHER=y
CONFIG_USB_ETHER_ASIX=y
CONFIG_USB_ETHER_ASIX88179=y
CONFIG_USB_ETHER_MCS7830=y
CONFIG_USB_ETHER_SMSC95XX=y
CONFIG_PHYLIB=y
CONFIG_USB_ETHER_LAN75XX=y
CONFIG_USB_GADGET=y
CONFIG_USB_GADGET_VENDOR_NUM=0x18d1
CONFIG_USB_GADGET_PRODUCT_NUM=0xd00d
CONFIG_CI_UDC=y

View file

@ -42,6 +42,7 @@ Board-specific doc
renesas/index
rockchip/index
samsung/index
schneider/index
sielaff/index
siemens/index
sifive/index

View file

@ -0,0 +1,45 @@
.. SPDX-License-Identifier: GPL-2.0+
.. sectionauthor:: Sumit Garg <sumit.garg@linaro.org>
HMIBSC
======
The HMIBSC is an IIoT Edge Box Core board based on the Qualcomm APQ8016E SoC.
More information can be found on the `SE product page`_.
U-Boot can be used as a replacement for Qualcomm's original Android bootloader
(a fork of Little Kernel/LK). Like LK, it is installed directly into the ``aboot``
partition. Note that the U-Boot port used to be loaded as an Android boot image
through LK. This is no longer the case, now U-Boot can replace LK entirely.
.. _SE product page: https://www.se.com/us/en/product/HMIBSCEA53D1L0T/iiot-edge-box-core-harmony-ipc-emmc-dc-linux-tpm/
Build steps
-----------
First, setup ``CROSS_COMPILE`` for aarch64. Then, build U-Boot for ``hmibsc``::
$ export CROSS_COMPILE=<aarch64 toolchain prefix>
$ make hmibsc_defconfig
$ make
This will build ``u-boot.elf`` in the configured output directory.
Installation
------------
Although the HMIBSC does not have secure boot set up by default, the firmware
still expects firmware ELF images to be "signed". The signature does not provide
any security in this case, but it provides the firmware with some required
metadata.
To "sign" ``u-boot.elf`` you can use e.g. `qtestsign`_::
$ ./qtestsign.py aboot u-boot.elf
Then install the resulting ``u-boot-test-signed.mbn`` to the ``aboot`` partition
on your device, e.g. with ``fastboot flash aboot u-boot-test-signed.mbn``.
U-Boot should be running after a reboot (``fastboot reboot``).
.. _qtestsign: https://github.com/msm8916-mainline/qtestsign

View file

@ -0,0 +1,9 @@
.. SPDX-License-Identifier: GPL-2.0+
Schneider Electric
==================
.. toctree::
:maxdepth: 2
hmibsc

16
include/configs/hmibsc.h Normal file
View file

@ -0,0 +1,16 @@
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* Board configuration file for HMIBSC
*
* (C) Copyright 2024 Sumit Garg <sumit.garg@linaro.org>
*/
#ifndef __CONFIGS_HMIBSC_H
#define __CONFIGS_HMIBSC_H
/* PHY needs a longer aneg time */
#define PHY_ANEG_TIMEOUT 8000
#define CFG_ENV_FLAGS_LIST_STATIC "BOOT_A_LEFT:dw,BOOT_B_LEFT:dw,BOOT_ORDER:sw"
#endif