[U-Boot] [PATCH v5 17/21] rockchip: rk3036: Add core Soc start-up code

Simon Glass sjg at chromium.org
Fri Nov 13 19:13:47 CET 2015


Hi Lin,

On 10 November 2015 at 03:24, Lin Huang <hl at rock-chips.com> wrote:
> rk3036 only 4K size SRAM for SPL, so only support
> timer, uart, sdram driver in SPL stage, when finish
> initial sdram, back to bootrom.And in rk3036 sdmmc and
> debug uart use same iomux, so if you want to boot from
> sdmmc, you must disable debug uart.
>
> Signed-off-by: Lin Huang <hl at rock-chips.com>
> ---
> Changes in v1:
> - clean copyright announcement
> Changes in v2:
> - support SPL
> Changes in v3:
> - delete DEBUG_UART config
> - modify ENV_MEM_LAYOUT_SETTINGS config
> Changes in v4:
> - delete some unuse config advice by Sjoerd Simons
> Changes in v5:
> - use CONFIG_DWMMC
>
>  arch/arm/mach-rockchip/Kconfig                  |  10 ++-
>  arch/arm/mach-rockchip/Makefile                 |   4 +-
>  arch/arm/mach-rockchip/board.c                  |   1 +
>  arch/arm/mach-rockchip/rk3036-board-spl.c       |  53 ++++++++++++
>  arch/arm/mach-rockchip/rk3036/Kconfig           |  17 ++++
>  arch/arm/mach-rockchip/rk3036/Makefile          |   1 +
>  arch/arm/mach-rockchip/rk3036/save_boot_param.S |  34 ++++++++
>  include/configs/rk3036_common.h                 | 103 ++++++++++++++++++++++++
>  8 files changed, 221 insertions(+), 2 deletions(-)
>  create mode 100644 arch/arm/mach-rockchip/rk3036-board-spl.c
>  create mode 100644 arch/arm/mach-rockchip/rk3036/Kconfig
>  create mode 100644 arch/arm/mach-rockchip/rk3036/save_boot_param.S
>  create mode 100644 include/configs/rk3036_common.h

Acked-by: Simon Glass <sjg at chromium.org>

Some nits below.

>
> diff --git a/arch/arm/mach-rockchip/Kconfig b/arch/arm/mach-rockchip/Kconfig
> index da665ef..6b608db 100644
> --- a/arch/arm/mach-rockchip/Kconfig
> +++ b/arch/arm/mach-rockchip/Kconfig
> @@ -9,6 +9,14 @@ config ROCKCHIP_RK3288
>           and video codec support. Peripherals include Gigabit Ethernet,
>           USB2 host and OTG, SDIO, I2S, UART,s, SPI, I2C and PWMs.
>
> +config ROCKCHIP_RK3036
> +       bool "Support Rockchip RK3036"
> +       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 SYS_MALLOC_F
>         default y
>
> @@ -34,5 +42,5 @@ config ROCKCHIP_SERIAL
>         default y
>
>  source "arch/arm/mach-rockchip/rk3288/Kconfig"
> -
> +source "arch/arm/mach-rockchip/rk3036/Kconfig"
>  endif
> diff --git a/arch/arm/mach-rockchip/Makefile b/arch/arm/mach-rockchip/Makefile
> index a29675d..b703c3c 100644
> --- a/arch/arm/mach-rockchip/Makefile
> +++ b/arch/arm/mach-rockchip/Makefile
> @@ -6,10 +6,12 @@
>
>  ifdef CONFIG_SPL_BUILD
>  obj-$(CONFIG_ROCKCHIP_RK3288) += rk3288-board-spl.o
> +obj-$(CONFIG_ROCKCHIP_RK3036) += rk3036-board-spl.o
>  else
> -obj-y += board.o
> +obj-$(CONFIG_ROCKCHIP_RK3288) += board.o
>  endif
>  obj-y += rk_timer.o
>  obj-y += rk_early_print.o
>  obj-$(CONFIG_$(SPL_)ROCKCHIP_COMMON) += common.o
>  obj-$(CONFIG_ROCKCHIP_RK3288) += rk3288/
> +obj-$(CONFIG_ROCKCHIP_RK3036) += rk3036/
> diff --git a/arch/arm/mach-rockchip/board.c b/arch/arm/mach-rockchip/board.c
> index 688bc0f..d7a8312 100644
> --- a/arch/arm/mach-rockchip/board.c
> +++ b/arch/arm/mach-rockchip/board.c
> @@ -4,6 +4,7 @@
>   * SPDX-License-Identifier:     GPL-2.0+
>   */
>
> +#include <asm/io.h>

Please put this at the bottom of the list.

>  #include <common.h>
>  #include <dm.h>
>  #include <ram.h>
> diff --git a/arch/arm/mach-rockchip/rk3036-board-spl.c b/arch/arm/mach-rockchip/rk3036-board-spl.c
> new file mode 100644
> index 0000000..731ee87
> --- /dev/null
> +++ b/arch/arm/mach-rockchip/rk3036-board-spl.c
> @@ -0,0 +1,53 @@
> +/*
> + * (C) Copyright 2015 Rockchip Electronics Co., Ltd
> + *
> + * SPDX-License-Identifier:     GPL-2.0+
> + */
> +
> +#include <asm/arch/grf_rk3036.h>
> +#include <asm/arch/hardware.h>
> +#include <asm/arch/sdram_rk3036.h>
> +#include <asm/arch/timer.h>
> +#include <asm/arch/uart.h>
> +#include <asm/io.h>
> +#include <common.h>

common.h should always go first.

> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +#define GRF_BASE       0x20008000
> +static struct rk3036_grf * const grf = (void *)GRF_BASE;
> +
> +#define DEBUG_UART_BASE        0x20068000
> +
> +extern void back_to_bootrom(void);
> +
> +void board_init_f(ulong dummy)
> +{
> +       #ifdef EARLY_DEBUG

Put this #ifdef and the #endif at the start of the line. They should
not be indented.

> +       /*
> +        * NOTE: sd card and debug uart use same iomux in rk3036,
> +        * so if you enable uart,
> +        * you can not boot from sdcard
> +        */
> +       rk_clrsetreg(&grf->gpio1c_iomux,
> +                    GPIO1C3_MASK << GPIO1C3_SHIFT |
> +                    GPIO1C2_MASK << GPIO1C2_SHIFT,
> +                    GPIO1C3_UART2_SOUT << GPIO1C3_SHIFT |
> +                    GPIO1C2_UART2_SIN << GPIO1C2_SHIFT);
> +       rk_uart_init((void *)DEBUG_UART_BASE);
> +       #endif
> +       rockchip_timer_init();
> +       sdram_init();
> +
> +       /* return to maskrom */
> +       back_to_bootrom();
> +}
> +
> +/* Place Holders */
> +void board_init_r(gd_t *id, ulong dest_addr)
> +{
> +       /* Function attribute is no-return */
> +       /* This Function never executes */

/*
 * Function attribute...
 * ...
 */

> +       while (1)
> +               ;
> +}
> diff --git a/arch/arm/mach-rockchip/rk3036/Kconfig b/arch/arm/mach-rockchip/rk3036/Kconfig
> new file mode 100644
> index 0000000..0fbc58e
> --- /dev/null
> +++ b/arch/arm/mach-rockchip/rk3036/Kconfig
> @@ -0,0 +1,17 @@
> +if ROCKCHIP_RK3036
> +
> +config TARGET_EVB_RK3036
> +       bool "EVB_RK3036"
> +
> +config SYS_SOC
> +       default "rockchip"
> +
> +config SYS_MALLOC_F_LEN
> +       default 0x400
> +
> +config ROCKCHIP_COMMON
> +       bool "Support rk common fuction"
> +
> +source "board/evb_rk3036/evb_rk3036/Kconfig"
> +
> +endif
> diff --git a/arch/arm/mach-rockchip/rk3036/Makefile b/arch/arm/mach-rockchip/rk3036/Makefile
> index 6095777..97d299d 100644
> --- a/arch/arm/mach-rockchip/rk3036/Makefile
> +++ b/arch/arm/mach-rockchip/rk3036/Makefile
> @@ -10,3 +10,4 @@ obj-y += syscon_rk3036.o
>  endif
>
>  obj-y += sdram_rk3036.o
> +obj-y += save_boot_param.o
> diff --git a/arch/arm/mach-rockchip/rk3036/save_boot_param.S b/arch/arm/mach-rockchip/rk3036/save_boot_param.S
> new file mode 100644
> index 0000000..996f9af
> --- /dev/null
> +++ b/arch/arm/mach-rockchip/rk3036/save_boot_param.S
> @@ -0,0 +1,34 @@
> +/*
> + * (C) Copyright 2015 Google, Inc
> + *
> + * SPDX-License-Identifier:     GPL-2.0+
> + */
> +
> +#include <linux/linkage.h>
> +
> +.globl SAVE_SP_ADDR
> +SAVE_SP_ADDR:
> +       .word 0
> +
> +/*************************************************************************
> + *
> + * void save_boot_params
> + *
> + * Save sp, lr, r1~r12
> + *
> + *************************************************************************/

Drop the stars...

/*
 * void save_boot_params()
 *
 * Save ...
 */

> +ENTRY(save_boot_params)
> +       push    {r1-r12, lr}
> +       ldr     r0, =SAVE_SP_ADDR
> +       str     sp, [r0]
> +       b       save_boot_params_ret            @ back to my caller
> +ENDPROC(save_boot_params)
> +
> +
> +.globl back_to_bootrom
> +ENTRY(back_to_bootrom)
> +       ldr     r0, =SAVE_SP_ADDR
> +       ldr     sp, [r0]
> +       mov     r0, #0
> +       pop     {r1-r12, pc}
> +ENDPROC(back_to_bootrom)
> diff --git a/include/configs/rk3036_common.h b/include/configs/rk3036_common.h
> new file mode 100644
> index 0000000..92b6119
> --- /dev/null
> +++ b/include/configs/rk3036_common.h
> @@ -0,0 +1,103 @@
> +/*
> + * (C) Copyright 2015 Rockchip Electronics Co., Ltd
> + *
> + * SPDX-License-Identifier:     GPL-2.0+
> + */
> +#ifndef __CONFIG_RK3036_COMMON_H
> +#define __CONFIG_RK3036_COMMON_H
> +
> +#include <asm/arch/hardware.h>
> +
> +#define CONFIG_SYS_NO_FLASH
> +#define CONFIG_NR_DRAM_BANKS           1
> +#define CONFIG_ENV_IS_NOWHERE
> +#define CONFIG_ENV_SIZE                        0x2000
> +#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_SYS_THUMB_BUILD
> +#define CONFIG_DISPLAY_BOARDINFO
> +
> +#define CONFIG_SYS_TIMER_RATE          (24 * 1000 * 1000)
> +#define CONFIG_SYS_TIMER_BASE          0x200440a0 /* TIMER5 */
> +#define CONFIG_SYS_TIMER_COUNTER       (CONFIG_SYS_TIMER_BASE + 8)
> +
> +#define CONFIG_SYS_NS16550
> +#define CONFIG_SYS_NS16550_MEM32
> +
> +#ifdef CONFIG_SPL_BUILD
> +#define CONFIG_SYS_MALLOC_SIMPLE
> +#endif
> +
> +#define CONFIG_SYS_TEXT_BASE           0x60000000
> +#define CONFIG_SYS_INIT_SP_ADDR                0x60100000
> +#define CONFIG_SYS_LOAD_ADDR           0x60800800
> +#define CONFIG_SPL_STACK               0x10081fff
> +#define CONFIG_SPL_TEXT_BASE           0x10081004
> +
> +#define CONFIG_ROCKCHIP_MAX_INIT_SIZE  (4 << 10)
> +#define CONFIG_ROCKCHIP_CHIP_TAG       "RK30"
> +
> +#define CONFIG_ROCKCHIP_COMMON
> +
> +/* MMC/SD IP block */
> +#define CONFIG_MMC
> +#define CONFIG_GENERIC_MMC
> +#define CONFIG_CMD_MMC
> +#define CONFIG_SDHCI
> +#define CONFIG_DWMMC
> +#define CONFIG_BOUNCE_BUFFER
> +
> +#define CONFIG_DOS_PARTITION
> +#define CONFIG_CMD_FAT
> +#define CONFIG_FAT_WRITE
> +#define CONFIG_CMD_EXT2
> +#define CONFIG_CMD_EXT4
> +#define CONFIG_CMD_FS_GENERIC
> +#define CONFIG_PARTITION_UUIDS
> +#define CONFIG_CMD_PART
> +
> +#define CONFIG_CMD_CACHE
> +#define CONFIG_CMD_TIME
> +
> +#define CONFIG_SYS_SDRAM_BASE          0x60000000
> +#define CONFIG_NR_DRAM_BANKS           1
> +#define SDRAM_BANK_SIZE                        (512UL << 20UL)
> +
> +#define CONFIG_SPI_FLASH
> +#define CONFIG_SPI
> +#define CONFIG_CMD_SF
> +#define CONFIG_CMD_SPI
> +#define CONFIG_SPI_FLASH_GIGADEVICE
> +#define CONFIG_SF_DEFAULT_SPEED 20000000
> +
> +#define CONFIG_CMD_I2C
> +
> +#ifndef CONFIG_SPL_BUILD
> +#include <config_distro_defaults.h>
> +
> +#define ENV_MEM_LAYOUT_SETTINGS \
> +       "scriptaddr=0x60000000\0" \
> +       "pxefile_addr_r=0x60100000\0" \
> +       "fdt_addr_r=0x61f00000\0" \
> +       "kernel_addr_r=0x62000000\0" \
> +       "ramdisk_addr_r=0x64000000\0"
> +
> +/* First try to boot from SD (index 0), then eMMC (index 1 */
> +#define BOOT_TARGET_DEVICES(func) \
> +       func(MMC, mmc, 0) \
> +       func(MMC, mmc, 1)
> +
> +#include <config_distro_bootcmd.h>
> +
> +/* Linux fails to load the fdt if it's loaded above 512M on a evb-rk3036 board, so
> + * limit the fdt reallocation to that */
> +#define CONFIG_EXTRA_ENV_SETTINGS \
> +       "fdt_high=0x7fffffff\0" \
> +       ENV_MEM_LAYOUT_SETTINGS \
> +       BOOTENV
> +#endif
> +
> +#endif
> --
> 1.9.1
>

Regards,
Simon


More information about the U-Boot mailing list