[U-Boot] [PATCH] Request to submit the phytium platform to the uboot.

Heinrich Schuchardt xypron.glpk at gmx.de
Tue Oct 8 05:25:23 UTC 2019


On 10/8/19 4:58 AM, liuhao wrote:

When creating the commit your forgot to leave an empty line between the
subject line and the rest of the commit message.

The commit subject and text should allow merging without further
editing. It is sufficient that your commit subject and message describe
the change, e.g:


arm: add initial support for the Phytium FT2004 SoC

This adds platform code and the device tree for the Phytium FT2004 SoC.
The initial support comprises the UART and the GMAC.


See further comments below.

> Signed-off-by: liuhao <liuhao at phytium.com.cn>
> ---
>   MAINTAINERS                      |  6 +++
>   arch/arm/Kconfig                 |  8 ++++
>   arch/arm/dts/Makefile            |  2 +
>   arch/arm/dts/phytium-ft2004.dts  | 33 ++++++++++++++
>   board/phytium/ft2004/Kconfig     | 12 +++++
>   board/phytium/ft2004/MAINTAINERS |  8 ++++
>   board/phytium/ft2004/Makefile    |  9 ++++
>   board/phytium/ft2004/cpu.h       | 23 ++++++++++
>   board/phytium/ft2004/ft2004.c    | 96 ++++++++++++++++++++++++++++++++++++++++
>   configs/ft2004_defconfig         | 33 ++++++++++++++
>   include/configs/ft2004.h         | 31 +++++++++++++
>   11 files changed, 261 insertions(+)
>   create mode 100644 arch/arm//dts/phytium-ft2004.dts
>   create mode 100644 board/phytium/ft2004/Kconfig
>   create mode 100644 board/phytium/ft2004/MAINTAINERS
>   create mode 100644 board/phytium/ft2004/Makefile
>   create mode 100644 board/phytium/ft2004/cpu.h
>   create mode 100644 board/phytium/ft2004/ft2004.c
>   create mode 100644 configs/ft2004_defconfig
>   create mode 100644 include/configs/ft2004.h
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index bc67c49..f5fb65f 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -427,6 +427,12 @@ S:	Maintained
>   T:	git https://gitlab.denx.de/u-boot/custodians/u-boot-microblaze.git
>   F:	arch/arm/mach-zynqmp-r5/
>
> +ARM PHYTIUM
> +M:	liuhao <liuhao at phytium.com.cn>
> +M:	shuyiqi <shuyiqi at phytium.com.cn>
> +S:	Maintained
> +F:	arch/arm/dts/phytium-ft2004.dts

Defining ARM PHYTIUM in two places is not necessary. You can add this
file to board/phytium/ft2004/MAINTAINERS.

> +
>   BINMAN
>   M:	Simon Glass <sjg at chromium.org>
>   S:	Maintained
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index 51d4ace..2c5a279 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -1044,6 +1044,13 @@ config TEGRA
>   	imply DISTRO_DEFAULTS
>   	imply FAT_WRITE
>
> +config TARGET_FT2004
> +	bool "Support Phytium FT2004 Platform"
> +	select ARM64
> +	help
> +		Support for FT2004 platform.
> +		It has 1GB Sdram, uart and gmac.
> +
>   config TARGET_VEXPRESS64_AEMV8A
>   	bool "Support vexpress_aemv8a"
>   	select ARM64
> @@ -1718,6 +1725,7 @@ source "arch/arm/cpu/armv8/Kconfig"
>
>   source "arch/arm/mach-imx/Kconfig"
>
> +source "board/phytium/ft2004/Kconfig"
>   source "board/bosch/shc/Kconfig"
>   source "board/bosch/guardian/Kconfig"
>   source "board/CarMediaLab/flea3/Kconfig"
> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
> index f553507..f2e3e53 100644
> --- a/arch/arm/dts/Makefile
> +++ b/arch/arm/dts/Makefile
> @@ -14,6 +14,8 @@ dtb-$(CONFIG_EXYNOS4) += exynos4210-origen.dtb \
>   	exynos4412-trats2.dtb \
>   	exynos4412-odroid.dtb
>
> +dtb-$(CONFIG_TARGET_FT2004) += phytium-ft2004.dtb
> +
>   dtb-$(CONFIG_TARGET_HIKEY) += hi6220-hikey.dtb

You patch does not apply cleanly.

Please, rebase your patch on the current origin/master of U-Boot.

>
>   dtb-$(CONFIG_TARGET_POPLAR) += hi3798cv200-poplar.dtb
> diff --git a/arch/arm/dts/phytium-ft2004.dts b/arch/arm/dts/phytium-ft2004.dts
> new file mode 100644
> index 0000000..58faab9
> --- /dev/null
> +++ b/arch/arm/dts/phytium-ft2004.dts
> @@ -0,0 +1,33 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright (C) 2019, Phytium Ltd.
> + * shuyiqi  <shuyiqi at phytium.com.cn>
> + */
> +
> +/dts-v1/;
> +

Please, add a comment here explaining why this memory region is reserved.

> +/memreserve/	0x0000000080000000 0x0000000000100000;
> +/ {

Please, provide a model property, e.g.

	model = "Phytium FT2004";

> +	compatible = "phytium,ft2004";
> +	#address-cells = <2>;
> +	#size-cells = <2>;
> +
> +	ethernet at 2820c000 {
> +		compatible = "st,stm32-dwmac";
> +		reg = <0x0 0x2820C000 0x0 0x2000>;
> +		phy-mode = "rgmii";
> +	};
> +
> +	ethernet at 28210000 {
> +		compatible = "st,stm32-dwmac";
> +		reg = <0x0 0x28210000 0x0 0x2000>;
> +		phy-mode = "rgmii";
> +	};
> +
> +	uart at 28001000 {
> +		compatible = "arm,pl011";
> +		reg = <0x0 0x28001000 0x0 0x1000>;
> +		clock = <48000000>;
> +	};
> +};
> +
> diff --git a/board/phytium/ft2004/Kconfig b/board/phytium/ft2004/Kconfig
> new file mode 100644
> index 0000000..865a609
> --- /dev/null
> +++ b/board/phytium/ft2004/Kconfig
> @@ -0,0 +1,12 @@
> +if TARGET_FT2004
> +
> +config SYS_BOARD
> +	default "ft2004"
> +
> +config SYS_VENDOR
> +	default "phytium"
> +
> +config SYS_CONFIG_NAME
> +	default "ft2004"
> +
> +endif
> diff --git a/board/phytium/ft2004/MAINTAINERS b/board/phytium/ft2004/MAINTAINERS
> new file mode 100644
> index 0000000..6e4328b
> --- /dev/null
> +++ b/board/phytium/ft2004/MAINTAINERS
> @@ -0,0 +1,8 @@
> +PHYTIUM BOARD
> +M:	liuhao <liuhao at phytium.com.cn>
> +M:	shuyiqi <shuyiqi at phytium.com.cn>
> +S:	Maintained
> +F:	board/phytium/ft2004/*
> +F:	include/configs/ft2004.h
> +F:	configs/ft2004_defconfig
> +
> diff --git a/board/phytium/ft2004/Makefile b/board/phytium/ft2004/Makefile
> new file mode 100644
> index 0000000..948d523
> --- /dev/null
> +++ b/board/phytium/ft2004/Makefile
> @@ -0,0 +1,9 @@
> +# SPDX-License-Identifier: GPL-2.0+
> +#
> +# Copyright (C) 2019
> +# shuyiqi   <shuyiqi at phytium.com.cn>
> +# liuhao	<liuhao at phytium.com.cn>
> +#
> +
> +obj-y += ft2004.o
> +
> diff --git a/board/phytium/ft2004/cpu.h b/board/phytium/ft2004/cpu.h
> new file mode 100644
> index 0000000..3574a6b
> --- /dev/null
> +++ b/board/phytium/ft2004/cpu.h
> @@ -0,0 +1,23 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * (C) Copyright 2019
> + * Phytium Technology Ltd <www.phytium.com>
> + * shuyiqi <shuyiqi at phytium.com.cn>
> + */
> +
> +#ifndef _FT2004_CPU_H
> +#define _FT2004_CPU_H
> +
> +/* FLUSH L3 CASHE */
> +#define HNF_COUNT           0x8
> +#define HNF_PSTATE_REQ      (HNF_BASE + 0x10)
> +#define HNF_PSTATE_STAT     (HNF_BASE + 0x18)
> +#define HNF_PSTATE_OFF      0x0
> +#define HNF_PSTATE_SFONLY   0x1
> +#define HNF_PSTATE_HALF     0x2
> +#define HNF_PSTATE_FULL     0x3
> +#define HNF_STRIDE          0x10000
> +#define HNF_BASE		(unsigned long)(0x3A200000)
> +
> +#endif /* _FT2004_CPU_H */
> +
> diff --git a/board/phytium/ft2004/ft2004.c b/board/phytium/ft2004/ft2004.c
> new file mode 100644
> index 0000000..1f4440d
> --- /dev/null
> +++ b/board/phytium/ft2004/ft2004.c
> @@ -0,0 +1,96 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright (C) 2019
> + * shuyiqi <shuyiqi at phytium.com.cn>
> + * liuhao  <liuhao at phytium.com.cn>
> + */
> +
> +#include <common.h>
> +#include <asm/armv8/mmu.h>
> +#include <asm/system.h>
> +#include <asm/io.h>
> +#include <linux/arm-smccc.h>
> +#include <linux/kernel.h>
> +#include <scsi.h>
> +#include "cpu.h"
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +int dram_init(void)
> +{
> +	gd->mem_clk = 0;
> +	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;
> +}
> +
> +int board_init(void)
> +{
> +	return 0;
> +}
> +
> +void reset_cpu(ulong addr)
> +{
> +	struct arm_smccc_res res;
> +
> +	printf("run in %s\n", __func__);
> +	arm_smccc_smc(0x84000009, 0, 0, 0, 0, 0, 0, 0, &res);
> +	printf("reset cpu error, %lx\n", res.a0);
> +}
> +
> +static struct mm_region ft2004_mem_map[] = {
> +	{
> +		.virt = 0x0UL,
> +		.phys = 0x0UL,
> +		.size = 0x80000000UL,
> +		.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
> +				 PTE_BLOCK_NON_SHARE |
> +				 PTE_BLOCK_PXN |
> +				 PTE_BLOCK_UXN
> +	},
> +	{
> +		.virt = (u64)PHYS_SDRAM_1,
> +		.phys = (u64)PHYS_SDRAM_1,
> +		.size = (u64)PHYS_SDRAM_1_SIZE,
> +		.attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
> +				 PTE_BLOCK_NS |
> +				 PTE_BLOCK_INNER_SHARE
> +	},
> +	{
> +		0,
> +	}
> +};
> +
> +struct mm_region *mem_map = ft2004_mem_map;
> +
> +int print_cpuinfo(void)
> +{
> +	printf("CPU: Phytium ft2004 %ld MHz\n", gd->cpu_clk);
> +	return 0;
> +}
> +
> +int __asm_flush_l3_dcache(void)
> +{
> +	int i, pstate;
> +
> +	for (i = 0; i < HNF_COUNT; i++)
> +		writeq(HNF_PSTATE_SFONLY, HNF_PSTATE_REQ + i * HNF_STRIDE);
> +	for (i = 0; i < HNF_COUNT; i++) {
> +		do {
> +			pstate = readq(HNF_PSTATE_STAT + i * HNF_STRIDE);
> +		} while ((pstate & 0xf) != (HNF_PSTATE_SFONLY << 2));
> +	}
> +
> +	for (i = 0; i < HNF_COUNT; i++)
> +		writeq(HNF_PSTATE_FULL, HNF_PSTATE_REQ + i * HNF_STRIDE);
> +
> +	return 0;
> +}
> +
> diff --git a/configs/ft2004_defconfig b/configs/ft2004_defconfig
> new file mode 100644
> index 0000000..ff1a4d9
> --- /dev/null
> +++ b/configs/ft2004_defconfig
> @@ -0,0 +1,33 @@
> +CONFIG_ARM=y
> +CONFIG_ARM64=y
> +CONFIG_TARGET_FT2004=y
> +CONFIG_SYS_PROMPT="ft2004#"
> +CONFIG_SYS_TEXT_BASE=0x88000000
> +CONFIG_NR_DRAM_BANKS=1
> +CONFIG_AHCI=y
> +CONFIG_ARM_SMCCC=y
> +
> +CONFIG_OF_CONTROL=y
> +CONFIG_OF_SEPARATE=y
> +CONFIG_DEFAULT_DEVICE_TREE="phytium-ft2004"
> +CONFIG_DM=y
> +
> +CONFIG_NET=y
> +CONFIG_NETDEVICES=y
> +CONFIG_DM_ETH=y
> +CONFIG_CMD_NET=y
> +CONFIG_CMD_BOOTP=y
> +CONFIG_CMD_TFTPBOOT=y
> +CONFIG_CMD_TFTPPUT=y
> +CONFIG_CMD_PING=y
> +CONFIG_ETH_DESIGNWARE=y
> +
> +CONFIG_DM_SERIAL=y
> +CONFIG_PL01X_SERIAL=y
> +
> +# CONFIG_DISPLAY_CPUINFO is not set
> +# CONFIG_DISPLAY_BOARDINFO is not set
> +# CONFIG_CMD_LZMADEC is not set
> +# CONFIG_CMD_UNZIP is not set
> +# CONFIG_MMC is not set
> +# CONFIG_PSCI_RESET is not set
> diff --git a/include/configs/ft2004.h b/include/configs/ft2004.h
> new file mode 100644
> index 0000000..21b235f
> --- /dev/null
> +++ b/include/configs/ft2004.h
> @@ -0,0 +1,31 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright (C) 2019
> + * shuyiqi  <shuyiqi at phytium.com.cn>
> + * liuhao   <liuhao at phytium.com.cn>
> + */
> +
> +#ifndef __FT_2004_CONFIG_H__
> +#define __FT_2004_CONFIG_H__
> +
> +/* Sdram Bank #1 Address */
> +#define PHYS_SDRAM_1			0x80000000
> +#define PHYS_SDRAM_1_SIZE		0x7B000000
> +#define CONFIG_SYS_SDRAM_BASE   PHYS_SDRAM_1
> +
> +#define CONFIG_SYS_LOAD_ADDR	(CONFIG_SYS_SDRAM_BASE + 0x10000000)
> +
> +/* Size of Malloc Pool */
> +#define CONFIG_ENV_SIZE 4096
> +#define CONFIG_SYS_MALLOC_LEN	(1 * 1024 * 1024  + CONFIG_ENV_SIZE)
> +
> +#define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_TEXT_BASE - 0x100000)
> +
> +#define CONFIG_EXTRA_ENV_SETTINGS	\
> +	"ethaddr=11:22:33:44:55:66\0"	\

With two FT2400 in the same network this will cause trouble. Can't the
Designware driver read the MAC from the network adapter?

Otherwise add CONFIG_NET_RANDOM_ETHADDR to your configuration file to
generate a random MAC address.

> +	"ipaddr=192.168.1.250\0"	\
> +	"gatewayip=192.168.1.1\0"	\
> +	"netmask=255.255.255.0\0"	\
> +	"serverip=192.168.1.110\0"

These definitions will not fit for end users. If you only need them for
your own test environment, please, remove them. The dhcp command is
meant to fill the variables.

Otherwise the code looks fine to me.

Best regards

Heinrich

> +
> +#endif
>



More information about the U-Boot mailing list