[U-Boot] [PATCH 9/9] ARM: Exynos: Add Exynos5433 based TM2 board support

Lukasz Majewski lukma at denx.de
Wed Nov 21 01:30:33 UTC 2018


On Wed, 07 Nov 2018 16:05:14 +0100
Marek Szyprowski <m.szyprowski at samsung.com> wrote:

General remark - could you run your patches (the whole series) through
the buildman?

./tools/buildman/buildman.py --branch=HEAD samsung --detail --verbose
--show_errors --force-build --count=9 --output-dir=../BUILD/

> This patch adds support for Exynos5433 based TM2 and TM2e boards.
> 
> u-boot is used to load and decompress kernel image or alternatively
> (when 'volume down' button is pressed during boot) provide THOR
> download USB feature for flashing kernel and rootfs images.
> 
> Based on earlier work done by Lukasz Majewski
> <l.majewski at samsung.com>.
> 
> Signed-off-by: Marek Szyprowski <m.szyprowski at samsung.com>
> ---
>  arch/arm/dts/Makefile           |   3 +
>  arch/arm/dts/exynos5433-tm2.dts |  37 ++++++++++
>  arch/arm/mach-exynos/Kconfig    |  14 ++++
>  board/samsung/tm2/Kconfig       |  14 ++++
>  board/samsung/tm2/Makefile      |   8 ++
>  board/samsung/tm2/tm2.c         | 127
> ++++++++++++++++++++++++++++++++ configs/tm2_defconfig           |
> 52 +++++++++++++ include/configs/tm2.h           |  60 +++++++++++++++
>  8 files changed, 315 insertions(+)
>  create mode 100644 arch/arm/dts/exynos5433-tm2.dts
>  create mode 100644 board/samsung/tm2/Kconfig
>  create mode 100644 board/samsung/tm2/Makefile
>  create mode 100644 board/samsung/tm2/tm2.c
>  create mode 100644 configs/tm2_defconfig
>  create mode 100644 include/configs/tm2.h
> 
> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
> index d36447d18d..f8c671589a 100644
> --- a/arch/arm/dts/Makefile
> +++ b/arch/arm/dts/Makefile
> @@ -25,6 +25,9 @@ dtb-$(CONFIG_EXYNOS5) += exynos5250-arndale.dtb \
>  	exynos5800-peach-pi.dtb \
>  	exynos5422-odroidxu3.dtb
>  dtb-$(CONFIG_EXYNOS7420) += exynos7420-espresso7420.dtb
> +
> +dtb-$(CONFIG_TARGET_TM2) += exynos5433-tm2.dtb
> +

Those blank lines could be removed.

>  dtb-$(CONFIG_ARCH_ROCKCHIP) += \
>  	rk3036-sdk.dtb \
>  	rk3128-evb.dtb \
> diff --git a/arch/arm/dts/exynos5433-tm2.dts
> b/arch/arm/dts/exynos5433-tm2.dts new file mode 100644
> index 0000000000..c9b178efdc
> --- /dev/null
> +++ b/arch/arm/dts/exynos5433-tm2.dts
> @@ -0,0 +1,37 @@
> +/*
> + * TM2 device tree source
> + *
> + * Copyright (c) 2018 Samsung Electronics Co., Ltd.
> + *		http://www.samsung.com
> + *
> + * SPDX-License-Identifier:	GPL-2.0+
> + */

If the file is from the Linux kernel - please provide proper SHA1.

> +
> +/dts-v1/;
> +#include "exynos5433.dtsi"
> +
> +/ {
> +	model = "TM2 based on EXYNOS5433";
> +	compatible = "samsung,tm2", "samsung,exynos5433";
> +
> +	aliases {
> +		serial0 = &serial_1;
> +		console = &serial_1;
> +		i2c0 = &i2c;
> +	};
> +
> +	i2c: i2c {
> +		compatible = "i2c-gpio";
> +		gpios = <&gpb0 0 0>,	/* sda */
> +			<&gpb0 1 0>;	/* scl */
> +		i2c-gpio,delay-us = <2>;        /* ~100 kHz */
> +	};
> +};
> +
> +&mmc_0 {
> +	status = "okay";
> +};
> +
> +&serial_1 {
> +	status = "okay";
> +};
> diff --git a/arch/arm/mach-exynos/Kconfig
> b/arch/arm/mach-exynos/Kconfig index 4a49c8dcc2..cf3bed57f3 100644
> --- a/arch/arm/mach-exynos/Kconfig
> +++ b/arch/arm/mach-exynos/Kconfig
> @@ -137,6 +137,19 @@ config TARGET_PEACH_PIT
>  endchoice
>  endif
>  
> +if ARCH_EXYNOS5433
> +
> +choice
> +	prompt "EXYNOS5433 board select"
> +
> +config  TARGET_TM2
> +	bool "TM2 board"
> +	select ARM64
> +	select OF_CONTROL

I do have a feeling that there should be more options added here from
the tm2.h file.

Also please check if the board compiles after enabling CONFIG_BLK (as
it will be enabled by default very soon).

> +
> +endchoice
> +endif
> +
>  if ARCH_EXYNOS7
>  
>  choice
> @@ -168,6 +181,7 @@ source "board/samsung/odroid/Kconfig"
>  source "board/samsung/arndale/Kconfig"
>  source "board/samsung/smdk5250/Kconfig"
>  source "board/samsung/smdk5420/Kconfig"
> +source "board/samsung/tm2/Kconfig"
>  source "board/samsung/espresso7420/Kconfig"
>  
>  config SPL_LDSCRIPT
> diff --git a/board/samsung/tm2/Kconfig b/board/samsung/tm2/Kconfig
> new file mode 100644
> index 0000000000..745faf6a95
> --- /dev/null
> +++ b/board/samsung/tm2/Kconfig
> @@ -0,0 +1,14 @@
> +if TARGET_TM2
> +
> +config SYS_BOARD
> +	default "tm2"
> +	help
> +	  TM2 is Exynos5433 SoC based board, Tizen reference board.
> +
> +config SYS_VENDOR
> +	default "samsung"
> +
> +config SYS_CONFIG_NAME
> +	default "tm2"
> +
> +endif
> diff --git a/board/samsung/tm2/Makefile b/board/samsung/tm2/Makefile
> new file mode 100644
> index 0000000000..53621774dd
> --- /dev/null
> +++ b/board/samsung/tm2/Makefile
> @@ -0,0 +1,8 @@
> +#
> +# Copyright (c) 2016 Samsung Electronics Co., Ltd. All rights
> reserved. +# Lukasz Majewski <l.majewski at samsung.com>

I would not be the only author here :-)

> +#
> +# SPDX-License-Identifier:	GPL-2.0+
> +#
> +
> +obj-y	:= tm2.o
> diff --git a/board/samsung/tm2/tm2.c b/board/samsung/tm2/tm2.c
> new file mode 100644
> index 0000000000..31ec8f5641
> --- /dev/null
> +++ b/board/samsung/tm2/tm2.c
> @@ -0,0 +1,127 @@
> +/*
> + * (C) Copyright 2018 Samsung

Please be consistent with the Copyright in the patch series.
Either it is all added by only Samsung or by its developers.

> + *
> + * SPDX-License-Identifier:	GPL-2.0+
> + */
> +#include <common.h>
> +#include <dm.h>
> +#include <errno.h>
> +#include <malloc.h>
> +#include <dwc3-uboot.h>
> +#include <asm/armv8/mmu.h>
> +#include <asm/arch/dwmmc.h>
> +#include <usb.h>
> +#include <dwc3-uboot.h>
> +#include <asm/arch/cpu.h>
> +#include <asm/arch/power.h>
> +#include <asm/gpio.h>
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +int board_init(void)
> +{
> +	/* start Multi Core Timer to get ARM Architected Timers
> working */
> +	writel(1 << 8, 0x101c0240);

Could it be more verbose - by more comments or define?

> +	return 0;
> +}
> +
> +int dram_init(void)
> +{
> +	gd->ram_size = PHYS_SDRAM_1_SIZE;
> +	return 0;
> +}
> +
> +int dram_init_banksize(void)
> +{
> +	gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
> +	gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
> +	return 0;
> +}

The memory information could be read from DTS

> +
> +unsigned long get_uart_clk(int id)
> +{
> +	return 200000000;
> +}
> +
> +unsigned long get_mmc_clk(int id)
> +{
> +	return 100000000;
> +}
> +
> +unsigned long set_mmc_clk(int id, int div)
> +{
> +	return 0;
> +}
> +
> +unsigned long get_i2c_clk(int id)
> +{
> +	return 66666667;

This shall be read and calculated from the IP block (please provide
in the comment the formula as well).

> +}
> +
> +#ifdef CONFIG_USB_DWC3
> +static struct dwc3_device dwc3_device_data = {
> +	.maximum_speed = USB_SPEED_SUPER,
> +	.base = 0x15400000,
> +	.dr_mode = USB_DR_MODE_PERIPHERAL,
> +	.index = 0,
> +};

IIRC there were floating some patches which were converting the UDC for
dwc3 to driver model (IIRC from Nexell).

> +
> +int usb_gadget_handle_interrupts(void)
> +{
> +	dwc3_uboot_handle_interrupt(0);
> +	return 0;
> +}
> +
> +int board_usb_init(int index, enum usb_init_type init)
> +{
> +	void *base = (void *)0x15500000; /* Exynos5433 DRD PHY */
> +
> +	/* CMU TOP: set SCLK_USBDRD30_RATIO divider to 1 */
> +	writel(0x0007770b, (void *)0x10030634);
> +
> +	/* CMU FSYS: set PHYCLK_USBDRD30_UDRD30_PHYCLOCK and
> +	   PHYCLK_USBDRD30_UDRD30_PIPE_PCLK muxes to 1 */
> +	writel(0x00000011, (void *)0x156e0208);
> +
> +	/* CMU FSYS: enable MUX_SCLK_USBDRD30_USER gate and
> +	   keep other gates enabled */
> +	writel(0x01101001, (void *)0x156e0204);
> +
> +	/* CMU: TOP: set MUX_SCLK_USBDRD30 mux source to pll */
> +	writel(0x00000101, (void *)0x10030234);
> +
> +	/* PMU: bypass USB DEV PHY isolation */
> +	writel(0x00000001, (void *)0x105c0704);
> +

	The above code shall used defines for registers (best matching
	the in-documentation names).
	Please also used (1UL << XX) for setting bits.

> +	/* copied from Linux kernel register dump */
> +	writel(0x0, base + 0x14);
> +	writel(0x0, base + 0x34);
> +	writel(0x8000040, base + 0x4);
> +	writel(0x24d466e4, base + 0x1c);
> +	writel(0x4, base + 0x30);
> +	writel(0x24d466e4, base + 0x1c);
> +	writel(0x3fff81c, base + 0x20);
> +	writel(0x40, base + 0x8);
> +	writel(0x0, base + 0x28);
> +	writel(0xc41805bf, base + 0x10);
> +	udelay(10);
> +	writel(0xc41805bd, base + 0x10);
> +	writel(0x3fff81c, base + 0x20);
> +	writel(0x0, base + 0x28);
> +	writel(0xc41b40bf, base + 0x10);
> +	udelay(10);
> +	writel(0xc41b40bd, base + 0x10);
> +

	Is there any explanation for this "magic" sequence?

> +	return dwc3_uboot_init(&dwc3_device_data);
> +}
> +#endif
> +
> +int checkboard(void)
> +{
> +	const char *board_info;
> +
> +	board_info = fdt_getprop(gd->fdt_blob, 0, "model", NULL);
> +	printf("Board: %s\n", board_info ? board_info : "unknown");
> +
> +	return 0;
> +}
> diff --git a/configs/tm2_defconfig b/configs/tm2_defconfig
> new file mode 100644
> index 0000000000..4080366c97
> --- /dev/null
> +++ b/configs/tm2_defconfig
> @@ -0,0 +1,52 @@
> +CONFIG_ARM=y
> +# CONFIG_ARM64_SUPPORT_AARCH32 is not set
> +CONFIG_ARCH_EXYNOS=y
> +CONFIG_SYS_TEXT_BASE=0x20080000
> +CONFIG_ARCH_EXYNOS5433=y
> +CONFIG_SYS_MALLOC_F_LEN=0x2000
> +CONFIG_IDENT_STRING="\nSamsung Exynos5433 TM2"
> +CONFIG_FIT=y
> +CONFIG_BOOTDELAY=-2
> +CONFIG_SYS_CONSOLE_INFO_QUIET=y
> +# CONFIG_DISPLAY_CPUINFO is not set
> +CONFIG_HUSH_PARSER=y
> +# CONFIG_CMD_CONSOLE is not set
> +# CONFIG_CMD_ELF is not set
> +# CONFIG_CMD_GO is not set
> +CONFIG_CMD_THOR_DOWNLOAD=y
> +# CONFIG_CMD_EXPORTENV is not set
> +# CONFIG_CMD_IMPORTENV is not set
> +# CONFIG_CMD_EDITENV is not set
> +# CONFIG_CMD_SAVEENV is not set
> +# CONFIG_CMD_ENV_EXISTS is not set
> +# CONFIG_CMD_DM is not set
> +# CONFIG_CMD_FLASH is not set
> +CONFIG_CMD_GPIO=y
> +CONFIG_CMD_GPT=y
> +# CONFIG_RANDOM_UUID is not set
> +CONFIG_CMD_I2C=y
> +# CONFIG_CMD_LOADB is not set
> +# CONFIG_CMD_LOADS is not set
> +CONFIG_CMD_MMC=y
> +CONFIG_CMD_PART=y
> +# CONFIG_CMD_SOURCE is not set
> +# CONFIG_CMD_SETEXPR is not set
> +# CONFIG_CMD_NET is not set
> +CONFIG_CMD_FS_GENERIC=y
> +CONFIG_DEFAULT_DEVICE_TREE="exynos5433-tm2"
> +# CONFIG_DM_DEVICE_REMOVE is not set
> +CONFIG_DFU_MMC=y
> +CONFIG_DM_I2C_GPIO=y
> +CONFIG_DM_MMC=y
> +CONFIG_MMC_DW=y
> +CONFIG_USB=y
> +CONFIG_USB_DWC3=y
> +CONFIG_USB_DWC3_GADGET=y
> +CONFIG_USB_GADGET=y
> +CONFIG_USB_GADGET_VENDOR_NUM=0x04e8
> +CONFIG_USB_GADGET_PRODUCT_NUM=0x685D
> +CONFIG_USB_GADGET_DOWNLOAD=y
> +CONFIG_USB_FUNCTION_MASS_STORAGE=y
> +CONFIG_USB_FUNCTION_THOR=y
> +# CONFIG_SYS_WHITE_ON_BLACK is not set
> +# CONFIG_EFI_LOADER is not set
> diff --git a/include/configs/tm2.h b/include/configs/tm2.h
> new file mode 100644
> index 0000000000..ce656b494a
> --- /dev/null
> +++ b/include/configs/tm2.h
> @@ -0,0 +1,60 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright (C) 2018 Samsung Electronics
> + * Marek Szyprowski <m.szyprowski at samsung.com>
> + *
> + * Configuation settings for the Exynos5433 TM2 board.
> + */
> +
> +#ifndef __SAMSUNG_TM2_H
> +#define __SAMSUNG_TM2_H
> +
> +#include <asm/arch/cpu.h>
> +#include <linux/sizes.h>
> +
> +/* High Level Configuration Options */
> +#define CONFIG_SAMSUNG			/* in a SAMSUNG core */
> +#define CONFIG_EXYNOS5433		/* Exynos5433 Family */
> +#define CONFIG_S5P
> +

	Above defines shall be placed in _defconfig file.

> +/* Timer input clock frequency */
> +#define COUNTER_FREQUENCY		24000000

	The same with this.

> +
> +/* SD/MMC configuration */
> +#define CONFIG_BOUNCE_BUFFER
> +
> +/* THOR */
> +#define CONFIG_G_DNL_THOR_VENDOR_NUM
> CONFIG_USB_GADGET_VENDOR_NUM +#define
> CONFIG_G_DNL_THOR_PRODUCT_NUM	0x685D +
> +/* required to avoid build break */
> +#define CONFIG_G_DNL_UMS_VENDOR_NUM
> CONFIG_USB_GADGET_VENDOR_NUM +#define
> CONFIG_G_DNL_UMS_PRODUCT_NUM	0xA4A5 +

Could this be moved to Kconfig?

> +#define PHYS_SDRAM_1			0x20000000
> +#define PHYS_SDRAM_1_SIZE		0xbf700000
> +
> +#define CONFIG_SYS_SDRAM_BASE		PHYS_SDRAM_1
> +#define CONFIG_SYS_INIT_SP_ADDR	(CONFIG_SYS_SDRAM_BASE +
> 0x7fff0) +#define CONFIG_SYS_LOAD_ADDR
> (CONFIG_SYS_SDRAM_BASE + 0x80000) +
> +/* Size of malloc() pool */
> +#define CONFIG_SYS_MALLOC_LEN		(80 << 20)
> +#define CONFIG_SYS_BOOTM_LEN		(130 << 20)
> +

IIRC above defines could be specified in the Kconfig
(Also please use SZ1M* instead of << 20).

> +/* Initial environment variables */
> +#define CONFIG_BOOTCOMMAND		"run modedetect"

BOOTCOMMAND can be specified in Kconfig.

> +#define CONFIG_EXTRA_ENV_SETTINGS	"dfu_alt_info=kernel part 0
> 9 offset 0x400;rootfs part 0 18;system-data part 0 19;user part 0
> 21\0" \
> +					"modedetect=if gpio input
> gpa21 || itest.l *0x105c080c == 0x12345671; then run download; else
> run bootkernel; fi; reset\0" \
> +					"fdt_high=0xffffffffffffffff\0"
> \
> +					"bootargs=console=ttySAC1,115200
> earlycon=exynos4210,0x14C20000 ess_setup=0x26000000 loglevel=7
> root=/dev/mmcblk0p18 rootfstype=ext4 rootwait\0" \
> +					"bootkernel=echo Booting
> kernel; run boarddetect; run loadkernel; bootm 0x30080000#$board\0" \
> +					"boarddetect=if itest.l
> *0x138000b4 == 0x0063f9ff; then setenv board tm2e; elif itest.l
> *0x138000b4 == 0x0059f9ff; then setenv board tm2; else setenv board
> unknown; fi; echo Detected $board board\0" \
> +					"loadkernel=part start mmc 0
> 9 kernel_sect; part size mmc 0 9 kernel_size; mmc read 0x30000000
> $kernel_sect $kernel_size\0" \
> +					"muicsetusb=i2c dev 0; i2c
> mw 25 c 9; i2c mw 25 d 3b; i2c mw 25 e 05; i2c mw 25 16 10\0" \
> +					"displayimg=unzip 200d0000
> 67000000; mw.l 138000b4 0059f9ff; mw.l 138001a0 67e10000; mw.l
> 13800200 00001680; mw.l 13801410 1; mw.l 13802040 e0000018; sleep 1;
> mw.l 13802040 e0000008\0" \
> +					"download=echo Thor mode
> enabled; run muicsetusb; run displayimg; mw.l 0x105c080c 0; thor 0
> mmc 0\0" + +#define CONFIG_ENV_SIZE			0x1000

This can be also specified in Kconfig.

> +
> +#endif /* __SAMSUNG_TM2_H */

To sum up - It seems like those patches are mostly from 2016. Since
then many CONFIG_* options were moved to Kconfig.


Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20181121/4f98e98d/attachment.sig>


More information about the U-Boot mailing list