[U-Boot] [PATCH 2/2] ARM64: rockchip: Add initial support for RK3368 based GeekBox
Andreas Färber
afaerber at suse.de
Mon Jul 18 03:22:12 CEST 2016
Am 18.07.2016 um 03:06 schrieb Andreas Färber:
> The RK3368 is an octa-core Cortex-A53 SoC from Rockchip.
>
> The GeekBox is a TV box from GeekBuying, based on an MXM3 module.
> The module can be used with base boards such as the GeekBox Landingship.
>
> This adds basic support to chain-load U-Boot from Rockchip's miniloader.
>
> $ ./lollipop_u-boot/tools/loaderimage --pack u-boot.bin u-boot.img
> # ./utils/upgrade_tool di uboot u-boot.img
>
> Implemented is the serial console, but no boot media drivers yet.
>
> Note that flashing the resulting U-Boot will not allow you to enter the
> rockusb mode any more via "Update" button. Instead, you will need to
> short two pins on the bottom of the module to enter MaskRom mode and
> re-flash the loader:
>
> # ./utils/upgrade_tool ul ./lollipop_u-boot/RK3368MiniLoaderAll_V2.40.bin
> # ./utils/upgrade_tool di uboot u-boot.img
>
> Signed-off-by: Andreas Färber <afaerber at suse.de>
> ---
> arch/arm/Kconfig | 4 ---
> arch/arm/dts/rk3368.dtsi | 1 +
> arch/arm/mach-rockchip/Kconfig | 14 ++++++++++
> arch/arm/mach-rockchip/Makefile | 1 +
> arch/arm/mach-rockchip/rk3368/Kconfig | 14 ++++++++++
> arch/arm/mach-rockchip/rk3368/Makefile | 7 +++++
> arch/arm/mach-rockchip/rk3368/rk3368.c | 28 ++++++++++++++++++++
> board/geekbuying/geekbox/Kconfig | 15 +++++++++++
> board/geekbuying/geekbox/Makefile | 7 +++++
> board/geekbuying/geekbox/geekbox.c | 26 +++++++++++++++++++
> configs/geekbox_defconfig | 20 +++++++++++++++
> include/configs/geekbox.h | 19 ++++++++++++++
> include/configs/rk3368_common.h | 47 ++++++++++++++++++++++++++++++++++
> 13 files changed, 199 insertions(+), 4 deletions(-)
> create mode 100644 arch/arm/mach-rockchip/rk3368/Kconfig
> create mode 100644 arch/arm/mach-rockchip/rk3368/Makefile
> create mode 100644 arch/arm/mach-rockchip/rk3368/rk3368.c
> create mode 100644 board/geekbuying/geekbox/Kconfig
> create mode 100644 board/geekbuying/geekbox/Makefile
> create mode 100644 board/geekbuying/geekbox/geekbox.c
> create mode 100644 configs/geekbox_defconfig
> create mode 100644 include/configs/geekbox.h
> create mode 100644 include/configs/rk3368_common.h
>
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index f9fddad..4ff1a26 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -838,14 +838,10 @@ config STM32
>
> config ARCH_ROCKCHIP
> bool "Support Rockchip SoCs"
> - select SUPPORT_SPL
> - select SPL
> select OF_CONTROL
> select BLK
> select DM
> - select SPL_DM
> select SYS_MALLOC_F
> - select SPL_SYS_MALLOC_SIMPLE
> select DM_GPIO
> select DM_I2C
> select DM_MMC
> diff --git a/arch/arm/dts/rk3368.dtsi b/arch/arm/dts/rk3368.dtsi
> index 8b4a7c9..3ab7edc 100644
> --- a/arch/arm/dts/rk3368.dtsi
> +++ b/arch/arm/dts/rk3368.dtsi
> @@ -609,6 +609,7 @@
> uart2: serial at ff690000 {
> compatible = "rockchip,rk3368-uart", "snps,dw-apb-uart";
> reg = <0x0 0xff690000 0x0 0x100>;
> + clock-frequency = <24000000>;
> clocks = <&cru SCLK_UART2>, <&cru PCLK_UART2>;
> clock-names = "baudclk", "apb_pclk";
> interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>;
> diff --git a/arch/arm/mach-rockchip/Kconfig b/arch/arm/mach-rockchip/Kconfig
> index 86b77f8..597f043 100644
> --- a/arch/arm/mach-rockchip/Kconfig
> +++ b/arch/arm/mach-rockchip/Kconfig
> @@ -3,6 +3,10 @@ if ARCH_ROCKCHIP
> config ROCKCHIP_RK3288
> bool "Support Rockchip RK3288"
> select CPU_V7
> + select SUPPORT_SPL
> + select SPL
> + select SPL_DM
> + select SPL_SYS_MALLOC_SIMPLE
> help
> The Rockchip RK3288 is a ARM-based SoC with a quad-core Cortex-A17
> including NEON and GPU, 1MB L2 cache, Mali-T7 graphics, two
> @@ -13,12 +17,21 @@ config ROCKCHIP_RK3288
> config ROCKCHIP_RK3036
> bool "Support Rockchip RK3036"
> select CPU_V7
> + select SUPPORT_SPL
> + select SPL
> + select SPL_DM
> + select SPL_SYS_MALLOC_SIMPLE
> help
> The Rockchip RK3036 is a ARM-based SoC with a dual-core Cortex-A7
> 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.
>
> +config ROCKCHIP_RK3368
> + bool "Support Rockchip RK3368"
> + select ARM64
> + select SYS_NS16550
> +
> config ROCKCHIP_SPL_BACK_TO_BROM
> bool "SPL returns to bootrom"
> default y if ROCKCHIP_RK3036
> @@ -29,4 +42,5 @@ config ROCKCHIP_SPL_BACK_TO_BROM
>
> source "arch/arm/mach-rockchip/rk3288/Kconfig"
> source "arch/arm/mach-rockchip/rk3036/Kconfig"
> +source "arch/arm/mach-rockchip/rk3368/Kconfig"
> endif
> diff --git a/arch/arm/mach-rockchip/Makefile b/arch/arm/mach-rockchip/Makefile
> index 6763af4..48e78c1 100644
> --- a/arch/arm/mach-rockchip/Makefile
> +++ b/arch/arm/mach-rockchip/Makefile
> @@ -16,3 +16,4 @@ obj-y += rk_timer.o
> endif
> obj-$(CONFIG_ROCKCHIP_RK3288) += rk3288/
> obj-$(CONFIG_ROCKCHIP_RK3036) += rk3036/
> +obj-$(CONFIG_ROCKCHIP_RK3368) += rk3368/
> diff --git a/arch/arm/mach-rockchip/rk3368/Kconfig b/arch/arm/mach-rockchip/rk3368/Kconfig
> new file mode 100644
> index 0000000..5f2cd53
> --- /dev/null
> +++ b/arch/arm/mach-rockchip/rk3368/Kconfig
> @@ -0,0 +1,14 @@
> +if ROCKCHIP_RK3368
> +
> +config TARGET_GEEKBOX
> + bool "GeekBox"
> +
> +config SYS_SOC
> + default "rockchip"
> +
> +config SYS_MALLOC_F_LEN
> + default 0x0800
> +
> +source "board/geekbuying/geekbox/Kconfig"
> +
> +endif
> diff --git a/arch/arm/mach-rockchip/rk3368/Makefile b/arch/arm/mach-rockchip/rk3368/Makefile
> new file mode 100644
> index 0000000..3e20498
> --- /dev/null
> +++ b/arch/arm/mach-rockchip/rk3368/Makefile
> @@ -0,0 +1,7 @@
> +#
> +# Copyright (c) 2016 Andreas Färber
> +#
> +# SPDX-License-Identifier: GPL-2.0+
> +#
> +
> +obj-y += rk3368.o
> diff --git a/arch/arm/mach-rockchip/rk3368/rk3368.c b/arch/arm/mach-rockchip/rk3368/rk3368.c
> new file mode 100644
> index 0000000..dd34fed
> --- /dev/null
> +++ b/arch/arm/mach-rockchip/rk3368/rk3368.c
> @@ -0,0 +1,28 @@
> +/*
> + * Copyright (c) 2016 Andreas Färber
Copied from rk3399, should reproduce Rockchip copyright.
> + *
> + * SPDX-License-Identifier: GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <asm/armv8/mmu.h>
> +
> +static struct mm_region rk3368_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 = rk3368_mem_map;
> diff --git a/board/geekbuying/geekbox/Kconfig b/board/geekbuying/geekbox/Kconfig
> new file mode 100644
> index 0000000..41aa8fb
> --- /dev/null
> +++ b/board/geekbuying/geekbox/Kconfig
> @@ -0,0 +1,15 @@
> +if TARGET_GEEKBOX
> +
> +config SYS_BOARD
> + default "geekbox"
> +
> +config SYS_VENDOR
> + default "geekbuying"
> +
> +config SYS_CONFIG_NAME
> + default "geekbox"
> +
> +config BOARD_SPECIFIC_OPTIONS # dummy
> + def_bool y
> +
> +endif
> diff --git a/board/geekbuying/geekbox/Makefile b/board/geekbuying/geekbox/Makefile
> new file mode 100644
> index 0000000..5c1d66c
> --- /dev/null
> +++ b/board/geekbuying/geekbox/Makefile
> @@ -0,0 +1,7 @@
> +#
> +# Copyright (c) 2016 Andreas Färber
> +#
> +# SPDX-License-Identifier: GPL-2.0+
> +#
> +
> +obj-y += geekbox.o
> diff --git a/board/geekbuying/geekbox/geekbox.c b/board/geekbuying/geekbox/geekbox.c
> new file mode 100644
> index 0000000..4a9c4ff
> --- /dev/null
> +++ b/board/geekbuying/geekbox/geekbox.c
> @@ -0,0 +1,26 @@
> +/*
> + * Copyright (c) 2016 Andreas Färber
> + *
> + * SPDX-License-Identifier: GPL-2.0+
> + */
> +
> +#include <common.h>
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +int board_init(void)
> +{
> + return 0;
> +}
> +
> +int dram_init(void)
> +{
> + gd->ram_size = 0x80000000;
> + return 0;
> +}
> +
> +void dram_init_banksize(void)
> +{
> + gd->bd->bi_dram[0].start = 0;
> + gd->bd->bi_dram[0].size = 0x80000000;
> +}
> diff --git a/configs/geekbox_defconfig b/configs/geekbox_defconfig
> new file mode 100644
> index 0000000..6e82c22
> --- /dev/null
> +++ b/configs/geekbox_defconfig
> @@ -0,0 +1,20 @@
> +CONFIG_ARM=y
> +CONFIG_ARCH_ROCKCHIP=y
> +CONFIG_ROCKCHIP_RK3368=y
> +CONFIG_TARGET_GEEKBOX=y
> +CONFIG_DEFAULT_DEVICE_TREE="rk3368-geekbox"
> +CONFIG_HUSH_PARSER=y
> +# CONFIG_CMD_IMLS is not set
> +CONFIG_REGMAP=y
> +CONFIG_SYSCON=y
> +CONFIG_CLK=y
> +CONFIG_SYSRESET=y
> +CONFIG_PINCTRL=y
> +CONFIG_RAM=y
Not all of these may actually be necessary? Ditto for rk3399.
> +CONFIG_DEBUG_UART=y
> +CONFIG_DEBUG_UART_BASE=0xFF690000
> +CONFIG_DEBUG_UART_CLOCK=24000000
> +CONFIG_DEBUG_UART_SHIFT=2
> +CONFIG_DEBUG_UART_ANNOUNCE=y
This one didn't work and should be dropped anyway.
> +CONFIG_DEBUG_UART_SKIP_INIT=y
> +CONFIG_ERRNO_STR=y
> diff --git a/include/configs/geekbox.h b/include/configs/geekbox.h
> new file mode 100644
> index 0000000..47490f1
> --- /dev/null
> +++ b/include/configs/geekbox.h
> @@ -0,0 +1,19 @@
> +/*
> + * Copyright (c) 2016 Andreas Färber
> + *
> + * SPDX-License-Identifier: GPL-2.0+
> + */
> +
> +#ifndef __CONFIGS_GEEKBOX_H
> +#define __CONFIGS_GEEKBOX_H
> +
> +#include <configs/rk3368_common.h>
> +
> +#define CONFIG_ENV_IS_NOWHERE
> +#define CONFIG_ENV_SIZE 0x2000
> +#define CONFIG_SYS_NO_FLASH
> +
> +#define CONFIG_SYS_WHITE_ON_BLACK
> +#define CONFIG_CONSOLE_SCROLL_LINES 10
> +
> +#endif
> diff --git a/include/configs/rk3368_common.h b/include/configs/rk3368_common.h
> new file mode 100644
> index 0000000..27ff1b9
> --- /dev/null
> +++ b/include/configs/rk3368_common.h
> @@ -0,0 +1,47 @@
> +/*
> + * Copyright (c) 2016 Andreas Färber
> + *
> + * SPDX-License-Identifier: GPL-2.0+
> + */
> +
> +#ifndef __CONFIG_RK3368_COMMON_H
> +#define __CONFIG_RK3368_COMMON_H
> +
> +#define CONFIG_SYS_CACHELINE_SIZE 64
> +
> +#include <asm/arch/hardware.h>
> +#include <linux/sizes.h>
> +
> +#define CONFIG_NR_DRAM_BANKS 1
> +#define CONFIG_SYS_MAXARGS 16
> +#define CONFIG_BAUDRATE 115200
> +#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
Leftover, replaced by Kconfig.
> +#define CONFIG_SYS_NS16550_MEM32
> +
> +#ifdef CONFIG_SPL_BUILD
> +#define CONFIG_SYS_TEXT_BASE 0x00000000
> +#else
> +#define CONFIG_SYS_TEXT_BASE 0x00200000
> +#endif
> +#define CONFIG_SYS_INIT_SP_ADDR 0x00300000
> +#define CONFIG_SYS_LOAD_ADDR 0x00800800
> +
> +#ifndef CONFIG_SPL_BUILD
> +
> +#include <config_distro_defaults.h>
> +
> +#define BOOT_TARGET_DEVICES(func)
> +
> +#include <config_distro_bootcmd.h>
> +
> +#define CONFIG_EXTRA_ENV_SETTINGS \
> + BOOTENV
> +
> +#endif
> +
> +#endif
Regards,
Andreas
--
SUSE Linux GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
More information about the U-Boot
mailing list