From 33b7258947f4a15a048f7c31c3f5d72221152ba2 Mon Sep 17 00:00:00 2001 From: Dave Gerlach Date: Fri, 23 Apr 2021 11:27:42 -0500 Subject: board: ti: am64x: Add board support for am64x evm Add board specific initialization for am64x based boards. Signed-off-by: Dave Gerlach --- board/ti/am64x/Kconfig | 53 +++++++++++++++++++++++++++++++++++++++++++++++++ board/ti/am64x/Makefile | 8 ++++++++ board/ti/am64x/evm.c | 48 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 board/ti/am64x/Kconfig create mode 100644 board/ti/am64x/Makefile create mode 100644 board/ti/am64x/evm.c (limited to 'board') diff --git a/board/ti/am64x/Kconfig b/board/ti/am64x/Kconfig new file mode 100644 index 0000000000..57527be1df --- /dev/null +++ b/board/ti/am64x/Kconfig @@ -0,0 +1,53 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# Copyright (C) 2020-2021 Texas Instruments Incorporated - https://www.ti.com/ + +choice + prompt "K3 AM64 based boards" + optional + +config TARGET_AM642_A53_EVM + bool "TI K3 based AM642 EVM running on A53" + select ARM64 + select SOC_K3_AM642 + imply BOARD + imply SPL_BOARD + +config TARGET_AM642_R5_EVM + bool "TI K3 based AM642 EVM running on R5" + select CPU_V7R + select SYS_THUMB_BUILD + select K3_LOAD_SYSFW + select SOC_K3_AM642 + imply SYS_K3_SPL_ATF + +endchoice + +if TARGET_AM642_A53_EVM + +config SYS_BOARD + default "am64x" + +config SYS_VENDOR + default "ti" + +config SYS_CONFIG_NAME + default "am64x_evm" + +endif + +if TARGET_AM642_R5_EVM + +config SYS_BOARD + default "am64x" + +config SYS_VENDOR + default "ti" + +config SYS_CONFIG_NAME + default "am64x_evm" + +config SPL_LDSCRIPT + default "arch/arm/mach-omap2/u-boot-spl.lds" + +endif diff --git a/board/ti/am64x/Makefile b/board/ti/am64x/Makefile new file mode 100644 index 0000000000..8b98e6f5fd --- /dev/null +++ b/board/ti/am64x/Makefile @@ -0,0 +1,8 @@ +# +# Copyright (C) 2020-2021 Texas Instruments Incorporated - https://www.ti.com/ +# Keerthy +# +# SPDX-License-Identifier: GPL-2.0+ +# + +obj-y += evm.o diff --git a/board/ti/am64x/evm.c b/board/ti/am64x/evm.c new file mode 100644 index 0000000000..bbb81dddb3 --- /dev/null +++ b/board/ti/am64x/evm.c @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Board specific initialization for AM642 EVM + * + * Copyright (C) 2020-2021 Texas Instruments Incorporated - https://www.ti.com/ + * Keerthy + * + */ + +#include +#include +#include + +DECLARE_GLOBAL_DATA_PTR; + +int board_init(void) +{ + return 0; +} + +int dram_init(void) +{ + gd->ram_size = 0x80000000; + + return 0; +} + +int dram_init_banksize(void) +{ + /* Bank 0 declares the memory available in the DDR low region */ + gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE; + gd->bd->bi_dram[0].size = 0x80000000; + gd->ram_size = 0x80000000; + + return 0; +} + +#if defined(CONFIG_SPL_LOAD_FIT) +int board_fit_config_name_match(const char *name) +{ +#if defined(CONFIG_TARGET_AM642_A53_EVM) + if (!strcmp(name, "k3-am642-evm")) + return 0; +#endif + + return -1; +} +#endif -- cgit From d480bd5edccfc9ad8ef2fc292ff9f56daea70849 Mon Sep 17 00:00:00 2001 From: Dave Gerlach Date: Fri, 23 Apr 2021 11:27:47 -0500 Subject: configs: am64x_evm_r5: Add Initial support Add initial R5 defconfig support for AM64x SoCs. Signed-off-by: Dave Gerlach --- board/ti/am64x/MAINTAINERS | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 board/ti/am64x/MAINTAINERS (limited to 'board') diff --git a/board/ti/am64x/MAINTAINERS b/board/ti/am64x/MAINTAINERS new file mode 100644 index 0000000000..bb8c00c7b5 --- /dev/null +++ b/board/ti/am64x/MAINTAINERS @@ -0,0 +1,7 @@ +AM64x BOARD +M: Dave Gerlach +M: Lokesh Vutla +S: Maintained +F: board/ti/am64x/ +F: include/configs/am64x_evm.h +F: configs/am64x_evm_r5_defconfig -- cgit From 55afd2d8f5af7638db6ffc57e9d0019379b11b4a Mon Sep 17 00:00:00 2001 From: Dave Gerlach Date: Fri, 23 Apr 2021 11:27:48 -0500 Subject: configs: am64x_evm_a53: Add Initial support Add initial A53 defconfig support for AM64x SoCs. Signed-off-by: Dave Gerlach --- board/ti/am64x/MAINTAINERS | 1 + 1 file changed, 1 insertion(+) (limited to 'board') diff --git a/board/ti/am64x/MAINTAINERS b/board/ti/am64x/MAINTAINERS index bb8c00c7b5..d384a330df 100644 --- a/board/ti/am64x/MAINTAINERS +++ b/board/ti/am64x/MAINTAINERS @@ -5,3 +5,4 @@ S: Maintained F: board/ti/am64x/ F: include/configs/am64x_evm.h F: configs/am64x_evm_r5_defconfig +F: configs/am64x_evm_a53_defconfig -- cgit From db2438131d75ea0198487296b6c694bded080d11 Mon Sep 17 00:00:00 2001 From: Dave Gerlach Date: Tue, 11 May 2021 10:22:10 -0500 Subject: ram: k3-ddrss: Introduce top-level CONFIG_K3_DDRSS Create a new CONFIG_K3_DDRSS option to select the common parts of the k3-ddrss driver. Also introduce a choice that depends on the top level option to select CONFIG_K3_J721E_DDRSS for j721e support, and update corresponding Kconfig as required. Signed-off-by: Dave Gerlach --- board/ti/j721e/Kconfig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'board') diff --git a/board/ti/j721e/Kconfig b/board/ti/j721e/Kconfig index 2cbe2b2481..c28752a658 100644 --- a/board/ti/j721e/Kconfig +++ b/board/ti/j721e/Kconfig @@ -23,7 +23,7 @@ config TARGET_J721E_R5_EVM select K3_LOAD_SYSFW select RAM select SPL_RAM - select K3_J721E_DDRSS + select K3_DDRSS imply SYS_K3_SPL_ATF imply TI_I2C_BOARD_DETECT @@ -43,7 +43,7 @@ config TARGET_J7200_R5_EVM select K3_LOAD_SYSFW select RAM select SPL_RAM - select K3_J721E_DDRSS + select K3_DDRSS imply SYS_K3_SPL_ATF imply TI_I2C_BOARD_DETECT -- cgit From d411f0973aa62ce426f901594367f9344261446d Mon Sep 17 00:00:00 2001 From: Dave Gerlach Date: Tue, 4 May 2021 18:00:53 -0500 Subject: arm: mach-k3: am642: Add support for triggering ddr init from SPL In SPL, DDR should be made available by the end of board_init_f() so that apis in board_init_r() can use ddr. Adding support for triggering DDR initialization from board_init_f(). Signed-off-by: Dave Gerlach --- board/ti/am64x/Kconfig | 3 +++ 1 file changed, 3 insertions(+) (limited to 'board') diff --git a/board/ti/am64x/Kconfig b/board/ti/am64x/Kconfig index 57527be1df..3dd5b54c94 100644 --- a/board/ti/am64x/Kconfig +++ b/board/ti/am64x/Kconfig @@ -19,6 +19,9 @@ config TARGET_AM642_R5_EVM select SYS_THUMB_BUILD select K3_LOAD_SYSFW select SOC_K3_AM642 + select RAM + select SPL_RAM + select K3_DDRSS imply SYS_K3_SPL_ATF endchoice -- cgit From 2ee76314a759666f6469e6044dc243832b1883c9 Mon Sep 17 00:00:00 2001 From: Lokesh Vutla Date: Thu, 6 May 2021 16:44:49 +0530 Subject: board: ti: am64x: Add support for reading eeprom data I2C EEPROM data contains the board name and its revision. Add support for: - Reading EEPROM data and store a copy at end of SRAM - Updating env variable with relevant board info - Printing board info during boot. Signed-off-by: Lokesh Vutla --- board/ti/am64x/evm.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) (limited to 'board') diff --git a/board/ti/am64x/evm.c b/board/ti/am64x/evm.c index bbb81dddb3..18e49112ac 100644 --- a/board/ti/am64x/evm.c +++ b/board/ti/am64x/evm.c @@ -10,6 +10,14 @@ #include #include #include +#include +#include +#include + +#include "../common/board_detect.h" + +#define board_is_am64x_gpevm() board_ti_k3_is("AM64-GPEVM") +#define board_is_am64x_skevm() board_ti_k3_is("AM64-SKEVM") DECLARE_GLOBAL_DATA_PTR; @@ -46,3 +54,87 @@ int board_fit_config_name_match(const char *name) return -1; } #endif + +#ifdef CONFIG_TI_I2C_BOARD_DETECT +int do_board_detect(void) +{ + int ret; + + ret = ti_i2c_eeprom_am6_get_base(CONFIG_EEPROM_BUS_ADDRESS, + CONFIG_EEPROM_CHIP_ADDRESS); + if (ret) { + printf("EEPROM not available at 0x%02x, trying to read at 0x%02x\n", + CONFIG_EEPROM_CHIP_ADDRESS, CONFIG_EEPROM_CHIP_ADDRESS + 1); + ret = ti_i2c_eeprom_am6_get_base(CONFIG_EEPROM_BUS_ADDRESS, + CONFIG_EEPROM_CHIP_ADDRESS + 1); + if (ret) + pr_err("Reading on-board EEPROM at 0x%02x failed %d\n", + CONFIG_EEPROM_CHIP_ADDRESS + 1, ret); + } + + return ret; +} + +int checkboard(void) +{ + struct ti_am6_eeprom *ep = TI_AM6_EEPROM_DATA; + + if (!do_board_detect()) + printf("Board: %s rev %s\n", ep->name, ep->version); + + return 0; +} + +#ifdef CONFIG_BOARD_LATE_INIT +static void setup_board_eeprom_env(void) +{ + char *name = "am64x_gpevm"; + + if (do_board_detect()) + goto invalid_eeprom; + + if (board_is_am64x_gpevm()) + name = "am64x_gpevm"; + else if (board_is_am64x_skevm()) + name = "am64x_skevm"; + else + printf("Unidentified board claims %s in eeprom header\n", + board_ti_get_name()); + +invalid_eeprom: + set_board_info_env_am6(name); +} + +static void setup_serial(void) +{ + struct ti_am6_eeprom *ep = TI_AM6_EEPROM_DATA; + unsigned long board_serial; + char *endp; + char serial_string[17] = { 0 }; + + if (env_get("serial#")) + return; + + board_serial = simple_strtoul(ep->serial, &endp, 16); + if (*endp != '\0') { + pr_err("Error: Can't set serial# to %s\n", ep->serial); + return; + } + + snprintf(serial_string, sizeof(serial_string), "%016lx", board_serial); + env_set("serial#", serial_string); +} +#endif +#endif + +#ifdef CONFIG_BOARD_LATE_INIT +int board_late_init(void) +{ + if (IS_ENABLED(CONFIG_TI_I2C_BOARD_DETECT)) { + setup_board_eeprom_env(); + setup_serial(); + } + + return 0; +} +#endif -- cgit From 8817c132a041cb62eba8f6939ff1ff44b4140ba1 Mon Sep 17 00:00:00 2001 From: Lokesh Vutla Date: Thu, 6 May 2021 16:44:50 +0530 Subject: board: ti: am64x: Enable support for reading EEPROM in R5 SPL Include the relevant configs to enable support for reading EEPROM in R5SPL. Signed-off-by: Lokesh Vutla --- board/ti/am64x/Kconfig | 3 +++ 1 file changed, 3 insertions(+) (limited to 'board') diff --git a/board/ti/am64x/Kconfig b/board/ti/am64x/Kconfig index 3dd5b54c94..7150dbb3b0 100644 --- a/board/ti/am64x/Kconfig +++ b/board/ti/am64x/Kconfig @@ -23,6 +23,7 @@ config TARGET_AM642_R5_EVM select SPL_RAM select K3_DDRSS imply SYS_K3_SPL_ATF + imply TI_I2C_BOARD_DETECT endchoice @@ -53,4 +54,6 @@ config SYS_CONFIG_NAME config SPL_LDSCRIPT default "arch/arm/mach-omap2/u-boot-spl.lds" +source "board/ti/common/Kconfig" + endif -- cgit From 63d825e9fcc75edcf0f378995975a0b4f2632899 Mon Sep 17 00:00:00 2001 From: Lokesh Vutla Date: Thu, 6 May 2021 16:44:51 +0530 Subject: board: ti: am64x: Add support for detecting multiple device trees Update the board_fit_config_name_match() to choose the right dtb. Signed-off-by: Lokesh Vutla --- board/ti/am64x/evm.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'board') diff --git a/board/ti/am64x/evm.c b/board/ti/am64x/evm.c index 18e49112ac..a1ffcb929c 100644 --- a/board/ti/am64x/evm.c +++ b/board/ti/am64x/evm.c @@ -46,10 +46,15 @@ int dram_init_banksize(void) #if defined(CONFIG_SPL_LOAD_FIT) int board_fit_config_name_match(const char *name) { -#if defined(CONFIG_TARGET_AM642_A53_EVM) - if (!strcmp(name, "k3-am642-evm")) - return 0; -#endif + bool eeprom_read = board_ti_was_eeprom_read(); + + if (!eeprom_read || board_is_am64x_gpevm()) { + if (!strcmp(name, "k3-am642-r5-evm") || !strcmp(name, "k3-am642-evm")) + return 0; + } else if (board_is_am64x_skevm()) { + if (!strcmp(name, "k3-am642-r5-sk") || !strcmp(name, "k3-am642-sk")) + return 0; + } return -1; } -- cgit From 7ecca0c43d88d84011fcc9ea0655ab8529505368 Mon Sep 17 00:00:00 2001 From: Lokesh Vutla Date: Thu, 6 May 2021 16:45:04 +0530 Subject: configs: am64x_evm_a53: Enable support for reading eeprom Enable relevant configs for reading eeprom data and updating env variables. Signed-off-by: Lokesh Vutla --- board/ti/am64x/Kconfig | 3 +++ 1 file changed, 3 insertions(+) (limited to 'board') diff --git a/board/ti/am64x/Kconfig b/board/ti/am64x/Kconfig index 7150dbb3b0..d4ec759d7f 100644 --- a/board/ti/am64x/Kconfig +++ b/board/ti/am64x/Kconfig @@ -12,6 +12,7 @@ config TARGET_AM642_A53_EVM select SOC_K3_AM642 imply BOARD imply SPL_BOARD + imply TI_I2C_BOARD_DETECT config TARGET_AM642_R5_EVM bool "TI K3 based AM642 EVM running on R5" @@ -38,6 +39,8 @@ config SYS_VENDOR config SYS_CONFIG_NAME default "am64x_evm" +source "board/ti/common/Kconfig" + endif if TARGET_AM642_R5_EVM -- cgit From ec658e7ee5459244c9487b4ff23398407b507b0f Mon Sep 17 00:00:00 2001 From: Vignesh Raghavendra Date: Mon, 10 May 2021 23:44:22 +0530 Subject: board: ti: am64x: Parse MAC address from board EEPROM Parse MAC addresses from EEPROM and set them in the env. This is needed to get MAC address for additional ethernet ports on the EVM. Signed-off-by: Vignesh Raghavendra --- board/ti/am64x/evm.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'board') diff --git a/board/ti/am64x/evm.c b/board/ti/am64x/evm.c index a1ffcb929c..35cd9e027c 100644 --- a/board/ti/am64x/evm.c +++ b/board/ti/am64x/evm.c @@ -136,8 +136,17 @@ static void setup_serial(void) int board_late_init(void) { if (IS_ENABLED(CONFIG_TI_I2C_BOARD_DETECT)) { + struct ti_am6_eeprom *ep = TI_AM6_EEPROM_DATA; + setup_board_eeprom_env(); setup_serial(); + /* + * The first MAC address for ethernet a.k.a. ethernet0 comes from + * efuse populated via the am654 gigabit eth switch subsystem driver. + * All the other ones are populated via EEPROM, hence continue with + * an index of 1. + */ + board_ti_am6_set_ethaddr(1, ep->mac_addr_cnt); } return 0; -- cgit