[U-Boot] [PATCH] board: ns2: Add support for Broadcom Northstar 2

Add support for the Broadcom Northstar2 SoC and SVK (bcm958712k). The BCM5871X is a series of quad-core 64-bit 2GHz ARMv8 Cortex-A57 processors targeting a broad range of networking applications.
Signed-off-by: Jon Mason jon.mason@broadcom.com --- arch/arm/Kconfig | 9 ++++++ board/broadcom/bcm958712k/MAINTAINERS | 6 ++++ board/broadcom/bcmns2/Kconfig | 15 +++++++++ board/broadcom/bcmns2/Makefile | 7 +++++ board/broadcom/bcmns2/northstar2.c | 57 +++++++++++++++++++++++++++++++++++ configs/bcm958712k_defconfig | 9 ++++++ include/configs/bcm_northstar2.h | 55 +++++++++++++++++++++++++++++++++ 7 files changed, 158 insertions(+) create mode 100644 board/broadcom/bcm958712k/MAINTAINERS create mode 100644 board/broadcom/bcmns2/Kconfig create mode 100644 board/broadcom/bcmns2/Makefile create mode 100644 board/broadcom/bcmns2/northstar2.c create mode 100644 configs/bcm958712k_defconfig create mode 100644 include/configs/bcm_northstar2.h
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 0229800..6eb125b 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -471,6 +471,14 @@ config TARGET_BCMNSP bool "Support bcmnsp" select CPU_V7
+config TARGET_BCMNS2 + bool "Support Broadcom Northstar2" + select ARM64 + help + Support for Broadcom Northstar 2 SoCs. NS2 is a quad-core 64-bit + ARMv8 Cortex-A57 processors targeting a broad range of networking + applications + config ARCH_EXYNOS bool "Samsung EXYNOS" select DM @@ -1090,6 +1098,7 @@ source "board/broadcom/bcm23550_w1d/Kconfig" source "board/broadcom/bcm28155_ap/Kconfig" source "board/broadcom/bcmcygnus/Kconfig" source "board/broadcom/bcmnsp/Kconfig" +source "board/broadcom/bcmns2/Kconfig" source "board/cavium/thunderx/Kconfig" source "board/cirrus/edb93xx/Kconfig" source "board/compulab/cm_t335/Kconfig" diff --git a/board/broadcom/bcm958712k/MAINTAINERS b/board/broadcom/bcm958712k/MAINTAINERS new file mode 100644 index 0000000..024fb14 --- /dev/null +++ b/board/broadcom/bcm958712k/MAINTAINERS @@ -0,0 +1,6 @@ +BCM958712K BOARD +M: Jon Mason jon.mason@broadcom.com +S: Maintained +F: board/broadcom/bcmns2/ +F: include/configs/bcm_northstar2.h +F: configs/bcm958712k_defconfig diff --git a/board/broadcom/bcmns2/Kconfig b/board/broadcom/bcmns2/Kconfig new file mode 100644 index 0000000..3ac6724 --- /dev/null +++ b/board/broadcom/bcmns2/Kconfig @@ -0,0 +1,15 @@ +if TARGET_BCMNS2 + +config SYS_BOARD + default "bcmns2" + +config SYS_VENDOR + default "broadcom" + +config SYS_SOC + default "ns2" + +config SYS_CONFIG_NAME + default "bcm_northstar2" + +endif diff --git a/board/broadcom/bcmns2/Makefile b/board/broadcom/bcmns2/Makefile new file mode 100644 index 0000000..f6ddd80 --- /dev/null +++ b/board/broadcom/bcmns2/Makefile @@ -0,0 +1,7 @@ +# +# Copyright 2016 Broadcom Ltd. +# +# SPDX-License-Identifier: GPL-2.0+ +# + +obj-y := northstar2.o diff --git a/board/broadcom/bcmns2/northstar2.c b/board/broadcom/bcmns2/northstar2.c new file mode 100644 index 0000000..fad5ca1 --- /dev/null +++ b/board/broadcom/bcmns2/northstar2.c @@ -0,0 +1,57 @@ +/* + * (C) Copyright 2016 Broadcom Ltd. + * + * SPDX-License-Identifier: GPL-2.0+ + */ +#include <common.h> +#include <asm/system.h> +#include <asm/armv8/mmu.h> + +static struct mm_region ns2_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 = 0x80000000UL, + .phys = 0x80000000UL, + .size = 0xff80000000UL, + .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) | + PTE_BLOCK_INNER_SHARE + }, { + /* List terminator */ + 0, + } +}; + +struct mm_region *mem_map = ns2_mem_map; + +DECLARE_GLOBAL_DATA_PTR; + +int board_init(void) +{ + return 0; +} + +int dram_init(void) +{ + gd->ram_size = PHYS_SDRAM_1_SIZE + PHYS_SDRAM_2_SIZE; + return 0; +} + +void dram_init_banksize(void) +{ + gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE; + gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE; + + gd->bd->bi_dram[1].start = CONFIG_SYS_SDRAM_BASE + PHYS_SDRAM_1_SIZE; + gd->bd->bi_dram[1].size = PHYS_SDRAM_2_SIZE; +} + +void reset_cpu(ulong addr) +{ + psci_system_reset(); +} diff --git a/configs/bcm958712k_defconfig b/configs/bcm958712k_defconfig new file mode 100644 index 0000000..b00d3d6 --- /dev/null +++ b/configs/bcm958712k_defconfig @@ -0,0 +1,9 @@ +CONFIG_ARM=y +CONFIG_TARGET_BCMNS2=y +CONFIG_IDENT_STRING=" Broadcom Northstar 2" +CONFIG_BOOTDELAY=30 +# CONFIG_DISPLAY_CPUINFO is not set +CONFIG_SYS_PROMPT="u-boot> " +# CONFIG_CMD_IMLS is not set +CONFIG_SYS_NS16550=y +CONFIG_OF_LIBFDT=y diff --git a/include/configs/bcm_northstar2.h b/include/configs/bcm_northstar2.h new file mode 100644 index 0000000..ec2ce3f --- /dev/null +++ b/include/configs/bcm_northstar2.h @@ -0,0 +1,55 @@ +/* + * Configuration for Broadcom NS2. + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef __BCM_NORTHSTAR2_H +#define __BCM_NORTHSTAR2_H + +#include <linux/sizes.h> + +#define CONFIG_HOSTNAME northstar2 + +/* Physical Memory Map */ +#define V2M_BASE 0x80000000 +#define PHYS_SDRAM_1 V2M_BASE + +#define CONFIG_NR_DRAM_BANKS 2 +#define PHYS_SDRAM_1_SIZE (4UL * SZ_1G) +#define PHYS_SDRAM_2_SIZE (4UL * SZ_1G) +#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1 + +/* define text_base for U-boot image */ +#define CONFIG_SYS_TEXT_BASE 0x85000000 +#define CONFIG_SYS_INIT_SP_ADDR (PHYS_SDRAM_1 + 0x7ff00) +#define CONFIG_SYS_LOAD_ADDR 0x90000000 +#define CONFIG_SYS_MALLOC_LEN SZ_16M + +/* Serial Configuration */ +#define CONFIG_SYS_NS16550_SERIAL +#define CONFIG_SYS_NS16550_REG_SIZE (-4) +#define CONFIG_SYS_NS16550_CLK 25000000 +#define CONFIG_SYS_NS16550_COM1 0x66100000 +#define CONFIG_SYS_NS16550_COM2 0x66110000 +#define CONFIG_SYS_NS16550_COM3 0x66120000 +#define CONFIG_SYS_NS16550_COM4 0x66130000 +#define CONFIG_CONS_INDEX 4 +#define CONFIG_BAUDRATE 115200 + +#define CONFIG_ENV_SIZE SZ_8K +#define CONFIG_ENV_IS_NOWHERE + +/* console configuration */ +#define CONFIG_SYS_CBSIZE SZ_1K +#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \ + sizeof(CONFIG_SYS_PROMPT) + 16) +#define CONFIG_SYS_MAXARGS 64 +#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE + +/* version string, parser, etc */ +#define CONFIG_CMDLINE_EDITING +#define CONFIG_COMMAND_HISTORY +#define CONFIG_SYS_LONGHELP + +#endif /* __BCM_NORTHSTAR2_H */

On Fri, Feb 17, 2017 at 04:17:10PM -0500, Jon Mason wrote:
Add support for the Broadcom Northstar2 SoC and SVK (bcm958712k). The BCM5871X is a series of quad-core 64-bit 2GHz ARMv8 Cortex-A57 processors targeting a broad range of networking applications.
Signed-off-by: Jon Mason jon.mason@broadcom.com
arch/arm/Kconfig | 9 ++++++ board/broadcom/bcm958712k/MAINTAINERS | 6 ++++ board/broadcom/bcmns2/Kconfig | 15 +++++++++ board/broadcom/bcmns2/Makefile | 7 +++++ board/broadcom/bcmns2/northstar2.c | 57 +++++++++++++++++++++++++++++++++++ configs/bcm958712k_defconfig | 9 ++++++ include/configs/bcm_northstar2.h | 55 +++++++++++++++++++++++++++++++++ 7 files changed, 158 insertions(+) create mode 100644 board/broadcom/bcm958712k/MAINTAINERS create mode 100644 board/broadcom/bcmns2/Kconfig create mode 100644 board/broadcom/bcmns2/Makefile create mode 100644 board/broadcom/bcmns2/northstar2.c create mode 100644 configs/bcm958712k_defconfig create mode 100644 include/configs/bcm_northstar2.h
I assume you have some follow up patches to add some code under arch/arm/mach-xxxx ? Or is there just a whole bunch of stuff that's done in ATF or similar instead? Also:
+int dram_init(void) +{
- gd->ram_size = PHYS_SDRAM_1_SIZE + PHYS_SDRAM_2_SIZE;
- return 0;
+}
You should be using get_ram_size() here.
[snip]
+CONFIG_BOOTDELAY=30
Having 30 seconds here is huge. I know in your talk you were mentioning how to interrupt boot but I'd really rather not see this exceed 10 and 5 is usually sufficient.

On Wed, Feb 22, 2017 at 11:10 AM, Tom Rini trini@konsulko.com wrote:
On Fri, Feb 17, 2017 at 04:17:10PM -0500, Jon Mason wrote:
Add support for the Broadcom Northstar2 SoC and SVK (bcm958712k). The BCM5871X is a series of quad-core 64-bit 2GHz ARMv8 Cortex-A57 processors targeting a broad range of networking applications.
Signed-off-by: Jon Mason jon.mason@broadcom.com
arch/arm/Kconfig | 9 ++++++ board/broadcom/bcm958712k/MAINTAINERS | 6 ++++ board/broadcom/bcmns2/Kconfig | 15 +++++++++ board/broadcom/bcmns2/Makefile | 7 +++++ board/broadcom/bcmns2/northstar2.c | 57 +++++++++++++++++++++++++++++++++++ configs/bcm958712k_defconfig | 9 ++++++ include/configs/bcm_northstar2.h | 55 +++++++++++++++++++++++++++++++++ 7 files changed, 158 insertions(+) create mode 100644 board/broadcom/bcm958712k/MAINTAINERS create mode 100644 board/broadcom/bcmns2/Kconfig create mode 100644 board/broadcom/bcmns2/Makefile create mode 100644 board/broadcom/bcmns2/northstar2.c create mode 100644 configs/bcm958712k_defconfig create mode 100644 include/configs/bcm_northstar2.h
I assume you have some follow up patches to add some code under arch/arm/mach-xxxx ? Or is there just a whole bunch of stuff that's done in ATF or similar instead? Also:
Most/all of the ugliness is being hidden by ATF. So, I believe there is no need for arch/arm/mach-iproc for NS2.
I will have more patches coming to add drivers for boot devices. However, I was going to add those serially. The side benefit
+int dram_init(void) +{
gd->ram_size = PHYS_SDRAM_1_SIZE + PHYS_SDRAM_2_SIZE;
return 0;
+}
You should be using get_ram_size() here.
Will do
[snip]
+CONFIG_BOOTDELAY=30
Having 30 seconds here is huge. I know in your talk you were mentioning how to interrupt boot but I'd really rather not see this exceed 10 and 5 is usually sufficient.
5 secs is fine
Also, Alexander Graf mentioned needing to add DISTRO_DEFAULTS (IIRC).
I'll make those changes and push a v2. Thanks for the reviews!
Thanks, Jon
-- Tom
participants (3)
-
Jon Mason
-
Jon Mason
-
Tom Rini