Hi Simon, On 21/11/2017 05:08, Simon Glass wrote: > Hi Neil, > > On 20 November 2017 at 08:04, Neil Armstrong <narmstr...@baylibre.com> wrote: >> This adds platform code for the Libre Computer CC "Le Potato" board based on >> a >> Meson GXL (S905X) SoC with the Meson GXL configuration. >> >> This initial submission supports UART, MMC/SDCard and Ethernet with the >> Internal RMII PHY. >> >> The meson-gxl-s905x-libretech-cc.dts is synchronised from the linux 4.13 >> stable tree as of 4.13.8. >> >> Signed-off-by: Neil Armstrong <narmstr...@baylibre.com> >> --- >> arch/arm/dts/Makefile | 3 +- >> arch/arm/dts/meson-gxl-s905x-libretech-cc.dts | 171 >> ++++++++++++++++++++++++++ >> arch/arm/mach-meson/Kconfig | 9 ++ >> board/amlogic/libretech-cc/Kconfig | 12 ++ >> board/amlogic/libretech-cc/MAINTAINERS | 6 + >> board/amlogic/libretech-cc/Makefile | 8 ++ >> board/amlogic/libretech-cc/README | 96 +++++++++++++++ >> board/amlogic/libretech-cc/libretech-cc.c | 58 +++++++++ >> configs/libretech-cc_defconfig | 35 ++++++ >> include/configs/libretech-cc.h | 24 ++++ >> 10 files changed, 421 insertions(+), 1 deletion(-) >> create mode 100644 arch/arm/dts/meson-gxl-s905x-libretech-cc.dts >> create mode 100644 board/amlogic/libretech-cc/Kconfig >> create mode 100644 board/amlogic/libretech-cc/MAINTAINERS >> create mode 100644 board/amlogic/libretech-cc/Makefile >> create mode 100644 board/amlogic/libretech-cc/README >> create mode 100644 board/amlogic/libretech-cc/libretech-cc.c >> create mode 100644 configs/libretech-cc_defconfig >> create mode 100644 include/configs/libretech-cc.h > > Reviewed-by: Simon Glass <s...@chromium.org> > > Please see below. > >> >> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile >> index cd540e9..1845552 100644 >> --- a/arch/arm/dts/Makefile >> +++ b/arch/arm/dts/Makefile >> @@ -55,7 +55,8 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += \ >> rv1108-evb.dtb >> dtb-$(CONFIG_ARCH_MESON) += \ >> meson-gxbb-odroidc2.dtb \ >> - meson-gxl-s905x-p212.dtb >> + meson-gxl-s905x-p212.dtb \ >> + meson-gxl-s905x-libretech-cc.dtb >> dtb-$(CONFIG_TEGRA) += tegra20-harmony.dtb \ >> tegra20-medcom-wide.dtb \ >> tegra20-paz00.dtb \ >> diff --git a/arch/arm/dts/meson-gxl-s905x-libretech-cc.dts >> b/arch/arm/dts/meson-gxl-s905x-libretech-cc.dts >> new file mode 100644 >> index 0000000..266fbcf >> --- /dev/null >> +++ b/arch/arm/dts/meson-gxl-s905x-libretech-cc.dts >> @@ -0,0 +1,171 @@ >> +/* >> + * Copyright (c) 2017 BayLibre, SAS. >> + * Author: Neil Armstrong <narmstr...@baylibre.com> >> + * Author: Jerome Brunet <jbru...@baylibre.com> >> + * >> + * SPDX-License-Identifier: (GPL-2.0+ OR MIT) >> + */ >> + >> +/dts-v1/; >> + >> +#include <dt-bindings/input/input.h> >> + >> +#include "meson-gxl-s905x.dtsi" >> + >> +/ { >> + compatible = "libretech,cc", "amlogic,s905x", "amlogic,meson-gxl"; >> + model = "Libre Technology CC"; >> + >> + aliases { >> + serial0 = &uart_AO; >> + }; >> + >> + chosen { >> + stdout-path = "serial0:115200n8"; >> + }; >> + >> + cvbs-connector { >> + compatible = "composite-video-connector"; >> + >> + port { >> + cvbs_connector_in: endpoint { >> + remote-endpoint = <&cvbs_vdac_out>; >> + }; >> + }; >> + }; >> + >> + emmc_pwrseq: emmc-pwrseq { >> + compatible = "mmc-pwrseq-emmc"; >> + reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>; >> + }; >> + >> + hdmi-connector { >> + compatible = "hdmi-connector"; >> + type = "a"; >> + >> + port { >> + hdmi_connector_in: endpoint { >> + remote-endpoint = <&hdmi_tx_tmds_out>; >> + }; >> + }; >> + }; >> + >> + leds { >> + compatible = "gpio-leds"; >> + >> + system { >> + label = "librecomputer:system-status"; >> + gpios = <&gpio GPIODV_24 GPIO_ACTIVE_HIGH>; >> + default-state = "on"; >> + panic-indicator; >> + }; >> + >> + blue { >> + label = "librecomputer:blue"; >> + gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_HIGH>; >> + linux,default-trigger = "heartbeat"; >> + }; >> + }; >> + >> + memory@0 { >> + device_type = "memory"; >> + reg = <0x0 0x0 0x0 0x80000000>; >> + }; >> + >> + vcc_3v3: regulator-vcc_3v3 { >> + compatible = "regulator-fixed"; >> + regulator-name = "VCC_3V3"; >> + regulator-min-microvolt = <3300000>; >> + regulator-max-microvolt = <3300000>; >> + }; >> + >> + vcc_card: regulator-vcc-card { >> + compatible = "regulator-gpio"; >> + >> + regulator-name = "VCC_CARD"; >> + regulator-min-microvolt = <1800000>; >> + regulator-max-microvolt = <3300000>; >> + >> + gpios = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_HIGH>; >> + gpios-states = <0>; >> + >> + states = <3300000 0>, >> + <1800000 1>; >> + }; >> + >> + vddio_boot: regulator-vddio_boot { >> + compatible = "regulator-fixed"; >> + regulator-name = "VDDIO_BOOT"; >> + regulator-min-microvolt = <3300000>; >> + regulator-max-microvolt = <3300000>; >> + }; >> +}; >> + >> +&cvbs_vdac_port { >> + cvbs_vdac_out: endpoint { >> + remote-endpoint = <&cvbs_connector_in>; >> + }; >> +}; >> + >> +ðmac { >> + status = "okay"; >> +}; >> + >> +&ir { >> + status = "okay"; >> + pinctrl-0 = <&remote_input_ao_pins>; >> + pinctrl-names = "default"; >> +}; >> + >> +&hdmi_tx { >> + status = "okay"; >> + pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>; >> + pinctrl-names = "default"; >> +}; >> + >> +&hdmi_tx_tmds_port { >> + hdmi_tx_tmds_out: endpoint { >> + remote-endpoint = <&hdmi_connector_in>; >> + }; >> +}; >> + >> +/* SD card */ >> +&sd_emmc_b { >> + status = "okay"; >> + pinctrl-0 = <&sdcard_pins>; >> + pinctrl-names = "default"; >> + >> + bus-width = <4>; >> + cap-sd-highspeed; >> + max-frequency = <100000000>; >> + disable-wp; >> + >> + cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_HIGH>; >> + cd-inverted; >> + >> + vmmc-supply = <&vcc_3v3>; >> + vqmmc-supply = <&vcc_card>; >> +}; >> + >> +/* eMMC */ >> +&sd_emmc_c { >> + status = "okay"; >> + pinctrl-0 = <&emmc_pins>; >> + pinctrl-names = "default"; >> + >> + bus-width = <8>; >> + cap-mmc-highspeed; >> + max-frequency = <50000000>; >> + non-removable; >> + disable-wp; >> + >> + mmc-pwrseq = <&emmc_pwrseq>; >> + vmmc-supply = <&vcc_3v3>; >> + vqmmc-supply = <&vddio_boot>; >> +}; >> + >> +&uart_AO { >> + status = "okay"; >> + pinctrl-0 = <&uart_ao_a_pins>; >> + pinctrl-names = "default"; >> +}; >> diff --git a/arch/arm/mach-meson/Kconfig b/arch/arm/mach-meson/Kconfig >> index d4bd230..ca08dc3 100644 >> --- a/arch/arm/mach-meson/Kconfig >> +++ b/arch/arm/mach-meson/Kconfig >> @@ -38,6 +38,13 @@ config TARGET_P212 >> with 2 GiB of RAM, Ethernet, HDMI, 2 USB, micro-SD slot, >> eMMC, IR receiver, CVBS+Audio jack and a SDIO WiFi module. >> >> +config TARGET_LIBRETECH_CC >> + bool "LIBRETECH-CC" >> + help >> + LibreTech CC is a single board computer based on Meson GXL >> + with 2 GiB of RAM, Ethernet, HDMI, 4 USB, micro-SD slot, >> + eMMC, IR receiver and a 40-pin GPIO header. >> + >> endif >> >> config SYS_SOC >> @@ -50,4 +57,6 @@ source "board/amlogic/odroid-c2/Kconfig" >> >> source "board/amlogic/p212/Kconfig" >> >> +source "board/amlogic/libretech-cc/Kconfig" >> + >> endif >> diff --git a/board/amlogic/libretech-cc/Kconfig >> b/board/amlogic/libretech-cc/Kconfig >> new file mode 100644 >> index 0000000..7a6f916 >> --- /dev/null >> +++ b/board/amlogic/libretech-cc/Kconfig >> @@ -0,0 +1,12 @@ >> +if TARGET_LIBRETECH_CC >> + >> +config SYS_BOARD >> + default "libretech-cc" >> + >> +config SYS_VENDOR >> + default "amlogic" >> + >> +config SYS_CONFIG_NAME >> + default "libretech-cc" >> + >> +endif >> diff --git a/board/amlogic/libretech-cc/MAINTAINERS >> b/board/amlogic/libretech-cc/MAINTAINERS >> new file mode 100644 >> index 0000000..398ce57 >> --- /dev/null >> +++ b/board/amlogic/libretech-cc/MAINTAINERS >> @@ -0,0 +1,6 @@ >> +LIBRETECH-CC >> +M: Neil Armstrong <narmstr...@baylibre.com> >> +S: Maintained >> +F: board/amlogic/libretech-cc/ >> +F: include/configs/libretech-cc.h >> +F: configs/libretech-cc_defconfig >> diff --git a/board/amlogic/libretech-cc/Makefile >> b/board/amlogic/libretech-cc/Makefile >> new file mode 100644 >> index 0000000..d0e3bbb >> --- /dev/null >> +++ b/board/amlogic/libretech-cc/Makefile >> @@ -0,0 +1,8 @@ >> +# >> +# (C) Copyright 2016 BayLibre, SAS >> +# Author: Neil Armstrong <narmstr...@baylibre.com> >> +# >> +# SPDX-License-Identifier: GPL-2.0+ >> +# >> + >> +obj-y := libretech-cc.o >> diff --git a/board/amlogic/libretech-cc/README >> b/board/amlogic/libretech-cc/README >> new file mode 100644 >> index 0000000..9711e8a >> --- /dev/null >> +++ b/board/amlogic/libretech-cc/README >> @@ -0,0 +1,96 @@ >> +U-Boot for LibreTech CC >> +======================= >> + >> +LibreTech CC is a single board computer manufactured by Libre Technology >> +with the following specifications: >> + >> + - Amlogic S905X ARM Cortex-A53 quad-core SoC @ 2GHz >> + - ARM Mali 450 GPU >> + - 2GB DDR3 SDRAM >> + - Gigabit Ethernet >> + - HDMI 2.0 4K/60Hz display >> + - 40-pin GPIO header >> + - 4 x USB 2.0 Host, 1 x USB OTG >> + - eMMC, microSD >> + - Infrared receiver >> + >> +Schematics are available on the manufacturer website. >> + >> +Currently the u-boot port supports the following devices: >> + - serial >> + - eMMC, microSD >> + - Ethernet >> + >> +u-boot compilation > > U-Boot (always!)
Will fix in v2 > >> +================== >> + >> + > export ARCH=arm >> + > export CROSS_COMPILE=aarch64-none-elf- >> + > make libretech-cc_defconfig >> + > make >> + >> +Image creation >> +============== >> + >> +Amlogic doesn't provide sources for the firmware and for tools needed >> +to create the bootloader image, so it is necessary to obtain them from >> +the git tree published by the board vendor: >> + >> + > wget >> https://releases.linaro.org/archive/13.11/components/toolchain/binaries/gcc-linaro-aarch64-none-elf-4.8-2013.11_linux.tar.xz >> + > wget >> https://releases.linaro.org/archive/13.11/components/toolchain/binaries/gcc-linaro-arm-none-eabi-4.8-2013.11_linux.tar.xz >> + > tar xvfJ gcc-linaro-aarch64-none-elf-4.8-2013.11_linux.tar.xz >> + > tar xvfJ gcc-linaro-arm-none-eabi-4.8-2013.11_linux.tar.xz >> + > export >> PATH=$PWD/gcc-linaro-aarch64-none-elf-4.8-2013.11_linux/bin:$PWD/gcc-linaro-arm-none-eabi-4.8-2013.11_linux/bin:$PATH >> + > git clone https://github.com/BayLibre/u-boot.git -b libretech-cc >> amlogic-u-boot >> + > cd amlogic-u-boot >> + > make libretech_cc_defconfig >> + > make >> + > export FIPDIR=$PWD/fip >> + >> +Go back to mainline U-boot source tree then : > > U-Boot Will fix in v2 > >> + > mkdir fip >> + >> + > cp $FIPDIR/gxl/bl2.bin fip/ >> + > cp $FIPDIR/gxl/acs.bin fip/ >> + > cp $FIPDIR/gxl/bl21.bin fip/ >> + > cp $FIPDIR/gxl/bl30.bin fip/ >> + > cp $FIPDIR/gxl/bl301.bin fip/ >> + > cp $FIPDIR/gxl/bl31.img fip/ >> + > cp u-boot.bin fip/bl33.bin >> + >> + > $FIPDIR/blx_fix.sh \ >> + fip/bl30.bin \ >> + fip/zero_tmp \ >> + fip/bl30_zero.bin \ >> + fip/bl301.bin \ >> + fip/bl301_zero.bin \ >> + fip/bl30_new.bin \ >> + bl30 >> + >> + > $FIPDIR/acs_tool.pyc fip/bl2.bin fip/bl2_acs.bin fip/acs.bin 0 >> + >> + > $FIPDIR/blx_fix.sh \ >> + fip/bl2_acs.bin \ >> + fip/zero_tmp \ >> + fip/bl2_zero.bin \ >> + fip/bl21.bin \ >> + fip/bl21_zero.bin \ >> + fip/bl2_new.bin \ >> + bl2 >> + >> + > $FIPDIR/gxl/aml_encrypt_gxl --bl3enc --input fip/bl30_new.bin >> + > $FIPDIR/gxl/aml_encrypt_gxl --bl3enc --input fip/bl31.img >> + > $FIPDIR/gxl/aml_encrypt_gxl --bl3enc --input fip/bl33.bin >> + > $FIPDIR/gxl/aml_encrypt_gxl --bl2sig --input fip/bl2_new.bin --output >> fip/bl2.n.bin.sig >> + > $FIPDIR/gxl/aml_encrypt_gxl --bootmk \ >> + --output fip/u-boot.bin \ >> + --bl2 fip/bl2.n.bin.sig \ >> + --bl30 fip/bl30_new.bin.enc \ >> + --bl31 fip/bl31.img.enc \ >> + --bl33 fip/bl33.bin.enc >> + >> +and then write the image to SD with: >> + >> + > DEV=/dev/your_sd_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=444 > > It's great to have these instructions, but gosh this is complicated! Indeed, and it depends on vendor publishing the original U-Boot source mixed with the ATF binary packaging... > >> diff --git a/board/amlogic/libretech-cc/libretech-cc.c >> b/board/amlogic/libretech-cc/libretech-cc.c >> new file mode 100644 >> index 0000000..ece8096 >> --- /dev/null >> +++ b/board/amlogic/libretech-cc/libretech-cc.c >> @@ -0,0 +1,58 @@ >> +/* >> + * Copyright (C) 2016 BayLibre, SAS >> + * Author: Neil Armstrong <narmstr...@baylibre.com> >> + * >> + * SPDX-License-Identifier: GPL-2.0+ >> + */ >> + >> +#include <common.h> >> +#include <dm.h> >> +#include <asm/io.h> >> +#include <asm/arch/gxbb.h> >> +#include <asm/arch/sm.h> >> +#include <phy.h> >> + >> +#define EFUSE_SN_OFFSET 20 >> +#define EFUSE_SN_SIZE 16 >> +#define EFUSE_MAC_OFFSET 52 >> +#define EFUSE_MAC_SIZE 6 >> + >> +int board_init(void) >> +{ >> + return 0; >> +} >> + >> +int misc_init_r(void) >> +{ >> + u8 mac_addr[EFUSE_MAC_SIZE]; >> + char serial[EFUSE_SN_SIZE]; >> + ssize_t len; >> + >> + /* Set RMII mode */ >> + out_le32(GXBB_ETH_REG_0, GXBB_ETH_REG_0_INVERT_RMII_CLK | >> + GXBB_ETH_REG_0_CLK_EN); >> + >> + /* Use Internal PHY */ >> + out_le32(GXBB_ETH_REG_2, 0x10110181); >> + out_le32(GXBB_ETH_REG_3, 0xe40908ff); >> + >> + /* Enable power and clock gate */ >> + setbits_le32(GXBB_GCLK_MPEG_1, GXBB_GCLK_MPEG_1_ETH); >> + clrbits_le32(GXBB_MEM_PD_REG_0, GXBB_MEM_PD_REG_0_ETH_MASK); >> + >> + if (!eth_env_get_enetaddr("ethaddr", mac_addr)) { >> + len = meson_sm_read_efuse(EFUSE_MAC_OFFSET, >> + mac_addr, EFUSE_MAC_SIZE); >> + if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr)) >> + eth_env_set_enetaddr("ethaddr", mac_addr); >> + } >> + >> + if (!env_get("serial#")) { >> + len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial, >> + EFUSE_SN_SIZE); >> + if (len == EFUSE_SN_SIZE) >> + env_set("serial#", serial); >> + } >> + >> + return 0; >> +} >> diff --git a/configs/libretech-cc_defconfig b/configs/libretech-cc_defconfig >> new file mode 100644 >> index 0000000..a63e940 >> --- /dev/null >> +++ b/configs/libretech-cc_defconfig >> @@ -0,0 +1,35 @@ >> +CONFIG_ARM=y >> +CONFIG_ARCH_MESON=y >> +CONFIG_MESON_GXL=y >> +CONFIG_TARGET_LIBRETECH_CC=y >> +CONFIG_IDENT_STRING=" libretech-cc" >> +CONFIG_DEFAULT_DEVICE_TREE="meson-gxl-s905x-libretech-cc" >> +CONFIG_DEBUG_UART=y >> +CONFIG_ENV_IS_NOWHERE=y >> +# CONFIG_DISPLAY_CPUINFO is not set >> +# CONFIG_DISPLAY_BOARDINFO is not set >> +# CONFIG_CMD_BDI is not set >> +# CONFIG_CMD_IMI is not set >> +# CONFIG_CMD_IMLS is not set >> +# CONFIG_CMD_LOADS is not set >> +CONFIG_CMD_MMC=y >> +# CONFIG_CMD_FPGA is not set >> +CONFIG_CMD_GPIO=y >> +# CONFIG_CMD_SETEXPR is not set >> +CONFIG_OF_CONTROL=y >> +CONFIG_DM_GPIO=y >> +CONFIG_DM_MMC=y >> +CONFIG_MMC_MESON_GX=y >> +CONFIG_DM_ETH=y >> +CONFIG_ETH_DESIGNWARE=y >> +CONFIG_PHY_MESON_GXL=y >> +CONFIG_NET_RANDOM_ETHADDR=y >> +CONFIG_PINCTRL=y >> +CONFIG_PINCTRL_MESON_GXL=y >> +CONFIG_DEBUG_UART_MESON=y >> +CONFIG_DEBUG_UART_BASE=0xc81004c0 >> +CONFIG_DEBUG_UART_CLOCK=24000000 >> +CONFIG_DEBUG_UART_ANNOUNCE=y >> +CONFIG_DEBUG_UART_SKIP_INIT=y >> +CONFIG_MESON_SERIAL=y >> +CONFIG_OF_LIBFDT_OVERLAY=y >> diff --git a/include/configs/libretech-cc.h b/include/configs/libretech-cc.h >> new file mode 100644 >> index 0000000..4e01b40 >> --- /dev/null >> +++ b/include/configs/libretech-cc.h >> @@ -0,0 +1,24 @@ >> +/* >> + * Configuration for LibreTech CC >> + * >> + * Copyright (C) 2017 Baylibre, SAS >> + * Author: Neil Armstrong <narmstr...@baylibre.com> >> + * >> + * SPDX-License-Identifier: GPL-2.0+ >> + */ >> + >> +#ifndef __CONFIG_H >> +#define __CONFIG_H >> + >> +#define CONFIG_MISC_INIT_R >> + >> +#define CONFIG_PHY_ADDR 8 >> + >> +/* Serial setup */ >> +#define CONFIG_CONS_INDEX 0 > > Do you need this with driver rmodel? Indeed, looking in the serial-uclass, it will default to 0. > >> + >> +#define MESON_FDTFILE_SETTING >> "fdtfile=amlogic/meson-gxl-s905x-libretech-cc.dtb\0" >> + >> +#include <configs/meson-gxbb-common.h> >> + >> +#endif /* __CONFIG_H */ >> -- >> 2.7.4 >> > > Regards, > Simon > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot