[U-Boot] [PATCH v3 2/5] ARM64: rockchip: add support for rk3399 SoC based evb-board

Kever Yang kever.yang at rock-chips.com
Mon Jul 18 06:54:31 CEST 2016


Hi Andreas,

     Thanks for you comments, I will apply them one by one except some
confuse below.

On 07/18/2016 07:26 AM, Andreas Färber wrote:
> Hi,
>
> Isn't evb short for evaluation board? That makes board board then. ;)
>
> Am 15.07.2016 um 10:42 schrieb Kever Yang:
>> RK3399 is a SoC from Rockchip with dual-core Cortex-A72
>> and qual-core Cortex-A53 CPU. It supports two USB3.0
> quad-core
>
>> type-C ports and two USB2.0 EHCI ports. Other interfaces
>> are very like RK3288, the DRAM are 32bit width address
> "very much like" or "very similar to"
>
>> and support address from 0 to 4GB-128MB range.
>>
>> Signed-off-by: Kever Yang <kever.yang at rock-chips.com>
>> ---
>>
>> Changes in v3:
>> Rebase on patch from Andreas:
>> [PATCH] rockchip: Exclude rk_timer for ARM64
>> [PATCH] rockchip: Clean up CPU selection
>>
>> Changes in v2:
>> fix description error on board Kconfig
>>
>>   arch/arm/Kconfig                       |  2 -
>>   arch/arm/mach-rockchip/Kconfig         | 22 ++++++++-
>>   arch/arm/mach-rockchip/rk3399/Kconfig  | 14 ++++++
>>   arch/arm/mach-rockchip/rk3399/Makefile |  5 ++
>>   board/rockchip/evb_rk3399/Kconfig      | 15 ++++++
>>   board/rockchip/evb_rk3399/MAINTAINERS  |  0
>>   board/rockchip/evb_rk3399/Makefile     |  7 +++
>>   board/rockchip/evb_rk3399/evb-rk3399.c | 41 +++++++++++++++++
>>   include/configs/evb_rk3399.h           | 24 ++++++++++
>>   include/configs/rk3399_common.h        | 84 ++++++++++++++++++++++++++++++++++
>>   10 files changed, 211 insertions(+), 3 deletions(-)
>>   create mode 100644 arch/arm/mach-rockchip/rk3399/Kconfig
>>   create mode 100644 arch/arm/mach-rockchip/rk3399/Makefile
>>   create mode 100644 board/rockchip/evb_rk3399/Kconfig
>>   create mode 100644 board/rockchip/evb_rk3399/MAINTAINERS
>>   create mode 100644 board/rockchip/evb_rk3399/Makefile
>>   create mode 100644 board/rockchip/evb_rk3399/evb-rk3399.c
>>   create mode 100644 include/configs/evb_rk3399.h
>>   create mode 100644 include/configs/rk3399_common.h
>>
>> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
>> index a262145..6e4d78a 100644
>> --- a/arch/arm/Kconfig
>> +++ b/arch/arm/Kconfig
>> @@ -846,8 +846,6 @@ config STM32
>>   
>>   config ARCH_ROCKCHIP
>>   	bool "Support Rockchip SoCs"
>> -	select SUPPORT_SPL
>> -	select SPL
>>   	select OF_CONTROL
>>   	select DM
>>   
>> diff --git a/arch/arm/mach-rockchip/Kconfig b/arch/arm/mach-rockchip/Kconfig
>> index d3f5ffd..8499692 100644
>> --- a/arch/arm/mach-rockchip/Kconfig
>> +++ b/arch/arm/mach-rockchip/Kconfig
>> @@ -9,6 +9,10 @@ config ROCKCHIP_RK3288
>>   	  video interfaces supporting HDMI and eDP, several DDR3 options
>>   	  and video codec support. Peripherals include Gigabit Ethernet,
>>   	  USB2 host and OTG, SDIO, I2S, UART,s, SPI, I2C and PWMs.
>> +	select CPU_V7
>> +	select RK_TIMER
> You no longer define RK_TIMER - either please do (I liked it) or drop
> the selection, it leads to warnings on, e.g., firefly-rk3288_defconfig
> otherwise.
>
>> +	select SUPPORT_SPL
>> +	select SPL
>>   
>>   config ROCKCHIP_RK3036
>>   	bool "Support Rockchip RK3036"
>> @@ -18,6 +22,21 @@ config ROCKCHIP_RK3036
>>   	  including NEON and GPU, Mali-400 graphics, several DDR3 options
>>   	  and video codec support. Peripherals include Gigabit Ethernet,
>>   	  USB2 host and OTG, SDIO, I2S, UART, SPI, I2C and PWMs.
>> +	select CPU_V7
>> +	select RK_TIMER
>> +	select SUPPORT_SPL
>> +	select SPL
>> +
>> +config ROCKCHIP_RK3399
>> +	bool "Support Rockchip RK3399"
>> +	help
>> +	  The Rockchip RK3399 is a ARM-based SoC with a dual-core Cortex-A72
>> +	  and qual-core Cortex-A53.
> quad-core
>
>> +	  including NEON and GPU, 1MB L2 cache, Mali-T7 graphics, two
>> +	  video interfaces supporting HDMI and eDP, several DDR3 options
>> +	  and video codec support. Peripherals include Gigabit Ethernet,
>> +	  USB2 host and OTG, SDIO, I2S, UART,s, SPI, I2C and PWMs.
> UARTs
>
>> +	select ARM64
>>   
>>   config SYS_MALLOC_F
>>   	default y
>> @@ -44,8 +63,9 @@ config DM_GPIO
>>   	default y
>>   
>>   config BLK
>> -	default y
>> +	default y if CPU_V7
> Needs rebasing onto u-boot-rockchip.git.
>
>>   
>>   source "arch/arm/mach-rockchip/rk3288/Kconfig"
>>   source "arch/arm/mach-rockchip/rk3036/Kconfig"
>> +source "arch/arm/mach-rockchip/rk3399/Kconfig"
>>   endif
>> diff --git a/arch/arm/mach-rockchip/rk3399/Kconfig b/arch/arm/mach-rockchip/rk3399/Kconfig
>> new file mode 100644
>> index 0000000..923a6de
>> --- /dev/null
>> +++ b/arch/arm/mach-rockchip/rk3399/Kconfig
>> @@ -0,0 +1,14 @@
>> +if ROCKCHIP_RK3399
>> +
>> +config TARGET_EVB_RK3399
>> +	bool "RK3399 evb board"
> Should this be enclosed in a choice section for futureproofness?
>
>> +
>> +config SYS_SOC
>> +	default "rockchip"
>> +
>> +config SYS_MALLOC_F_LEN
>> +	default 0x0800
>> +
>> +source "board/rockchip/evb_rk3399/Kconfig"
>> +
>> +endif
>> diff --git a/arch/arm/mach-rockchip/rk3399/Makefile b/arch/arm/mach-rockchip/rk3399/Makefile
>> new file mode 100644
>> index 0000000..ca69207
>> --- /dev/null
>> +++ b/arch/arm/mach-rockchip/rk3399/Makefile
>> @@ -0,0 +1,5 @@
>> +#
>> +# Copyright (C) 2016 Rockchip Electronics Co., Ltd
>> +#
>> +# SPDX-License-Identifier:      GPL-2.0+
>> +#
> Needed?
>
>> diff --git a/board/rockchip/evb_rk3399/Kconfig b/board/rockchip/evb_rk3399/Kconfig
>> new file mode 100644
>> index 0000000..412b81c
>> --- /dev/null
>> +++ b/board/rockchip/evb_rk3399/Kconfig
>> @@ -0,0 +1,15 @@
>> +if TARGET_EVB_RK3399
>> +
>> +config SYS_BOARD
>> +	default "evb_rk3399"
>> +
>> +config SYS_VENDOR
>> +	default "rockchip"
>> +
>> +config SYS_CONFIG_NAME
>> +	default "evb_rk3399"
>> +
>> +config BOARD_SPECIFIC_OPTIONS # dummy
>> +	def_bool y
>> +
>> +endif
>> diff --git a/board/rockchip/evb_rk3399/MAINTAINERS b/board/rockchip/evb_rk3399/MAINTAINERS
>> new file mode 100644
>> index 0000000..e69de29
>> diff --git a/board/rockchip/evb_rk3399/Makefile b/board/rockchip/evb_rk3399/Makefile
>> new file mode 100644
>> index 0000000..aaa51c2
>> --- /dev/null
>> +++ b/board/rockchip/evb_rk3399/Makefile
>> @@ -0,0 +1,7 @@
>> +#
>> +# (C) Copyright 2016 Rockchip Electronics Co., Ltd
>> +#
>> +# SPDX-License-Identifier:     GPL-2.0+
>> +#
>> +
>> +obj-y	+= evb-rk3399.o
>> diff --git a/board/rockchip/evb_rk3399/evb-rk3399.c b/board/rockchip/evb_rk3399/evb-rk3399.c
>> new file mode 100644
>> index 0000000..357b08b
>> --- /dev/null
>> +++ b/board/rockchip/evb_rk3399/evb-rk3399.c
>> @@ -0,0 +1,41 @@
>> +/*
>> + * (C) Copyright 2016 Rockchip Electronics Co., Ltd
>> + *
>> + * SPDX-License-Identifier:     GPL-2.0+
>> + */
>> +#include <dm.h>
> Needed? Order/spacing.
>
>> +#include <common.h>
>> +#include <asm/armv8/mmu.h>
>> +
>> +DECLARE_GLOBAL_DATA_PTR;
>> +
>> +static struct mm_region rk3399_mem_map[] = {
>> +	{
>> +		.base = 0x0UL,
>> +		.size = 0x80000000UL,
>> +		.attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
>> +			 PTE_BLOCK_INNER_SHARE
>> +	}, {
>> +		.base = 0xf0000000UL,
>> +		.size = 0x10000000UL,
>> +		.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
>> +			 PTE_BLOCK_NON_SHARE |
>> +			 PTE_BLOCK_PXN | PTE_BLOCK_UXN
>> +	}, {
>> +		/* List terminator */
>> +		0,
>> +	}
>> +};
>> +
>> +struct mm_region *mem_map = rk3399_mem_map;
>> +
>> +int board_init(void)
>> +{
>> +	return 0;
>> +}
>> +
>> +int dram_init(void)
>> +{
>> +	gd->ram_size = 0x80000000;
>> +	return 0;
>> +}
> You'll need to implement dram_init_banksize() to avoid "DRAM: 0 Bytes"?
I doesn't get "DRAM: 0 Bytes", I get "DRAM: 2 GiB"
>
>> diff --git a/include/configs/rk3399_common.h b/include/configs/rk3399_common.h
>> new file mode 100644
>> index 0000000..1c13e2e
>> --- /dev/null
>> +++ b/include/configs/rk3399_common.h
>> @@ -0,0 +1,84 @@
>> +/*
>> + * (C) Copyright 2016 Rockchip Electronics Co., Ltd
>> + *
>> + * SPDX-License-Identifier:     GPL-2.0+
>> + */
>> +
>> +#ifndef __CONFIG_RK3399_COMMON_H
>> +#define __CONFIG_RK3399_COMMON_H
>> +
>> +#define CONFIG_SYS_CACHELINE_SIZE	64
>> +
>> +#include <asm/arch/hardware.h>
>> +
>> +#define CONFIG_SYS_NO_FLASH
>> +#define CONFIG_NR_DRAM_BANKS		1
>> +#define CONFIG_ENV_SIZE			0x2000
>> +#define CONFIG_SYS_MAXARGS		16
>> +#define CONFIG_BAUDRATE			1500000
>> +#define CONFIG_SYS_MALLOC_LEN		(32 << 20)
>> +#define CONFIG_SYS_CBSIZE		1024
>> +#define CONFIG_SKIP_LOWLEVEL_INIT
>> +#define CONFIG_DISPLAY_BOARDINFO
>> +
>> +#define CONFIG_SYS_NS16550
> Please make this a Kconfig selection to avoid confusion.
OK, actually, I want to know how to decide where to put the CONFIG_
MACROs, we have defconfig, common config for soc, and common config
for board.

>
>> +#define CONFIG_SYS_NS16550_MEM32
>> +
>> +#define CONFIG_SYS_TEXT_BASE		0x00200000
>> +#define CONFIG_SYS_INIT_SP_ADDR		0x00300000
>> +#define CONFIG_SYS_LOAD_ADDR		0x00800800
>> +
>> +#define CONFIG_ROCKCHIP_COMMON
> This is defined by other boards, but no one seems to checks it. Suggest
> to drop it here and elsewhere.
Yes, the content for CONFIG_ROCKCHIP_COMMON has been removed,
sot this MACRO is no use now.
>
>> +#define CONFIG_SYS_BOOTM_LEN	(64 << 20)	/* 64M */
>> +
>> +/* MMC/SD IP block */
>> +#define CONFIG_MMC
>> +#define CONFIG_GENERIC_MMC
>> +#define CONFIG_SDHCI
>> +#define CONFIG_BOUNCE_BUFFER
>> +#define CONFIG_ROCKCHIP_SDHCI_MAX_FREQ	200000000
>> +
>> +#define CONFIG_DOS_PARTITION
> This one is selected by config_distro_defaults.h already.
>
>> +#define CONFIG_FAT_WRITE
>> +#define CONFIG_PARTITION_UUIDS
>> +#define CONFIG_CMD_PART
> These two are selected by config_distro_bootcmd.h already.
>
>> +
>> +/* RAW SD card / eMMC locations. */
>> +#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR	256
>> +#define CONFIG_SYS_SPI_U_BOOT_OFFS	(128 << 10)
>> +
>> +/* FAT sd card locations. */
>> +#define CONFIG_SYS_MMCSD_FS_BOOT_PARTITION	1
>> +#define CONFIG_SPL_FS_LOAD_PAYLOAD_NAME		"u-boot.img"
>> +
>> +#define CONFIG_SPL_PINCTRL_SUPPORT
>> +#define CONFIG_SPL_RAM_SUPPORT
>> +#define CONFIG_SPL_DRIVERS_MISC_SUPPORT
> Given that you moved SPL to rk3288, these are quite a few unneeded SPL
> symbols?
>
>> +
>> +#define CONFIG_SYS_SDRAM_BASE		0
>> +#define CONFIG_NR_DRAM_BANKS		1
>> +#define SDRAM_BANK_SIZE			(2UL << 30)
> Move size into evb config? (commit message says up to ~4GB)
> Possibly move banks too or is it always 1?
Rockchip evb is is combined by a mainboard and a daughter board
which daughter board usually including rk3399, DRAM, eMMC, the
DRAM could be 2GB or 4GB. The rk3399 SoC can support up to 4G-128M,
but for U-Boot, we don't actually using so large space, maybe 128MB is 
enough.
So we prefer to using a 2GB config for compatible, which also easy to setup
to MMU table.

Thanks,
- Kever
>
>> +
>> +#define CONFIG_SPI_FLASH
>> +#define CONFIG_SPI
>> +#define CONFIG_SF_DEFAULT_SPEED 20000000
>> +
>> +#ifndef CONFIG_SPL_BUILD
>> +#include <config_distro_defaults.h>
>> +
>> +#define ENV_MEM_LAYOUT_SETTINGS \
>> +	"scriptaddr=0x00000000\0" \
>> +	"pxefile_addr_r=0x00100000\0" \
>> +	"fdt_addr_r=0x01f00000\0" \
>> +	"kernel_addr_r=0x02000000\0" \
>> +	"ramdisk_addr_r=0x04000000\0"
>> +
>> +/* First try to boot from SD (index 0), then eMMC (index 1 */
> ")" missing.
>
>> +#define BOOT_TARGET_DEVICES(func) \
>> +	func(MMC, mmc, 0) \
>> +	func(MMC, mmc, 1)
>> +
>> +#include <config_distro_bootcmd.h>
>> +#endif
>> +
>> +#endif
> Regards,
> Andreas
>




More information about the U-Boot mailing list