From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kever Yang Date: Tue, 19 Jul 2016 21:18:12 +0800 Subject: [U-Boot] [PATCH v3 2/5] ARM64: rockchip: add support for rk3399 SoC based evb-board In-Reply-To: <7f112383-e822-d56f-09cf-2f233f69327a@suse.de> References: <1468572133-27036-1-git-send-email-kever.yang@rock-chips.com> <1468572133-27036-3-git-send-email-kever.yang@rock-chips.com> <578C6107.7090107@rock-chips.com> <7f112383-e822-d56f-09cf-2f233f69327a@suse.de> Message-ID: <578E2894.3020003@rock-chips.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Andreas, On 07/18/2016 10:13 PM, Andreas F?rber wrote: > Hi Kever, > > Am 18.07.2016 um 06:54 schrieb Kever Yang: >> 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 Fixed. >>> >>>> 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" Fixed. >>> >>>> and support address from 0 to 4GB-128MB range. >>>> >>>> Signed-off-by: Kever Yang >>>> --- >>>> >>>> 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. Fixed. >>> >>>> + 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 Fixed. >>> >>>> + 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 Fixed. >>> >>>> + 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. Will fix in V5. >>> >>>> 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? Will fix in V5. >>> >>>> + >>>> +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? Fixed. >>> >>>> 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 >>> Needed? Order/spacing. Fixed. >>> >>>> +#include >>>> +#include >>>> + >>>> +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" > Okay, not sure what the difference between our patches was then. > > But please remember to leave a white line before and after your inline > comments or they are really hard to spot among a huge quote! > > Note that this happens among others in Thunderbird when writing in HTML > mode but sending as text mode. (That's why I force my account to always > use text mode also for composing, which works around that.) > >>>> 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 >>>> + >>>> +#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. > I don't have a definitive answer, but defconfig is per board, so if > something is always needed for the SoC it should go into the > mach-rockchip or rk3399 Kconfig, I think. > > Whether that applies here ... Simon? People add "CONFIG_SYS_NS16550=y" in defconfig, so I will do that too. > >>>> +#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. Fixed >>> >>>> +#define CONFIG_FAT_WRITE >>>> +#define CONFIG_PARTITION_UUIDS >>>> +#define CONFIG_CMD_PART >>> These two are selected by config_distro_bootcmd.h already. Fixed >>> >>>> + >>>> +/* 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? Fixed >>> >>>> + >>>> +#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. > I don't see a problem with configuring less DRAM than available, but it > will become an issue once there are boards or TV boxes with 1 GB or > less. Therefore it's safer to place the SDRAM_BANK_SIZE into the evb's > config to force new boards to set it to a sane value. Moved the SDRAM_BANK_SIZE to evb's config in V5. The CONFIG_NR_DRAM_BANKS is always 1 for Rockchip SoCs. > > How much RAM does the DDR blob enable? If it's more than 128 MB then we What do your mean by "How much RAM does the DDR blob enable?"? Thanks, - Kever > should use the full 2GB or whatever here, since it affects loading of > kernels and operation of EFI applications such as GRUB (which will > allocate from top of RAM). > > Note to self: In my patch I seem not to set SDRAM_BANK_SIZE at all, > which may be why I was seeing "DRAM: 0 Bytes". > > Thanks, > Andreas >