[U-Boot] [PATCH v4 6/8] armv8: cavium: Add ThunderX 88xx board definition
Simon Glass
sjg at chromium.org
Sat Aug 22 02:36:48 CEST 2015
Hi Sergey,
On 18 August 2015 at 06:26, Sergey Temerkhanov <s.temerkhanov at gmail.com> wrote:
> This commit adds basic Cavium ThunderX 88xx board definitions and support.
>
> Signed-off-by: Sergey Temerkhanov <s.temerkhanov at gmail.com>
> Signed-off-by: Radha Mohan Chintakuntla <rchintakuntla at cavium.com>
>
> ---
>
> Changes in v4:
> - Moved CONFIG_SYS_PROMPT to configs/thunderx_88xx_defconfig
> - Add proper DM_SERIAL definitions
>
> Changes in v3:
> - Fixed formatting
> - Added MAINTAINERS
> - Moved command definitions to defconfig
>
> Changes in v2: None
>
> arch/arm/Kconfig | 4 +
> board/cavium/thunderx/Kconfig | 19 +++++
> board/cavium/thunderx/MAINTAINERS | 6 ++
> board/cavium/thunderx/Makefile | 8 ++
> board/cavium/thunderx/thunderx.c | 86 ++++++++++++++++++++++
> configs/thunderx_88xx_defconfig | 28 +++++++
> include/configs/thunderx_88xx.h | 149 ++++++++++++++++++++++++++++++++++++++
> 7 files changed, 300 insertions(+)
> create mode 100644 board/cavium/thunderx/Kconfig
> create mode 100644 board/cavium/thunderx/MAINTAINERS
> create mode 100644 board/cavium/thunderx/Makefile
> create mode 100644 board/cavium/thunderx/thunderx.c
> create mode 100644 configs/thunderx_88xx_defconfig
> create mode 100644 include/configs/thunderx_88xx.h
>
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index ee9a1b3..873a9b9 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -830,6 +830,9 @@ config TARGET_STM32F429_DISCOVERY
> bool "Support STM32F429 Discovery"
> select CPU_V7M
>
> +config TARGET_THUNDERX_88XX
> + bool "Support ThunderX 88xx"
Can you please add help here, spending 4-5 lines describing the board
in rough terms. As an example, see arch/x86/Kconfig:
config TARGET_CHROMEBOOK_LINK
bool "Support Chromebook link"
help
This is the Chromebook Pixel released in 2013. It uses an Intel
i5 Ivybridge which is a die-shrink of Sandybridge, with 4GB of
SDRAM. It has a Panther Point platform controller hub, PCIe
WiFi and Bluetooth. It also includes a 720p webcam, USB SD
reader, microphone and speakers, display port and 32GB SATA
solid state drive. There is a Chrome OS EC connected on LPC,
and it provides a 2560x1700 high resolution touch-enabled LCD
display.
> +
> endchoice
>
> source "arch/arm/mach-at91/Kconfig"
> @@ -1001,6 +1004,7 @@ source "board/woodburn/Kconfig"
> source "board/work-microwave/work_92105/Kconfig"
> source "board/xaeniax/Kconfig"
> source "board/zipitz2/Kconfig"
> +source "board/cavium/thunderx/Kconfig"
>
> source "arch/arm/Kconfig.debug"
>
> diff --git a/board/cavium/thunderx/Kconfig b/board/cavium/thunderx/Kconfig
> new file mode 100644
> index 0000000..3e62abf
> --- /dev/null
> +++ b/board/cavium/thunderx/Kconfig
> @@ -0,0 +1,19 @@
> +if TARGET_THUNDERX_88XX
> +
> +config SYS_CPU
> + string
> + default "armv8"
> +
> +config SYS_BOARD
> + string
> + default "thunderx"
> +
> +config SYS_VENDOR
> + string
> + default "cavium"
> +
> +config SYS_CONFIG_NAME
> + string
> + default "thunderx_88xx"
> +
> +endif
> diff --git a/board/cavium/thunderx/MAINTAINERS b/board/cavium/thunderx/MAINTAINERS
> new file mode 100644
> index 0000000..c84d3b5
> --- /dev/null
> +++ b/board/cavium/thunderx/MAINTAINERS
> @@ -0,0 +1,6 @@
> +THUNDERX BOARD
> +M: Sergey Temerkhanov <s.temerkhanov at gmail.com>
> +S: Maintained
> +F: board/cavium/thunderx/
> +F: include/configs/thunderx_88xx.h
> +F: configs/thunderx_88xx_defconfig
> diff --git a/board/cavium/thunderx/Makefile b/board/cavium/thunderx/Makefile
> new file mode 100644
> index 0000000..306044a
> --- /dev/null
> +++ b/board/cavium/thunderx/Makefile
> @@ -0,0 +1,8 @@
> +#
> +#
> +# (C) Copyright 2014, Cavium Inc.
> +#
> +# SPDX-License-Identifier: GPL-2.0+
> +#
> +
> +obj-y := thunderx.o
> diff --git a/board/cavium/thunderx/thunderx.c b/board/cavium/thunderx/thunderx.c
> new file mode 100644
> index 0000000..c478dd7
> --- /dev/null
> +++ b/board/cavium/thunderx/thunderx.c
> @@ -0,0 +1,86 @@
> +/**
> + * (C) Copyright 2014, Cavium Inc.
> + *
> + * SPDX-License-Identifier: GPL-2.0+
> +**/
> +
> +#include <common.h>
> +#include <malloc.h>
> +#include <errno.h>
> +#include <linux/compiler.h>
> +
> +#include <dm/platdata.h>
> +#include <dm/platform_data/serial_pl01x.h>
> +
> +static const struct pl01x_serial_platdata serial0 = {
> + .base = CONFIG_SYS_SERIAL0,
> + .type = TYPE_PL011,
> + .clock = 0,
> + .flags = PL0x_PREINITIALIZED,
> +};
> +
> +U_BOOT_DEVICE(thunderx_serial0) = {
> + .name = "serial_pl01x",
> + .platdata = &serial0,
> +};
> +
> +static const struct pl01x_serial_platdata serial1 = {
> + .base = CONFIG_SYS_SERIAL1,
> + .type = TYPE_PL011,
> + .clock = 0,
> + .flags = PL0x_PREINITIALIZED,
> +};
> +
> +U_BOOT_DEVICE(thunderx_serial1) = {
> + .name = "serial_pl01x",
> + .platdata = &serial1,
> +};
> +
As mentioned elsewhere, we should use device tree and remove this. It
could be a follow-on patch if you prefer.
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +int board_init(void)
> +{
> + return 0;
> +}
> +
> +int dram_init(void)
> +{
> + /*
> + * Clear spin table so that secondary processors
> + * observe the correct value after waken up from wfe.
> + */
> + *(unsigned long *)CPU_RELEASE_ADDR = 0;
> +
> + gd->ram_size = PHYS_SDRAM_1_SIZE;
> + return 0;
> +}
> +
> +int timer_init(void)
> +{
> + return 0;
> +}
> +
> +/*
> + * Board specific reset that is system reset.
> + */
> +void reset_cpu(ulong addr)
> +{
> +}
> +
> +/*
> + * Board specific ethernet initialization routine.
> + */
> +int board_eth_init(bd_t *bis)
> +{
> + int rc = 0;
> +
> + return rc;
> +}
Can we use driver model for Ethernet? I.e. define CONFIG_DM_ETH.
> +
> +#ifdef CONFIG_PCI
> +void pci_init_board(void)
> +{
> + printf("DEBUG: PCI Init TODO *****\n");
> +}
> +#endif
When you do, please use driver model PCI.
> +
> diff --git a/configs/thunderx_88xx_defconfig b/configs/thunderx_88xx_defconfig
> new file mode 100644
> index 0000000..9f97174
> --- /dev/null
> +++ b/configs/thunderx_88xx_defconfig
> @@ -0,0 +1,28 @@
> +CONFIG_SYS_EXTRA_OPTIONS="ARM64"
> +CONFIG_ARM=y
> +CONFIG_TARGET_THUNDERX_88XX=y
> +CONFIG_SYS_PROMPT="ThunderX_88XX> "
> +
> +CONFIG_DM=y
> +CONFIG_DM_SERIAL=y
> +CONFIG_DM_STDIO=y
> +
> +CONFIG_CMD_CACHE=y
> +CONFIG_CMD_BDI=y
> +CONFIG_CMD_DIAG=y
> +CONFIG_CMD_ENV=y
> +CONFIG_CMD_IMI=y
> +CONFIG_CMD_MEMORY=y
> +CONFIG_CMD_RUN=y
> +CONFIG_CMD_BOOTD=y
> +CONFIG_CMD_ECHO=y
> +CONFIG_CMD_SOURCE=y
> +
> +CONFIG_CMD_LOADB=y
> +CONFIG_CMD_LOADS=y
> +CONFIG_CMD_SAVES=y
> +
> +# CONFIG_CMD_FLASH is not set
> +# CONFIG_CMD_IMLS is not set
> +
> +CONFIG_CMD_ATF=y
> diff --git a/include/configs/thunderx_88xx.h b/include/configs/thunderx_88xx.h
> new file mode 100644
> index 0000000..1973ca5
> --- /dev/null
> +++ b/include/configs/thunderx_88xx.h
> @@ -0,0 +1,149 @@
> +/**
> + * (C) Copyright 2014, Cavium Inc.
> + *
> + * SPDX-License-Identifier: GPL-2.0+
> +**/
> +
> +#ifndef __THUNDERX_88XX_H__
> +#define __THUNDERX_88XX_H__
> +
> +#define CONFIG_REMAKE_ELF
> +
> +/*#define CONFIG_GICV3*/
> +
> +/*#define CONFIG_ARMV8_SWITCH_TO_EL1*/
What are those two above? Perhaps add a comment as to why you have
commented-out config here.
> +
> +#define CONFIG_SYS_GENERIC_BOARD
This can go in your defconfig file.
> +
> +#define CONFIG_SYS_64BIT
> +
> +#define CONFIG_SYS_NO_FLASH
> +
> +/*#define CONFIG_SUPPORT_RAW_INITRD */
> +
> +
> +#define CONFIG_IDENT_STRING \
> + " for Cavium Thunder CN88XX ARM v8 Multi-Core"
> +#define CONFIG_BOOTP_VCI_STRING "Diagnostics"
> +
> +#define MEM_BASE 0x00500000
> +
> +#define CONFIG_COREID_MASK 0xffffff
> +
> +#define CONFIG_SYS_FULL_VA
> +
> +#define CONFIG_SYS_MEM_MAP {{0x000000000000UL, 0x40000000000UL, \
> + MT_NORMAL}, \
> + {0x800000000000UL, 0x40000000000UL, \
> + MT_DEVICE_NGNRNE}, \
> + {0x840000000000UL, 0x40000000000UL, \
> + MT_DEVICE_NGNRNE}, \
> + {0xffffffffffffUL, 0xfffffffffffUL, \
> + MT_DEVICE_NGNRNE},}
> +
> +#define CONFIG_SYS_MEM_MAP_SIZE 3
> +
> +#define CONFIG_SYS_VA_BITS 48
> +#define CONFIG_SYS_PTL2_BITS 42
> +#define CONFIG_SYS_BLOCK_SHIFT 29
> +#define CONFIG_SYS_PTL1_ENTRIES 64
> +#define CONFIG_SYS_PTL2_ENTRIES 8192
> +
> +#define CONFIG_SYS_PGTABLE_SIZE \
> + ((CONFIG_SYS_PTL1_ENTRIES + \
> + CONFIG_SYS_MEM_MAP_SIZE * CONFIG_SYS_PTL2_ENTRIES) * 8)
> +#define CONFIG_SYS_TCR_EL1_IPS_BITS (5UL << 32)
> +#define CONFIG_SYS_TCR_EL2_IPS_BITS (5 << 16)
> +#define CONFIG_SYS_TCR_EL3_IPS_BITS (5 << 16)
> +
> +/* Link Definitions */
> +#define CONFIG_SYS_TEXT_BASE 0x00500000
> +#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0x7fff0)
> +
> +/* Flat Device Tree Definitions */
> +#define CONFIG_OF_LIBFDT
> +
> +/* SMP Spin Table Definitions */
> +#define CPU_RELEASE_ADDR (CONFIG_SYS_SDRAM_BASE + 0x7fff0)
> +
> +
> +/* Generic Timer Definitions */
> +#define COUNTER_FREQUENCY (0x1800000) /* 24MHz */
> +
> +
> +#define CONFIG_SYS_MEMTEST_START MEM_BASE
> +#define CONFIG_SYS_MEMTEST_END (MEM_BASE + PHYS_SDRAM_1_SIZE)
> +
> +/* Size of malloc() pool */
> +#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + 1024 * 1024)
> +
> +/* PL011 Serial Configuration */
> +
> +#define CONFIG_PL01X_SERIAL
> +#define CONFIG_PL011_CLOCK 24000000
> +#define CONFIG_CONS_INDEX 1
> +
> +/* Generic Interrupt Controller Definitions */
> +#define GICD_BASE (0x801000000000)
> +#define GICR_BASE (0x801000002000)
> +#define CONFIG_SYS_SERIAL0 0x87e024000000
> +#define CONFIG_SYS_SERIAL1 0x87e025000000
> +
> +#define CONFIG_BAUDRATE 115200
> +
> +/* Command line configuration */
> +#define CONFIG_MENU
> +
> +/* BOOTP options */
> +#define CONFIG_BOOTP_BOOTFILESIZE
> +#define CONFIG_BOOTP_BOOTPATH
> +#define CONFIG_BOOTP_GATEWAY
> +#define CONFIG_BOOTP_HOSTNAME
> +#define CONFIG_BOOTP_PXE
> +#define CONFIG_BOOTP_PXE_CLIENTARCH 0x100
> +
> +/* Miscellaneous configurable options */
> +#define CONFIG_SYS_LOAD_ADDR (MEM_BASE)
> +
> +/* Physical Memory Map */
> +#define CONFIG_NR_DRAM_BANKS 1
> +#define PHYS_SDRAM_1 (MEM_BASE) /* SDRAM Bank #1 */
> +#define PHYS_SDRAM_1_SIZE (0x80000000-MEM_BASE) /* 2048 MB */
> +#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1
> +
> +
> +/* Initial environment variables */
> +#define UBOOT_IMG_HEAD_SIZE 0x40
> +/* C80000 - 0x40 */
> +#define CONFIG_EXTRA_ENV_SETTINGS \
> + "kernel_addr=08007ffc0\0" \
> + "fdt_addr=0x94C00000\0" \
> + "fdt_high=0x9fffffff\0"
> +
> +#define CONFIG_BOOTARGS \
> + "console=ttyAMA0,115200n8 " \
> + "earlycon=pl011,0x87e024000000 " \
> + "debug maxcpus=48 rootwait rw "\
> + "root=/dev/sda2 coherent_pool=16M"
> +#define CONFIG_BOOTDELAY 5
> +
> +/* Do not preserve environment */
> +#define CONFIG_ENV_IS_NOWHERE 1
> +#define CONFIG_ENV_SIZE 0x1000
> +
> +/* Monitor Command Prompt */
> +#define CONFIG_SYS_CBSIZE 512 /* Console I/O Buffer Size */
> +#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \
> + sizeof(CONFIG_SYS_PROMPT) + 16)
> +#define CONFIG_SYS_HUSH_PARSER
> +#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
> +#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
> +#define CONFIG_SYS_LONGHELP
> +#define CONFIG_CMDLINE_EDITING 1
> +#define CONFIG_SYS_MAXARGS 64 /* max command args */
> +#define CONFIG_NO_RELOCATION 1
> +#define CONFIG_LIB_RAND
> +#define PLL_REF_CLK 50000000 /* 50 MHz */
> +#define NS_PER_REF_CLK_TICK (1000000000/PLL_REF_CLK)
> +
> +#endif /* __THUNDERX_88XX_H__ */
> --
> 2.2.0
Regards,
Simon
More information about the U-Boot
mailing list