boards: amlogic: Add FriendlyElec NanoPi K2 board support

This adds platform code for the FriendlyElec NanoPi K2 board based on a
Meson GXBB (S905) SoC with the Meson GXBB configuration.

This initial submission only supports:
- UART
- MMC/SDCard
- Ethernet
- Reset Controller
- Clock controller

Cc: Yuefei Tan <yftan@friendlyarm.com>
Signed-off-by: Thomas McKahan <tonymckahan@gmail.com>
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
This commit is contained in:
Thomas McKahan 2018-06-25 16:50:17 +02:00 committed by Tom Rini
parent 9c7ad1ed01
commit eee45b4f54
9 changed files with 252 additions and 0 deletions

View File

@ -55,6 +55,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += \
dtb-$(CONFIG_ARCH_MESON) += \
meson-gxbb-nanopi-k2.dtb \
meson-gxbb-odroidc2.dtb \
meson-gxbb-nanopi-k2.dtb \
meson-gxl-s905x-p212.dtb \
meson-gxl-s905x-libretech-cc.dtb \
meson-gxl-s905x-khadas-vim.dtb

View File

@ -29,6 +29,12 @@ config TARGET_ODROID_C2
with 2 GiB of RAM, Gigabit Ethernet, HDMI, 4 USB, micro-SD
slot, eMMC, IR receiver and a 40-pin GPIO header.
config TARGET_NANOPI_K2
bool "NANOPI_K2"
help
NANOPI_K2 is a single board computer based on Meson GXBaby
with 2 GiB of RAM, Gigabit Ethernet,AP6212 Wifi, HDMI, 4 USB,
micro-SD slot, eMMC, IR receiver and a 40-pin GPIO header.
endif
if MESON_GXL
@ -64,6 +70,8 @@ config SYS_MALLOC_F_LEN
source "board/amlogic/odroid-c2/Kconfig"
source "board/amlogic/nanopi-k2/Kconfig"
source "board/amlogic/p212/Kconfig"
source "board/amlogic/libretech-cc/Kconfig"

View File

@ -0,0 +1,12 @@
if TARGET_NANOPI_K2
config SYS_BOARD
default "nanopi-k2"
config SYS_VENDOR
default "amlogic"
config SYS_CONFIG_NAME
default "nanopi-k2"
endif

View File

@ -0,0 +1,6 @@
NANOPI-K2
M: Neil Armstrong <narmstrong@baylibre.com>
S: Maintained
F: board/amlogic/nanopi-k2/
F: include/configs/nanopi-k2.h
F: configs/nanopi-k2_defconfig

View File

@ -0,0 +1,7 @@
#
# (C) Copyright 2018 Thomas McKahan
#
# SPDX-License-Identifier: GPL-2.0+
#
obj-y := nanopi-k2.o

View File

@ -0,0 +1,99 @@
U-Boot for NanoPi-K2
====================
NanoPi-K2 is a single board computer manufactured by FriendlyElec
with the following specifications:
- Amlogic S905 ARM Cortex-A53 quad-core SoC @ 1.5GHz
- 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
==================
> export ARCH=arm
> export CROSS_COMPILE=aarch64-none-elf-
> make nanopi-k2_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
> git clone https://github.com/friendlyarm/u-boot.git -b nanopi-k2-v2015.01 amlogic-u-boot
> cd amlogic-u-boot
> sed -i 's/aarch64-linux-gnu-/aarch64-none-elf-/' Makefile
> sed -i 's/arm-linux-/arm-none-eabi-/' arch/arm/cpu/armv8/gxb/firmware/scp_task/Makefile
> make nanopi-k2_defconfig
> make
> export FIPDIR=$PWD/fip
Go back to mainline U-Boot source tree then :
> mkdir fip
> cp $FIPDIR/gxb/bl2.bin fip/
> cp $FIPDIR/gxb/acs.bin fip/
> cp $FIPDIR/gxb/bl21.bin fip/
> cp $FIPDIR/gxb/bl30.bin fip/
> cp $FIPDIR/gxb/bl301.bin fip/
> cp $FIPDIR/gxb/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/fip_create \
--bl30 fip/bl30_new.bin \
--bl31 fip/bl31.img \
--bl33 fip/bl33.bin \
fip/fip.bin
> python $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
> cat fip/bl2_new.bin fip/fip.bin > fip/boot_new.bin
> $FIPDIR/gxb/aml_encrypt_gxb --bootsig \
--input fip/boot_new.bin
--output fip/u-boot.bin
and then write the image to SD with:
> DEV=/dev/your_sd_device
> dd if=fip/u-boot.bin of=$DEV conv=fsync,notrunc bs=512 seek=1

View File

@ -0,0 +1,61 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* (C) Copyright 2018 Thomas McKahan
*/
#include <common.h>
#include <dm.h>
#include <environment.h>
#include <asm/io.h>
#include <asm/arch/gx.h>
#include <asm/arch/sm.h>
#include <asm/arch/eth.h>
#include <asm/arch/mem.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;
meson_gx_eth_init(PHY_INTERFACE_MODE_RGMII, 0);
/* Reset PHY on GPIOZ_14 */
clrbits_le32(GX_GPIO_EN(3), BIT(14));
clrbits_le32(GX_GPIO_OUT(3), BIT(14));
mdelay(10);
setbits_le32(GX_GPIO_OUT(3), BIT(14));
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;
}
int ft_board_setup(void *blob, bd_t *bd)
{
meson_gx_init_reserved_memory(blob);
return 0;
}

View File

@ -0,0 +1,40 @@
CONFIG_ARM=y
CONFIG_ARCH_MESON=y
CONFIG_SYS_TEXT_BASE=0x01000000
CONFIG_MESON_GXBB=y
CONFIG_TARGET_NANOPI_K2=y
CONFIG_DEBUG_UART_BASE=0xc81004c0
CONFIG_DEBUG_UART_CLOCK=24000000
CONFIG_IDENT_STRING=" nanopi-k2"
CONFIG_DEFAULT_DEVICE_TREE="meson-gxbb-nanopi-k2"
CONFIG_DEBUG_UART=y
CONFIG_OF_BOARD_SETUP=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_GPIO=y
CONFIG_CMD_I2C=y
# CONFIG_CMD_LOADS is not set
CONFIG_CMD_MMC=y
# CONFIG_CMD_SETEXPR is not set
CONFIG_CMD_REGULATOR=y
CONFIG_OF_CONTROL=y
CONFIG_NET_RANDOM_ETHADDR=y
CONFIG_DM_GPIO=y
CONFIG_DM_I2C=y
CONFIG_SYS_I2C_MESON=y
CONFIG_DM_REGULATOR=y
CONFIG_DM_REGULATOR_FIXED=y
CONFIG_DM_RESET=y
CONFIG_DM_MMC=y
CONFIG_MMC_MESON_GX=y
CONFIG_DM_ETH=y
CONFIG_ETH_DESIGNWARE=y
CONFIG_PINCTRL=y
CONFIG_PINCTRL_MESON_GXBB=y
CONFIG_DEBUG_UART_MESON=y
CONFIG_DEBUG_UART_ANNOUNCE=y
CONFIG_DEBUG_UART_SKIP_INIT=y
CONFIG_MESON_SERIAL=y
CONFIG_OF_LIBFDT_OVERLAY=y

View File

@ -0,0 +1,18 @@
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* Configuration for NANOPI-K2
* (C) Copyright 2018 Thomas McKahan
*/
#ifndef __CONFIG_H
#define __CONFIG_H
#define CONFIG_MISC_INIT_R
/* Serial setup */
#define MESON_FDTFILE_SETTING "fdtfile=amlogic/meson-gxbb-nanopi-k2.dtb\0"
#include <configs/meson-gx-common.h>
#endif /* __CONFIG_H */