[U-Boot] [PATCH v4 00/30]

This patchset adds support for the new Keystone 2 Industrial Communication Engine board.
This patchset includes the introduction of embedded FIT images in U-boot. This creates a FIT image of dtb files that enables board specific code to select which DTB to use at runtime. Initially during boot a generic DTB is required that enables board detection to occur and once it has can later be swapped out for the correct dtb.
Version 4 changes: Rebased on top of master. Tweaks done to patches 2 and 3 since functions have been added and tweaked in spl_fit.c. Left reviewed by as is since changes weren't drastic.
Version 3 changes: Fixed minor comments that were missed in rev 2.
Version 2 changes: Some patches were dropped since equivalent changes have already be incorporated in upstream already.
The addition davinci i2c device model in upstream resulted in some patches having to be added or tweaked.
The DT for K2G ICE is based on the version that has been accepted into Linux mainline https://lkml.org/lkml/2017/5/22/28
Franklin S Cooper Jr (29): spl: fit: Break out some functions into a common file boot_fit: Create helper functions that can be used to select DTB out of FIT fdt: Enable selecting correct DTB from appended FIT Image ti: common: board_detect: Add function to determine if EEPROM was read dts: Allow OF_LIST to depend on FIT_EMBED ARM: dts: k2g: Introduce U-boot specific dtsi file arm: dts: Add new "generic" 66AK2Gx device tree file. board_f: Add new function to allow runtime DTB selection Makefile: Build additional binaries for dtb FIT blobs appended to U-boot ARM: keystone2: Allow to build with all image formats ARM: k2g: Define embedded_dtb_select for runtime DTB selection in U-boot ARM: keystone2: Define board_fit_config_name_match for Keystone 2 boards ks2_evm: Add EEPROM based board detection defconfig: keystone2: Enable U-boot runtime DTB detection ARM: keystone2: Add additional fields used for DDR3 configuration ARM: k2g: Program DDR PHY MR2 register with the default value ARM: k2g: Program DDRPHY_DATX8 registers via mask and value variables ks2_evm: Add EEPROM based board detection helper functions ARM: k2g: Add pinmux support for K2G ICE evm ARM: k2g: Add DDR3 configuration for K2G ICE evm board: ks2: Use board detection to wrap code not specific to K2G ICE evm ARM: k2g: Use board detection to wrap K2G GP specific calls ARM: k2g: Update board_name u-boot env variable at runtime ARM: dts: keystone-k2g: Remove skeleton.dtsi ARM: dts: keystone-k2g-evm: Add unit address to memory node ARM: dts: k2g: Disable netcp by default ARM: dts: k2g: Add DT support for K2G Industrial Communication Engine evm ARM: k2g: Add K2G ICE DTB to the list of possible DTBs defconfig: k2g_evm_defconfig: Add K2G ICE to OF_LIST
Nishanth Menon (1): ti: common: board_detect: Allow settings board detection variables manually
.gitignore | 1 + Makefile | 18 +++++- arch/arm/dts/Makefile | 4 +- arch/arm/dts/keystone-k2g-evm-u-boot.dtsi | 19 ++++++ arch/arm/dts/keystone-k2g-evm.dts | 9 +++ arch/arm/dts/keystone-k2g-generic-u-boot.dtsi | 19 ++++++ arch/arm/dts/keystone-k2g-generic.dts | 28 +++++++++ arch/arm/dts/keystone-k2g-ice-u-boot.dtsi | 19 ++++++ arch/arm/dts/keystone-k2g-ice.dts | 36 +++++++++++ arch/arm/dts/keystone-k2g-netcp.dtsi | 1 + arch/arm/dts/keystone-k2g.dtsi | 8 +-- arch/arm/mach-keystone/config.mk | 4 +- arch/arm/mach-keystone/ddr3.c | 35 ++++++++--- arch/arm/mach-keystone/include/mach/ddr3.h | 14 +++++ arch/arm/mach-keystone/include/mach/hardware.h | 3 + board/ti/common/board_detect.c | 34 ++++++++++ board/ti/common/board_detect.h | 26 ++++++++ board/ti/ks2_evm/board.c | 21 +++++-- board/ti/ks2_evm/board.h | 21 +++++++ board/ti/ks2_evm/board_k2e.c | 10 +++ board/ti/ks2_evm/board_k2g.c | 86 +++++++++++++++++++++++--- board/ti/ks2_evm/board_k2hk.c | 10 +++ board/ti/ks2_evm/board_k2l.c | 10 +++ board/ti/ks2_evm/ddr3_k2g.c | 78 ++++++++++++++++++++++- board/ti/ks2_evm/mux-k2g.h | 45 +++++++++++++- common/Kconfig | 16 +++++ common/Makefile | 2 + common/board_f.c | 3 + common/boot_fit.c | 80 ++++++++++++++++++++++++ common/common_fit.c | 62 +++++++++++++++++++ common/spl/spl_fit.c | 54 +--------------- configs/k2e_evm_defconfig | 3 + configs/k2g_evm_defconfig | 3 + configs/k2hk_evm_defconfig | 3 + configs/k2l_evm_defconfig | 3 + dts/Kconfig | 11 ++-- include/boot_fit.h | 9 +++ include/common.h | 4 ++ include/configs/k2g_evm.h | 13 +++- include/image.h | 10 +++ lib/fdtdec.c | 10 +++ 41 files changed, 749 insertions(+), 96 deletions(-) create mode 100644 arch/arm/dts/keystone-k2g-evm-u-boot.dtsi create mode 100644 arch/arm/dts/keystone-k2g-generic-u-boot.dtsi create mode 100644 arch/arm/dts/keystone-k2g-generic.dts create mode 100644 arch/arm/dts/keystone-k2g-ice-u-boot.dtsi create mode 100644 arch/arm/dts/keystone-k2g-ice.dts create mode 100644 common/boot_fit.c create mode 100644 common/common_fit.c create mode 100644 include/boot_fit.h

From: Nishanth Menon nm@ti.com
In some situations the EEPROM used for board detection may not be programmed or simply programmed incorrectly. Therefore, it may be necessary to "simulate" reading the contents of the EEPROM to set appropriate variables used in the board detection code.
This may also be helpful in certain boot modes where doing i2c reads may be costly and the config supports running only a specific board.
Signed-off-by: Nishanth Menon nm@ti.com Signed-off-by: Tero Kristo t-kristo@ti.com Signed-off-by: Keerthy j-keerthy@ti.com Signed-off-by: Franklin S Cooper Jr. fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- board/ti/common/board_detect.c | 24 ++++++++++++++++++++++++ board/ti/common/board_detect.h | 17 +++++++++++++++++ 2 files changed, 41 insertions(+)
diff --git a/board/ti/common/board_detect.c b/board/ti/common/board_detect.c index 6fdcb61..bf594cb 100644 --- a/board/ti/common/board_detect.c +++ b/board/ti/common/board_detect.c @@ -173,6 +173,30 @@ static int __maybe_unused ti_i2c_eeprom_get(int bus_addr, int dev_addr, return 0; }
+int __maybe_unused ti_i2c_eeprom_am_set(const char *name, const char *rev) +{ + struct ti_common_eeprom *ep; + + if (!name || !rev) + return -1; + + ep = TI_EEPROM_DATA; + if (ep->header == TI_EEPROM_HEADER_MAGIC) + goto already_set; + + /* Set to 0 all fields */ + memset(ep, 0, sizeof(*ep)); + strncpy(ep->name, name, TI_EEPROM_HDR_NAME_LEN); + strncpy(ep->version, rev, TI_EEPROM_HDR_REV_LEN); + /* Some dummy serial number to identify the platform */ + strncpy(ep->serial, "0000", TI_EEPROM_HDR_SERIAL_LEN); + /* Mark it with a valid header */ + ep->header = TI_EEPROM_HEADER_MAGIC; + +already_set: + return 0; +} + int __maybe_unused ti_i2c_eeprom_am_get(int bus_addr, int dev_addr) { int rc; diff --git a/board/ti/common/board_detect.h b/board/ti/common/board_detect.h index 88b0a59..e8d9484 100644 --- a/board/ti/common/board_detect.h +++ b/board/ti/common/board_detect.h @@ -205,4 +205,21 @@ void set_board_info_env(char *name); */ void board_ti_set_ethaddr(int index);
+/** + * ti_i2c_eeprom_am_set() - Setup the eeprom data with predefined values + * @name: Name of the board + * @rev: Revision of the board + * + * In some cases such as in RTC-only mode, we are able to skip reading eeprom + * and wasting i2c based initialization time by using predefined flags for + * detecting what platform we are booting on. For those platforms, provide + * a handy function to pre-program information. + * + * NOTE: many eeprom information such as serial number, mac address etc is not + * available. + * + * Return: 0 if all went fine, else return error. + */ +int ti_i2c_eeprom_am_set(const char *name, const char *rev); + #endif /* __BOARD_DETECT_H */

On Fri, Jun 16, 2017 at 05:25:04PM -0500, Cooper Jr., Franklin wrote:
From: Nishanth Menon nm@ti.com
In some situations the EEPROM used for board detection may not be programmed or simply programmed incorrectly. Therefore, it may be necessary to "simulate" reading the contents of the EEPROM to set appropriate variables used in the board detection code.
This may also be helpful in certain boot modes where doing i2c reads may be costly and the config supports running only a specific board.
Signed-off-by: Nishanth Menon nm@ti.com Signed-off-by: Tero Kristo t-kristo@ti.com Signed-off-by: Keerthy j-keerthy@ti.com Signed-off-by: Franklin S Cooper Jr. fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Some of the functions within spl_fit will be used for non spl purposes. Instead of duplicating functions simply break the functions to be reused into its own file.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com Reviewed-by: Simon Glass sjg@chromium.org --- Version 4 changes: Updated to work with latest master. Reviewed-bys were left in since changes weren't significant.
common/Makefile | 1 + common/common_fit.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++ common/spl/spl_fit.c | 54 +-------------------------------------------- include/image.h | 7 ++++++ 4 files changed, 71 insertions(+), 53 deletions(-) create mode 100644 common/common_fit.c
diff --git a/common/Makefile b/common/Makefile index 539cf98..d6d0764 100644 --- a/common/Makefile +++ b/common/Makefile @@ -96,6 +96,7 @@ obj-$(CONFIG_SPL_DFU_SUPPORT) += cli_hush.o obj-$(CONFIG_SPL_HASH_SUPPORT) += hash.o obj-$(CONFIG_ENV_IS_IN_FLASH) += env_flash.o obj-$(CONFIG_SPL_YMODEM_SUPPORT) += xyzModem.o +obj-$(CONFIG_SPL_LOAD_FIT) += common_fit.o obj-$(CONFIG_SPL_NET_SUPPORT) += miiphyutil.o obj-$(CONFIG_SPL_OF_LIBFDT) += fdt_support.o ifdef CONFIG_SPL_USB_HOST_SUPPORT diff --git a/common/common_fit.c b/common/common_fit.c new file mode 100644 index 0000000..5f5f3f9 --- /dev/null +++ b/common/common_fit.c @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2016 Google, Inc + * Written by Simon Glass sjg@chromium.org + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <errno.h> +#include <image.h> +#include <libfdt.h> +#include <spl.h> + +ulong fdt_getprop_u32(const void *fdt, int node, const char *prop) +{ + const u32 *cell; + int len; + + cell = fdt_getprop(fdt, node, prop, &len); + if (!cell || len != sizeof(*cell)) + return FDT_ERROR; + + return fdt32_to_cpu(*cell); +} + +/* + * Iterate over all /configurations subnodes and call a platform specific + * function to find the matching configuration. + * Returns the node offset or a negative error number. + */ +int fit_find_config_node(const void *fdt) +{ + const char *name; + int conf, node, len; + + conf = fdt_path_offset(fdt, FIT_CONFS_PATH); + if (conf < 0) { + debug("%s: Cannot find /configurations node: %d\n", __func__, + conf); + return -EINVAL; + } + for (node = fdt_first_subnode(fdt, conf); + node >= 0; + node = fdt_next_subnode(fdt, node)) { + name = fdt_getprop(fdt, node, "description", &len); + if (!name) { +#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT + printf("%s: Missing FDT description in DTB\n", + __func__); +#endif + return -EINVAL; + } + if (board_fit_config_name_match(name)) + continue; + + debug("Selecting config '%s'", name); + + return node; + } + + return -ENOENT; +} diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c index 4c42a96..d2a352e 100644 --- a/common/spl/spl_fit.c +++ b/common/spl/spl_fit.c @@ -11,58 +11,6 @@ #include <libfdt.h> #include <spl.h>
-#define FDT_ERROR ((ulong)(-1)) - -static ulong fdt_getprop_u32(const void *fdt, int node, const char *prop) -{ - const u32 *cell; - int len; - - cell = fdt_getprop(fdt, node, prop, &len); - if (!cell || len != sizeof(*cell)) - return FDT_ERROR; - - return fdt32_to_cpu(*cell); -} - -/* - * Iterate over all /configurations subnodes and call a platform specific - * function to find the matching configuration. - * Returns the node offset or a negative error number. - */ -static int spl_fit_find_config_node(const void *fdt) -{ - const char *name; - int conf, node, len; - - conf = fdt_path_offset(fdt, FIT_CONFS_PATH); - if (conf < 0) { - debug("%s: Cannot find /configurations node: %d\n", __func__, - conf); - return -EINVAL; - } - for (node = fdt_first_subnode(fdt, conf); - node >= 0; - node = fdt_next_subnode(fdt, node)) { - name = fdt_getprop(fdt, node, "description", &len); - if (!name) { -#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT - printf("%s: Missing FDT description in DTB\n", - __func__); -#endif - return -EINVAL; - } - if (board_fit_config_name_match(name)) - continue; - - debug("Selecting config '%s'", name); - - return node; - } - - return -ENOENT; -} - /** * spl_fit_get_image_node(): By using the matching configuration subnode, * retrieve the name of an image, specified by a property name and an index @@ -82,7 +30,7 @@ static int spl_fit_get_image_node(const void *fit, int images, int node, conf_node; int len, i;
- conf_node = spl_fit_find_config_node(fit); + conf_node = fit_find_config_node(fit); if (conf_node < 0) { #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT printf("No matching DT out of these options:\n"); diff --git a/include/image.h b/include/image.h index fcfe730..6c9d051 100644 --- a/include/image.h +++ b/include/image.h @@ -18,6 +18,7 @@
#include "compiler.h" #include <asm/byteorder.h> +#include <linux/kconfig.h>
/* Define this to avoid #ifdefs later on */ struct lmb; @@ -1270,6 +1271,12 @@ int board_fit_config_name_match(const char *name); void board_fit_image_post_process(void **p_image, size_t *p_size); #endif /* CONFIG_SPL_FIT_IMAGE_POST_PROCESS */
+#if IS_ENABLED(CONFIG_SPL_LOAD_FIT) + +#define FDT_ERROR ((ulong)(-1)) + +#endif + /** * Mapping of image types to function handlers to be invoked on the associated * loaded images

On Fri, Jun 16, 2017 at 05:25:05PM -0500, Cooper Jr., Franklin wrote:
Some of the functions within spl_fit will be used for non spl purposes. Instead of duplicating functions simply break the functions to be reused into its own file.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com Reviewed-by: Simon Glass sjg@chromium.org
Applied to u-boot/master, thanks!

Some platforms may append a FIT image to the U-boot image. This function aids in parsing the FIT image and selecting the correct DTB at runtime.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- Version 4 changes: Updated to work with latest master. Reviewed-bys were left in since changes weren't significant.
common/Kconfig | 7 +++++ common/Makefile | 1 + common/boot_fit.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ include/boot_fit.h | 9 ++++++ include/image.h | 5 +++- 5 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 common/boot_fit.c create mode 100644 include/boot_fit.h
diff --git a/common/Kconfig b/common/Kconfig index c49199b..0f9ba17 100644 --- a/common/Kconfig +++ b/common/Kconfig @@ -437,6 +437,13 @@ config SYS_STDIO_DEREGISTER
endmenu
+config FIT_EMBED + bool "Support a FIT image embedded in the U-boot image" + help + This option provides hooks to allow U-boot to parse an + appended FIT image and enable board specific code to then select + the correct DTB to be used. + config DEFAULT_FDT_FILE string "Default fdt file" help diff --git a/common/Makefile b/common/Makefile index d6d0764..8540fbc 100644 --- a/common/Makefile +++ b/common/Makefile @@ -151,6 +151,7 @@ obj-y += image.o obj-$(CONFIG_ANDROID_BOOT_IMAGE) += image-android.o obj-$(CONFIG_$(SPL_)OF_LIBFDT) += image-fdt.o obj-$(CONFIG_$(SPL_)FIT) += image-fit.o +obj-$(CONFIG_FIT_EMBED) += boot_fit.o common_fit.o obj-$(CONFIG_$(SPL_)FIT_SIGNATURE) += image-sig.o obj-$(CONFIG_IO_TRACE) += iotrace.o obj-y += memsize.o diff --git a/common/boot_fit.c b/common/boot_fit.c new file mode 100644 index 0000000..51440a6 --- /dev/null +++ b/common/boot_fit.c @@ -0,0 +1,80 @@ +/* + * (C) Copyright 2017 + * Texas Instruments, <www.ti.com> + * + * Franklin S Cooper Jr. fcooper@ti.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <boot_fit.h> +#include <common.h> +#include <errno.h> +#include <image.h> +#include <libfdt.h> + +int fdt_offset(void *fit) +{ + int images, node, fdt_len, fdt_node, fdt_offset; + const char *fdt_name; + + node = fit_find_config_node(fit); + if (node < 0) + return node; + + images = fdt_path_offset(fit, FIT_IMAGES_PATH); + if (images < 0) { + debug("%s: Cannot find /images node: %d\n", __func__, images); + return FDT_ERROR; + } + + fdt_name = fdt_getprop(fit, node, FIT_FDT_PROP, &fdt_len); + if (!fdt_name) { + debug("%s: Cannot find fdt name property: %d\n", + __func__, fdt_len); + return -EINVAL; + } + + fdt_node = fdt_subnode_offset(fit, images, fdt_name); + if (fdt_node < 0) { + debug("%s: Cannot find fdt node '%s': %d\n", + __func__, fdt_name, fdt_node); + return -EINVAL; + } + + fdt_offset = fdt_getprop_u32(fit, fdt_node, "data-offset"); + + if (fdt_offset == FDT_ERROR) + return -ENOENT; + + fdt_len = fdt_getprop_u32(fit, fdt_node, "data-size"); + + if (fdt_len < 0) + return fdt_len; + + return fdt_offset; +} + +void *locate_dtb_in_fit(void *fit) +{ + struct image_header *header; + int size; + int ret; + + size = fdt_totalsize(fit); + size = (size + 3) & ~3; + + header = (struct image_header *)fit; + + if (image_get_magic(header) != FDT_MAGIC) { + debug("No FIT image appended to U-boot\n"); + return NULL; + } + + ret = fdt_offset(fit); + + if (ret <= 0) + return NULL; + else + return (void *)fit+size+ret; +} diff --git a/include/boot_fit.h b/include/boot_fit.h new file mode 100644 index 0000000..b7d2462 --- /dev/null +++ b/include/boot_fit.h @@ -0,0 +1,9 @@ +/* + * Copyright (C) 2017 Texas Instruments + * Written by Franklin Cooper Jr. fcooper@ti.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +int fdt_offset(void *fit); +void *locate_dtb_in_fit(void *fit); diff --git a/include/image.h b/include/image.h index 6c9d051..18f912f 100644 --- a/include/image.h +++ b/include/image.h @@ -1271,10 +1271,13 @@ int board_fit_config_name_match(const char *name); void board_fit_image_post_process(void **p_image, size_t *p_size); #endif /* CONFIG_SPL_FIT_IMAGE_POST_PROCESS */
-#if IS_ENABLED(CONFIG_SPL_LOAD_FIT) +#if IS_ENABLED(CONFIG_SPL_LOAD_FIT) || IS_ENABLED(CONFIG_FIT_EMBED)
#define FDT_ERROR ((ulong)(-1))
+ulong fdt_getprop_u32(const void *fdt, int node, const char *prop); +int fit_find_config_node(const void *fdt); + #endif
/**

On Fri, Jun 16, 2017 at 05:25:06PM -0500, Cooper Jr., Franklin wrote:
Some platforms may append a FIT image to the U-boot image. This function aids in parsing the FIT image and selecting the correct DTB at runtime.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

This patch gives U-boot the runtime support to have the board specific code decide which FDT to use. This is especially useful for devices that need this type of runtime determination and also doesn't use SPL.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Lokesh Vutla lokeshvutla@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- lib/fdtdec.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/lib/fdtdec.c b/lib/fdtdec.c index 91503b8..fbb48bf 100644 --- a/lib/fdtdec.c +++ b/lib/fdtdec.c @@ -4,6 +4,7 @@ */
#ifndef USE_HOSTCC +#include <boot_fit.h> #include <common.h> #include <dm.h> #include <errno.h> @@ -1221,6 +1222,15 @@ int fdtdec_setup(void) gd->fdt_blob = (ulong *)&_image_binary_end; else gd->fdt_blob = (ulong *)&__bss_end; + +# elif defined CONFIG_FIT_EMBED + gd->fdt_blob = locate_dtb_in_fit(&_end); + + if (gd->fdt_blob == NULL || gd->fdt_blob <= ((void *)&_end)) { + puts("Failed to find proper dtb in embedded FIT Image\n"); + return -1; + } + # else /* FDT is at end of image */ gd->fdt_blob = (ulong *)&_end;

On Fri, Jun 16, 2017 at 05:25:07PM -0500, Cooper Jr., Franklin wrote:
This patch gives U-boot the runtime support to have the board specific code decide which FDT to use. This is especially useful for devices that need this type of runtime determination and also doesn't use SPL.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Lokesh Vutla lokeshvutla@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

When the EEPROM is first read its contents are stored in memory as a cache to avoid further I2C operations. To determine if the EEPROM was previously read the easiest way is to check the memory to see if the EEPROM's magic header value is set. Create a new function that can determine if the EEPROM was previously read or not without having to perform a I2C transaction.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- board/ti/common/board_detect.c | 10 ++++++++++ board/ti/common/board_detect.h | 9 +++++++++ 2 files changed, 19 insertions(+)
diff --git a/board/ti/common/board_detect.c b/board/ti/common/board_detect.c index bf594cb..1da5ace 100644 --- a/board/ti/common/board_detect.c +++ b/board/ti/common/board_detect.c @@ -457,3 +457,13 @@ void board_ti_set_ethaddr(int index) } } } + +bool __maybe_unused board_ti_was_eeprom_read(void) +{ + struct ti_common_eeprom *ep = TI_EEPROM_DATA; + + if (ep->header == TI_EEPROM_HEADER_MAGIC) + return true; + else + return false; +} diff --git a/board/ti/common/board_detect.h b/board/ti/common/board_detect.h index e8d9484..893e1ed 100644 --- a/board/ti/common/board_detect.h +++ b/board/ti/common/board_detect.h @@ -206,6 +206,15 @@ void set_board_info_env(char *name); void board_ti_set_ethaddr(int index);
/** + * board_ti_was_eeprom_read() - Check to see if the eeprom contents have been read + * + * This function is useful to determine if the eeprom has already been read and + * its contents have already been loaded into memory. It utiltzes the magic + * number that the header value is set to upon successful eeprom read. + */ +bool board_ti_was_eeprom_read(void); + +/** * ti_i2c_eeprom_am_set() - Setup the eeprom data with predefined values * @name: Name of the board * @rev: Revision of the board

On Fri, Jun 16, 2017 at 05:25:08PM -0500, Cooper Jr., Franklin wrote:
When the EEPROM is first read its contents are stored in memory as a cache to avoid further I2C operations. To determine if the EEPROM was previously read the easiest way is to check the memory to see if the EEPROM's magic header value is set. Create a new function that can determine if the EEPROM was previously read or not without having to perform a I2C transaction.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

OF_LIST will be useable by SPL and U-boot. Therefore, update its dependency to allow it to be enable by either SPL or U-boot specific config option.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com Reviewed-by: Lokesh Vutla lokeshvutla@ti.com Acked-by: Andrew F. Davis afd@ti.com --- dts/Kconfig | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/dts/Kconfig b/dts/Kconfig index b3009af..1bc9656 100644 --- a/dts/Kconfig +++ b/dts/Kconfig @@ -90,14 +90,15 @@ config DEFAULT_DEVICE_TREE
config OF_LIST string "List of device tree files to include for DT control" - depends on SPL_LOAD_FIT + depends on SPL_LOAD_FIT || FIT_EMBED default DEFAULT_DEVICE_TREE help This option specifies a list of device tree files to use for DT - control. These will be packaged into a FIT. At run-time, SPL will - select the correct DT to use by examining the hardware (e.g. - reading a board ID value). This is a list of device tree files - (without the directory or .dtb suffix) separated by <space>. + control. These will be packaged into a FIT. At run-time, U-boot + or SPL will select the correct DT to use by examining the + hardware (e.g. reading a board ID value). This is a list of + device tree files (without the directory or .dtb suffix) + separated by <space>.
config OF_SPL_REMOVE_PROPS string "List of device tree properties to drop for SPL"

On Fri, Jun 16, 2017 at 05:25:09PM -0500, Cooper Jr., Franklin wrote:
OF_LIST will be useable by SPL and U-boot. Therefore, update its dependency to allow it to be enable by either SPL or U-boot specific config option.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com Reviewed-by: Lokesh Vutla lokeshvutla@ti.com Acked-by: Andrew F. Davis afd@ti.com
Applied to u-boot/master, thanks!

Introduce K2G evm specific dtsi file for U-boot specific configurations. This will help seperate U-boot only configurations thus making it easier to keep device tree files synced between U-boot and Linux.
For now only add nodes to allow i2c drivers to be probed early during the boot process.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- arch/arm/dts/keystone-k2g-evm-u-boot.dtsi | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 arch/arm/dts/keystone-k2g-evm-u-boot.dtsi
diff --git a/arch/arm/dts/keystone-k2g-evm-u-boot.dtsi b/arch/arm/dts/keystone-k2g-evm-u-boot.dtsi new file mode 100644 index 0000000..4d073f3 --- /dev/null +++ b/arch/arm/dts/keystone-k2g-evm-u-boot.dtsi @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/ + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/{ + soc { + u-boot,dm-pre-reloc; + }; +}; + +&i2c0 { + u-boot,dm-pre-reloc; +}; + +&i2c1 { + u-boot,dm-pre-reloc; +};

On Fri, Jun 16, 2017 at 05:25:10PM -0500, Cooper Jr., Franklin wrote:
Introduce K2G evm specific dtsi file for U-boot specific configurations. This will help seperate U-boot only configurations thus making it easier to keep device tree files synced between U-boot and Linux.
For now only add nodes to allow i2c drivers to be probed early during the boot process.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

With U-boot runtime board detect for DTB selection a "default" dtb needs to be created. This will be used temporarily until the "proper" dtb is selected.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- arch/arm/dts/Makefile | 3 ++- arch/arm/dts/keystone-k2g-generic-u-boot.dtsi | 19 ++++++++++++++++++ arch/arm/dts/keystone-k2g-generic.dts | 28 +++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 arch/arm/dts/keystone-k2g-generic-u-boot.dtsi create mode 100644 arch/arm/dts/keystone-k2g-generic.dts
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index 61a7218..cd10260 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -365,7 +365,8 @@ dtb-$(CONFIG_ARCH_MX7ULP) += imx7ulp-evk.dtb dtb-$(CONFIG_SOC_KEYSTONE) += keystone-k2hk-evm.dtb \ keystone-k2l-evm.dtb \ keystone-k2e-evm.dtb \ - keystone-k2g-evm.dtb + keystone-k2g-evm.dtb \ + keystone-k2g-generic.dtb
dtb-$(CONFIG_TARGET_AT91SAM9263EK) += at91sam9263ek.dtb
diff --git a/arch/arm/dts/keystone-k2g-generic-u-boot.dtsi b/arch/arm/dts/keystone-k2g-generic-u-boot.dtsi new file mode 100644 index 0000000..4d073f3 --- /dev/null +++ b/arch/arm/dts/keystone-k2g-generic-u-boot.dtsi @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/ + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/{ + soc { + u-boot,dm-pre-reloc; + }; +}; + +&i2c0 { + u-boot,dm-pre-reloc; +}; + +&i2c1 { + u-boot,dm-pre-reloc; +}; diff --git a/arch/arm/dts/keystone-k2g-generic.dts b/arch/arm/dts/keystone-k2g-generic.dts new file mode 100644 index 0000000..c411c3d --- /dev/null +++ b/arch/arm/dts/keystone-k2g-generic.dts @@ -0,0 +1,28 @@ +/* + * Device Tree Source for Generic 66AK2G0X EVM + * + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/ + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/dts-v1/; + +#include "keystone-k2g.dtsi" + +/ { + compatible = "ti,k2g-generic", "ti,k2g", "ti,keystone"; + model = "Texas Instruments 66AK2G02 Generic"; + + chosen { + stdout-path = &uart0; + }; +}; + +&i2c0 { + status = "okay"; +}; + +&i2c1 { + status = "okay"; +};

On Fri, Jun 16, 2017 at 05:25:11PM -0500, Cooper Jr., Franklin wrote:
With U-boot runtime board detect for DTB selection a "default" dtb needs to be created. This will be used temporarily until the "proper" dtb is selected.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Runtime U-boot dtb selection is generally a two step process. First step is to simply use an initial generic dtb. The second step is to select the dtb and perhaps execute additional code ones U-boot knows what board it is running on. Embedded_dtb_select handles the second step by allowing board specific code to run and perform what ever necessary configuration that is needed.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- common/Kconfig | 9 +++++++++ common/board_f.c | 3 +++ include/common.h | 4 ++++ 3 files changed, 16 insertions(+)
diff --git a/common/Kconfig b/common/Kconfig index 0f9ba17..c58f807 100644 --- a/common/Kconfig +++ b/common/Kconfig @@ -437,6 +437,15 @@ config SYS_STDIO_DEREGISTER
endmenu
+config DTB_RESELECT + bool "Support swapping dtbs at a later point in boot" + depends on FIT_EMBED + help + It is possible during initial boot you may need to use a generic + dtb until you can fully determine the board your running on. This + config allows boards to implement a function at a later point + during boot to switch to the "correct" dtb. + config FIT_EMBED bool "Support a FIT image embedded in the U-boot image" help diff --git a/common/board_f.c b/common/board_f.c index 8bf9acc..6d51b51 100644 --- a/common/board_f.c +++ b/common/board_f.c @@ -816,6 +816,9 @@ static const init_fnc_t init_sequence_f[] = { #if defined(CONFIG_DISPLAY_CPUINFO) print_cpuinfo, /* display cpu info (and speed) */ #endif +#if defined(CONFIG_DTB_RESELECT) + embedded_dtb_select, +#endif #if defined(CONFIG_DISPLAY_BOARDINFO) show_board_info, #endif diff --git a/include/common.h b/include/common.h index 638c45b..739ae45 100644 --- a/include/common.h +++ b/include/common.h @@ -359,6 +359,10 @@ int get_env_id (void); void pci_init (void); void pci_init_board(void);
+#if defined(CONFIG_DTB_RESELECT) +int embedded_dtb_select(void); +#endif + int misc_init_f (void); int misc_init_r (void);

On Fri, Jun 16, 2017 at 05:25:12PM -0500, Cooper Jr., Franklin wrote:
Runtime U-boot dtb selection is generally a two step process. First step is to simply use an initial generic dtb. The second step is to select the dtb and perhaps execute additional code ones U-boot knows what board it is running on. Embedded_dtb_select handles the second step by allowing board specific code to run and perform what ever necessary configuration that is needed.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Add additional make targets and options for building embedded FIT U-boot images.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- .gitignore | 1 + Makefile | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/.gitignore b/.gitignore index 7fac5b3..29757aa 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,7 @@ # # Top-level generic files # +fit-dtb.blob /MLO* /SPL* /System.map diff --git a/Makefile b/Makefile index 62d0482..49dbd09 100644 --- a/Makefile +++ b/Makefile @@ -873,7 +873,21 @@ dts/dt.dtb: checkdtc u-boot quiet_cmd_copy = COPY $@ cmd_copy = cp $< $@
-ifeq ($(CONFIG_OF_SEPARATE),y) +ifeq ($(CONFIG_FIT_EMBED),y) + +fit-dtb.blob: dts/dt.dtb FORCE + $(call if_changed,mkimage) + +MKIMAGEFLAGS_fit-dtb.blob = -f auto -A $(ARCH) -T firmware -C none -O u-boot \ + -a 0 -e 0 -E \ + $(patsubst %,-b arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) -d /dev/null + +u-boot-fit-dtb.bin: u-boot-nodtb.bin fit-dtb.blob + $(call if_changed,cat) + +u-boot.bin: u-boot-fit-dtb.bin FORCE + $(call if_changed,copy) +else ifeq ($(CONFIG_OF_SEPARATE),y) u-boot-dtb.bin: u-boot-nodtb.bin dts/dt.dtb FORCE $(call if_changed,cat)
@@ -1473,7 +1487,7 @@ CLEAN_DIRS += $(MODVERDIR) \ $(filter-out include, $(shell ls -1 $d 2>/dev/null))))
CLEAN_FILES += include/bmp_logo.h include/bmp_logo_data.h \ - boot* u-boot* MLO* SPL System.map + boot* u-boot* MLO* SPL System.map fit-dtb.blob
# Directories & files removed with 'make mrproper' MRPROPER_DIRS += include/config include/generated spl tpl \

On Fri, Jun 16, 2017 at 05:25:13PM -0500, Cooper Jr., Franklin wrote:
Add additional make targets and options for building embedded FIT U-boot images.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

u-boot.bin is a copy of: u-boot-fit-dtb.bin if CONFIG_FIT_EMBED is enabled, u-boot-dtb.bin if CONFIG_OF_SEPARATE is enabled, u-boot-nodtb.bin if DT is not enabled. So, use u-boot.bin to to generate keystone images instead of u-boot-dtb.bin
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- arch/arm/mach-keystone/config.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/mach-keystone/config.mk b/arch/arm/mach-keystone/config.mk index db556ea..5806f8f 100644 --- a/arch/arm/mach-keystone/config.mk +++ b/arch/arm/mach-keystone/config.mk @@ -22,13 +22,13 @@ spl/u-boot-spl.gph: spl/u-boot-spl.bin FORCE
OBJCOPYFLAGS_u-boot-spi.gph = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO) \ --gap-fill=0 -u-boot-spi.gph: spl/u-boot-spl.gph u-boot-dtb.img FORCE +u-boot-spi.gph: spl/u-boot-spl.gph u-boot.img FORCE $(call if_changed,pad_cat)
ifndef CONFIG_SPL_BUILD MKIMAGEFLAGS_MLO = -A $(ARCH) -T gpimage -C none \ -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) -n U-Boot -MLO: u-boot-dtb.bin FORCE +MLO: u-boot.bin FORCE $(call if_changed,mkimage) @dd if=/dev/zero bs=8 count=1 2>/dev/null >> $@ endif

On Fri, Jun 16, 2017 at 05:25:14PM -0500, Cooper Jr., Franklin wrote:
u-boot.bin is a copy of: u-boot-fit-dtb.bin if CONFIG_FIT_EMBED is enabled, u-boot-dtb.bin if CONFIG_OF_SEPARATE is enabled, u-boot-nodtb.bin if DT is not enabled. So, use u-boot.bin to to generate keystone images instead of u-boot-dtb.bin
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

For K2G, runtime DTB selection utilizes the embedded_dtb_select function. Therefore, define the function which will perform a EEPROM read and then retries selecting the correct dtb now that it can detect which board its on. For other Keystone devices use an empty function since they will still use the embedded FIT functionality but their FIT will only contain a single dtb.
Most production K2G boards do not have their EEPROM programmed. Therefore, perform a test to verify a K2G GP is currently being used and if it is then set the values normally set by a EEPROM read.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- board/ti/ks2_evm/board.c | 7 +++++++ board/ti/ks2_evm/board_k2g.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+)
diff --git a/board/ti/ks2_evm/board.c b/board/ti/ks2_evm/board.c index 03254e1..4792311 100644 --- a/board/ti/ks2_evm/board.c +++ b/board/ti/ks2_evm/board.c @@ -277,3 +277,10 @@ void ft_board_setup_ex(void *blob, bd_t *bd) ddr3_check_ecc_int(KS2_DDR3A_EMIF_CTRL_BASE); } #endif /* CONFIG_OF_BOARD_SETUP */ + +#if defined(CONFIG_DTB_RESELECT) +int __weak embedded_dtb_select(void) +{ + return 0; +} +#endif diff --git a/board/ti/ks2_evm/board_k2g.c b/board/ti/ks2_evm/board_k2g.c index f0bd31d..3c75e22 100644 --- a/board/ti/ks2_evm/board_k2g.c +++ b/board/ti/ks2_evm/board_k2g.c @@ -11,9 +11,13 @@ #include <asm/ti-common/keystone_net.h> #include <asm/arch/psc_defs.h> #include <asm/arch/mmc_host_def.h> +#include <fdtdec.h> +#include <i2c.h> #include "mux-k2g.h" #include "../common/board_detect.h"
+#define K2G_GP_AUDIO_CODEC_ADDRESS 0x1B + const unsigned int sysclk_array[MAX_SYSCLK] = { 19200000, 24000000, @@ -210,6 +214,40 @@ int board_mmc_init(bd_t *bis) } #endif
+#if defined(CONFIG_DTB_RESELECT) +static int k2g_alt_board_detect(void) +{ + int rc; + + rc = i2c_set_bus_num(1); + if (rc) + return rc; + + rc = i2c_probe(K2G_GP_AUDIO_CODEC_ADDRESS); + if (rc) + return rc; + + ti_i2c_eeprom_am_set("66AK2GGP", "1.0X"); + + return 0; +} + +int embedded_dtb_select(void) +{ + int rc; + + rc = k2g_alt_board_detect(); + if (rc) { + printf("Unable to do board detection\n"); + return -1; + } + + fdtdec_setup(); + + return 0; +} +#endif + #ifdef CONFIG_BOARD_EARLY_INIT_F
static void k2g_reset_mux_config(void)

On Fri, Jun 16, 2017 at 05:25:15PM -0500, Cooper Jr., Franklin wrote:
For K2G, runtime DTB selection utilizes the embedded_dtb_select function. Therefore, define the function which will perform a EEPROM read and then retries selecting the correct dtb now that it can detect which board its on. For other Keystone devices use an empty function since they will still use the embedded FIT functionality but their FIT will only contain a single dtb.
Most production K2G boards do not have their EEPROM programmed. Therefore, perform a test to verify a K2G GP is currently being used and if it is then set the values normally set by a EEPROM read.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Now with support for U-boot runtime dtb selection each board needs to define board_fit_config_name_match so U-boot can determine what the correct dtb is within the FIT blob.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- board/ti/ks2_evm/board_k2e.c | 10 ++++++++++ board/ti/ks2_evm/board_k2g.c | 14 ++++++++++++++ board/ti/ks2_evm/board_k2hk.c | 10 ++++++++++ board/ti/ks2_evm/board_k2l.c | 10 ++++++++++ 4 files changed, 44 insertions(+)
diff --git a/board/ti/ks2_evm/board_k2e.c b/board/ti/ks2_evm/board_k2e.c index 64f0c9c..266a66b 100644 --- a/board/ti/ks2_evm/board_k2e.c +++ b/board/ti/ks2_evm/board_k2e.c @@ -166,6 +166,16 @@ int get_num_eth_ports(void) } #endif
+#if defined(CONFIG_FIT_EMBED) +int board_fit_config_name_match(const char *name) +{ + if (!strcmp(name, "keystone-k2e-evm")) + return 0; + + return -1; +} +#endif + #if defined(CONFIG_BOARD_EARLY_INIT_F) int board_early_init_f(void) { diff --git a/board/ti/ks2_evm/board_k2g.c b/board/ti/ks2_evm/board_k2g.c index 3c75e22..588bfff 100644 --- a/board/ti/ks2_evm/board_k2g.c +++ b/board/ti/ks2_evm/board_k2g.c @@ -214,6 +214,20 @@ int board_mmc_init(bd_t *bis) } #endif
+#if defined(CONFIG_FIT_EMBED) +int board_fit_config_name_match(const char *name) +{ + bool eeprom_read = board_ti_was_eeprom_read(); + + if (!strcmp(name, "keystone-k2g-generic") && !eeprom_read) + return 0; + else if (!strcmp(name, "keystone-k2g-evm") && board_ti_is("66AK2GGP")) + return 0; + else + return -1; +} +#endif + #if defined(CONFIG_DTB_RESELECT) static int k2g_alt_board_detect(void) { diff --git a/board/ti/ks2_evm/board_k2hk.c b/board/ti/ks2_evm/board_k2hk.c index b35f24d..c733099 100644 --- a/board/ti/ks2_evm/board_k2hk.c +++ b/board/ti/ks2_evm/board_k2hk.c @@ -150,6 +150,16 @@ int board_early_init_f(void) } #endif
+#if defined(CONFIG_FIT_EMBED) +int board_fit_config_name_match(const char *name) +{ + if (!strcmp(name, "keystone-k2hk-evm")) + return 0; + + return -1; +} +#endif + #ifdef CONFIG_SPL_BUILD void spl_init_keystone_plls(void) { diff --git a/board/ti/ks2_evm/board_k2l.c b/board/ti/ks2_evm/board_k2l.c index f3eea42..166367b 100644 --- a/board/ti/ks2_evm/board_k2l.c +++ b/board/ti/ks2_evm/board_k2l.c @@ -138,6 +138,16 @@ int board_early_init_f(void) } #endif
+#if defined(CONFIG_FIT_EMBED) +int board_fit_config_name_match(const char *name) +{ + if (!strcmp(name, "keystone-k2l-evm")) + return 0; + + return -1; +} +#endif + #ifdef CONFIG_SPL_BUILD void spl_init_keystone_plls(void) {

On Fri, Jun 16, 2017 at 05:25:16PM -0500, Cooper Jr., Franklin wrote:
Now with support for U-boot runtime dtb selection each board needs to define board_fit_config_name_match so U-boot can determine what the correct dtb is within the FIT blob.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Some K2G evms have their EEPROM programming while most do not. Therefore, add EEPROM board detection to be used as the default method and fall back to the alternative board detection when needed.
Also reorder board configuration. Perform bare minimal configuration initially since board detection hasn't ran. Finish board configuration once the board has been identified.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- board/ti/ks2_evm/board.h | 1 + board/ti/ks2_evm/board_k2g.c | 44 +++++++++++++++++++++++--------------------- 2 files changed, 24 insertions(+), 21 deletions(-)
diff --git a/board/ti/ks2_evm/board.h b/board/ti/ks2_evm/board.h index 2bbd792..0698921 100644 --- a/board/ti/ks2_evm/board.h +++ b/board/ti/ks2_evm/board.h @@ -11,6 +11,7 @@ #define _KS2_BOARD
#include <asm/ti-common/keystone_net.h> +#include "../common/board_detect.h"
extern struct eth_priv_t eth_priv_cfg[];
diff --git a/board/ti/ks2_evm/board_k2g.c b/board/ti/ks2_evm/board_k2g.c index 588bfff..b4765f7 100644 --- a/board/ti/ks2_evm/board_k2g.c +++ b/board/ti/ks2_evm/board_k2g.c @@ -246,24 +246,6 @@ static int k2g_alt_board_detect(void) return 0; }
-int embedded_dtb_select(void) -{ - int rc; - - rc = k2g_alt_board_detect(); - if (rc) { - printf("Unable to do board detection\n"); - return -1; - } - - fdtdec_setup(); - - return 0; -} -#endif - -#ifdef CONFIG_BOARD_EARLY_INIT_F - static void k2g_reset_mux_config(void) { /* Unlock the reset mux register */ @@ -277,11 +259,20 @@ static void k2g_reset_mux_config(void) setbits_le32(KS2_RSTMUX8, RSTMUX_LOCK8_MASK); }
-int board_early_init_f(void) +int embedded_dtb_select(void) { - init_plls(); + int rc; + rc = ti_i2c_eeprom_am_get(CONFIG_EEPROM_BUS_ADDRESS, + CONFIG_EEPROM_CHIP_ADDRESS); + if (rc) { + rc = k2g_alt_board_detect(); + if (rc) { + printf("Unable to do board detection\n"); + return -1; + } + }
- k2g_mux_config(); + fdtdec_setup();
k2g_reset_mux_config();
@@ -313,6 +304,17 @@ int board_late_init(void) } #endif
+#ifdef CONFIG_BOARD_EARLY_INIT_F +int board_early_init_f(void) +{ + init_plls(); + + k2g_mux_config(); + + return 0; +} +#endif + #ifdef CONFIG_SPL_BUILD void spl_init_keystone_plls(void) {

On Fri, Jun 16, 2017 at 05:25:17PM -0500, Cooper Jr., Franklin wrote:
Some K2G evms have their EEPROM programming while most do not. Therefore, add EEPROM board detection to be used as the default method and fall back to the alternative board detection when needed.
Also reorder board configuration. Perform bare minimal configuration initially since board detection hasn't ran. Finish board configuration once the board has been identified.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Enable various config options to allow U-boot at runtime to select the proper dtb to use from the list of dtb's within the FIT image.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- configs/k2e_evm_defconfig | 3 +++ configs/k2g_evm_defconfig | 3 +++ configs/k2hk_evm_defconfig | 3 +++ configs/k2l_evm_defconfig | 3 +++ 4 files changed, 12 insertions(+)
diff --git a/configs/k2e_evm_defconfig b/configs/k2e_evm_defconfig index 83e2138..9ab08c6 100644 --- a/configs/k2e_evm_defconfig +++ b/configs/k2e_evm_defconfig @@ -44,3 +44,6 @@ CONFIG_USB=y CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y CONFIG_USB_STORAGE=y +CONFIG_DTB_RESELECT=y +CONFIG_FIT_EMBED=y +CONFIG_OF_LIST="keystone-k2e-evm" diff --git a/configs/k2g_evm_defconfig b/configs/k2g_evm_defconfig index 674ddcc..7b105da 100644 --- a/configs/k2g_evm_defconfig +++ b/configs/k2g_evm_defconfig @@ -46,3 +46,6 @@ CONFIG_USB=y CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y CONFIG_USB_STORAGE=y +CONFIG_DTB_RESELECT=y +CONFIG_FIT_EMBED=y +CONFIG_OF_LIST="keystone-k2g-generic keystone-k2g-evm" diff --git a/configs/k2hk_evm_defconfig b/configs/k2hk_evm_defconfig index 7dc5cf5..a751a4f 100644 --- a/configs/k2hk_evm_defconfig +++ b/configs/k2hk_evm_defconfig @@ -43,3 +43,6 @@ CONFIG_USB=y CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y CONFIG_USB_STORAGE=y +CONFIG_DTB_RESELECT=y +CONFIG_FIT_EMBED=y +CONFIG_OF_LIST="keystone-k2hk-evm" diff --git a/configs/k2l_evm_defconfig b/configs/k2l_evm_defconfig index 6be4941..cf24d27 100644 --- a/configs/k2l_evm_defconfig +++ b/configs/k2l_evm_defconfig @@ -43,3 +43,6 @@ CONFIG_USB=y CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y CONFIG_USB_STORAGE=y +CONFIG_DTB_RESELECT=y +CONFIG_FIT_EMBED=y +CONFIG_OF_LIST="keystone-k2l-evm"

On Fri, Jun 16, 2017 at 05:25:18PM -0500, Cooper Jr., Franklin wrote:
Enable various config options to allow U-boot at runtime to select the proper dtb to use from the list of dtb's within the FIT image.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Future boards will need to configure DDR3 registers in a slightly different manner. Support this by defining additional variables and defines that will be utilized later.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- arch/arm/mach-keystone/include/mach/ddr3.h | 14 ++++++++++++++ arch/arm/mach-keystone/include/mach/hardware.h | 3 +++ 2 files changed, 17 insertions(+)
diff --git a/arch/arm/mach-keystone/include/mach/ddr3.h b/arch/arm/mach-keystone/include/mach/ddr3.h index 5feffe8..93789fd 100644 --- a/arch/arm/mach-keystone/include/mach/ddr3.h +++ b/arch/arm/mach-keystone/include/mach/ddr3.h @@ -35,6 +35,20 @@ struct ddr3_phy_config { unsigned int zq1cr1; unsigned int zq2cr1; unsigned int pir_v1; + unsigned int datx8_2_mask; + unsigned int datx8_2_val; + unsigned int datx8_3_mask; + unsigned int datx8_3_val; + unsigned int datx8_4_mask; + unsigned int datx8_4_val; + unsigned int datx8_5_mask; + unsigned int datx8_5_val; + unsigned int datx8_6_mask; + unsigned int datx8_6_val; + unsigned int datx8_7_mask; + unsigned int datx8_7_val; + unsigned int datx8_8_mask; + unsigned int datx8_8_val; unsigned int pir_v2; };
diff --git a/arch/arm/mach-keystone/include/mach/hardware.h b/arch/arm/mach-keystone/include/mach/hardware.h index 38d0190..1969a10 100644 --- a/arch/arm/mach-keystone/include/mach/hardware.h +++ b/arch/arm/mach-keystone/include/mach/hardware.h @@ -52,6 +52,8 @@ typedef volatile unsigned int *dv_reg_p; #define KS2_DDRPHY_ZQ2CR1_OFFSET 0x1A4 #define KS2_DDRPHY_ZQ3CR1_OFFSET 0x1B4
+#define KS2_DDRPHY_DATX8_2_OFFSET 0x240 +#define KS2_DDRPHY_DATX8_3_OFFSET 0x280 #define KS2_DDRPHY_DATX8_4_OFFSET 0x2C0 #define KS2_DDRPHY_DATX8_5_OFFSET 0x300 #define KS2_DDRPHY_DATX8_6_OFFSET 0x340 @@ -70,6 +72,7 @@ typedef volatile unsigned int *dv_reg_p; #define PDQ_MASK 0x00000070 #define NOSRA_MASK 0x08000000 #define ECC_MASK 0x00000001 +#define DXEN_MASK 0x00000001
/* DDR3 definitions */ #define KS2_DDR3A_EMIF_CTRL_BASE 0x21010000

On Fri, Jun 16, 2017 at 05:25:19PM -0500, Cooper Jr., Franklin wrote:
Future boards will need to configure DDR3 registers in a slightly different manner. Support this by defining additional variables and defines that will be utilized later.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

K2G GP doesn't require the MR2 register to be programed since the default is good enough. However, newer K2G boards do need to change this register value. Therefore, instead of not writing this register if ran on a K2G board just program the value to be written to match the default/reset value.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- arch/arm/mach-keystone/ddr3.c | 3 +-- board/ti/ks2_evm/ddr3_k2g.c | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/arch/arm/mach-keystone/ddr3.c b/arch/arm/mach-keystone/ddr3.c index ee8e12e..25a9637 100644 --- a/arch/arm/mach-keystone/ddr3.c +++ b/arch/arm/mach-keystone/ddr3.c @@ -52,8 +52,7 @@ void ddr3_init_ddrphy(u32 base, struct ddr3_phy_config *phy_cfg) __raw_writel(phy_cfg->dtpr2, base + KS2_DDRPHY_DTPR2_OFFSET); __raw_writel(phy_cfg->mr0, base + KS2_DDRPHY_MR0_OFFSET); __raw_writel(phy_cfg->mr1, base + KS2_DDRPHY_MR1_OFFSET); - if (!cpu_is_k2g()) - __raw_writel(phy_cfg->mr2, base + KS2_DDRPHY_MR2_OFFSET); + __raw_writel(phy_cfg->mr2, base + KS2_DDRPHY_MR2_OFFSET); __raw_writel(phy_cfg->dtcr, base + KS2_DDRPHY_DTCR_OFFSET); __raw_writel(phy_cfg->pgcr2, base + KS2_DDRPHY_PGCR2_OFFSET);
diff --git a/board/ti/ks2_evm/ddr3_k2g.c b/board/ti/ks2_evm/ddr3_k2g.c index 344961d..aeb7da6 100644 --- a/board/ti/ks2_evm/ddr3_k2g.c +++ b/board/ti/ks2_evm/ddr3_k2g.c @@ -27,7 +27,7 @@ struct ddr3_phy_config ddr3phy_800_2g = { .dtpr2 = 0x50022A00ul, .mr0 = 0x00001430ul, .mr1 = 0x00000006ul, - .mr2 = 0x00000018ul, + .mr2 = 0x00000000ul, .dtcr = 0x710035C7ul, .pgcr2 = 0x00F03D09ul, .zq0cr1 = 0x0001005Dul,

On Fri, Jun 16, 2017 at 05:25:20PM -0500, Cooper Jr., Franklin wrote:
K2G GP doesn't require the MR2 register to be programed since the default is good enough. However, newer K2G boards do need to change this register value. Therefore, instead of not writing this register if ran on a K2G board just program the value to be written to match the default/reset value.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Different K2G evms may need to program the various KS2_DDRPHY_DATX8_X_OFFSET registers in different ways. Therefore, use the mask and val registers for each KS2_DDRPHY_DATAX_X_OFFSET to properly program the register.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- arch/arm/mach-keystone/ddr3.c | 32 +++++++++++++++++++++++++++----- board/ti/ks2_evm/ddr3_k2g.c | 14 ++++++++++++++ 2 files changed, 41 insertions(+), 5 deletions(-)
diff --git a/arch/arm/mach-keystone/ddr3.c b/arch/arm/mach-keystone/ddr3.c index 25a9637..4cad6a2 100644 --- a/arch/arm/mach-keystone/ddr3.c +++ b/arch/arm/mach-keystone/ddr3.c @@ -65,11 +65,33 @@ void ddr3_init_ddrphy(u32 base, struct ddr3_phy_config *phy_cfg) ;
if (cpu_is_k2g()) { - setbits_le32(base + KS2_DDRPHY_DATX8_4_OFFSET, 0x1); - clrbits_le32(base + KS2_DDRPHY_DATX8_5_OFFSET, 0x1); - clrbits_le32(base + KS2_DDRPHY_DATX8_6_OFFSET, 0x1); - clrbits_le32(base + KS2_DDRPHY_DATX8_7_OFFSET, 0x1); - clrbits_le32(base + KS2_DDRPHY_DATX8_8_OFFSET, 0x1); + clrsetbits_le32(base + KS2_DDRPHY_DATX8_2_OFFSET, + phy_cfg->datx8_2_mask, + phy_cfg->datx8_2_val); + + clrsetbits_le32(base + KS2_DDRPHY_DATX8_3_OFFSET, + phy_cfg->datx8_3_mask, + phy_cfg->datx8_3_val); + + clrsetbits_le32(base + KS2_DDRPHY_DATX8_4_OFFSET, + phy_cfg->datx8_4_mask, + phy_cfg->datx8_4_val); + + clrsetbits_le32(base + KS2_DDRPHY_DATX8_5_OFFSET, + phy_cfg->datx8_5_mask, + phy_cfg->datx8_5_val); + + clrsetbits_le32(base + KS2_DDRPHY_DATX8_6_OFFSET, + phy_cfg->datx8_6_mask, + phy_cfg->datx8_6_val); + + clrsetbits_le32(base + KS2_DDRPHY_DATX8_7_OFFSET, + phy_cfg->datx8_7_mask, + phy_cfg->datx8_7_val); + + clrsetbits_le32(base + KS2_DDRPHY_DATX8_8_OFFSET, + phy_cfg->datx8_8_mask, + phy_cfg->datx8_8_val); }
__raw_writel(phy_cfg->pir_v2, base + KS2_DDRPHY_PIR_OFFSET); diff --git a/board/ti/ks2_evm/ddr3_k2g.c b/board/ti/ks2_evm/ddr3_k2g.c index aeb7da6..3b12943 100644 --- a/board/ti/ks2_evm/ddr3_k2g.c +++ b/board/ti/ks2_evm/ddr3_k2g.c @@ -34,6 +34,20 @@ struct ddr3_phy_config ddr3phy_800_2g = { .zq1cr1 = 0x0001005Bul, .zq2cr1 = 0x0001005Bul, .pir_v1 = 0x00000033ul, + .datx8_2_mask = 0, + .datx8_2_val = 0, + .datx8_3_mask = 0, + .datx8_3_val = 0, + .datx8_4_mask = 0, + .datx8_4_val = ((1 << 0)), + .datx8_5_mask = DXEN_MASK, + .datx8_5_val = 0, + .datx8_6_mask = DXEN_MASK, + .datx8_6_val = 0, + .datx8_7_mask = DXEN_MASK, + .datx8_7_val = 0, + .datx8_8_mask = DXEN_MASK, + .datx8_8_val = 0, .pir_v2 = 0x00000F81ul, };

On Fri, Jun 16, 2017 at 05:25:21PM -0500, Cooper Jr., Franklin wrote:
Different K2G evms may need to program the various KS2_DDRPHY_DATX8_X_OFFSET registers in different ways. Therefore, use the mask and val registers for each KS2_DDRPHY_DATAX_X_OFFSET to properly program the register.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Add a function that can be used to determine if the board being ran on is a K2G Industrial Communication Engine EVM or K2G General Purpose EVM based on values programmed on the EEPROM.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- board/ti/ks2_evm/board.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
diff --git a/board/ti/ks2_evm/board.h b/board/ti/ks2_evm/board.h index 0698921..b3ad188 100644 --- a/board/ti/ks2_evm/board.h +++ b/board/ti/ks2_evm/board.h @@ -15,6 +15,26 @@
extern struct eth_priv_t eth_priv_cfg[];
+#if defined(CONFIG_TI_I2C_BOARD_DETECT) +static inline int board_is_k2g_gp(void) +{ + return board_ti_is("66AK2GGP"); +} +static inline int board_is_k2g_ice(void) +{ + return board_ti_is("66AK2GIC"); +} +#else +static inline int board_is_k2g_gp(void) +{ + return false; +} +static inline int board_is_k2g_ice(void) +{ + return false; +} +#endif + int get_num_eth_ports(void); void spl_init_keystone_plls(void);

On Fri, Jun 16, 2017 at 05:25:22PM -0500, Cooper Jr., Franklin wrote:
Add a function that can be used to determine if the board being ran on is a K2G Industrial Communication Engine EVM or K2G General Purpose EVM based on values programmed on the EEPROM.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Add basic pinmux data for new K2G ICE evm. Also add pinmuxing for a generic K2G evm which includes I2C 0 and 1 used for board detection purposes.
Since multiple K2G boards are supported that means initially generic pinmuxing should be used when board detection hasn't ran. Once board detection runs the proper pinmuxing can be reran to match the board being ran on.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- board/ti/ks2_evm/board_k2g.c | 2 ++ board/ti/ks2_evm/mux-k2g.h | 45 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-)
diff --git a/board/ti/ks2_evm/board_k2g.c b/board/ti/ks2_evm/board_k2g.c index b4765f7..3622312 100644 --- a/board/ti/ks2_evm/board_k2g.c +++ b/board/ti/ks2_evm/board_k2g.c @@ -274,6 +274,8 @@ int embedded_dtb_select(void)
fdtdec_setup();
+ k2g_mux_config(); + k2g_reset_mux_config();
/* deassert FLASH_HOLD */ diff --git a/board/ti/ks2_evm/mux-k2g.h b/board/ti/ks2_evm/mux-k2g.h index 773f9b7..630103d 100644 --- a/board/ti/ks2_evm/mux-k2g.h +++ b/board/ti/ks2_evm/mux-k2g.h @@ -11,6 +11,22 @@ #include <asm/io.h> #include <asm/arch/mux-k2g.h> #include <asm/arch/hardware.h> +#include "board.h" + +struct pin_cfg k2g_generic_pin_cfg[] = { + /* UART0 */ + { 115, MODE(0) }, /* SOC_UART0_RXD */ + { 116, MODE(0) }, /* SOC_UART0_TXD */ + + /* I2C 0 */ + { 223, MODE(0) }, /* SOC_I2C0_SCL */ + { 224, MODE(0) }, /* SOC_I2C0_SDA */ + + /* I2C 1 */ + { 225, MODE(0) }, /* SOC_I2C1_SCL */ + { 226, MODE(0) }, /* SOC_I2C1_SDA */ + { MAX_PIN_N, } +};
struct pin_cfg k2g_evm_pin_cfg[] = { /* GPMC */ @@ -307,7 +323,34 @@ struct pin_cfg k2g_evm_pin_cfg[] = { { MAX_PIN_N, } };
+struct pin_cfg k2g_ice_evm_pin_cfg[] = { + /* MMC 1 */ + { 63, MODE(0) | PIN_PTD }, /* MMC1_DAT3.MMC1_DAT3 */ + { 64, MODE(0) | PIN_PTU }, /* MMC1_DAT2.MMC1_DAT2 */ + { 65, MODE(0) | PIN_PTU }, /* MMC1_DAT1.MMC1_DAT1 */ + { 66, MODE(0) | PIN_PTD }, /* MMC1_DAT0.MMC1_DAT0 */ + { 67, MODE(0) | PIN_PTD }, /* MMC1_CLK.MMC1_CLK */ + { 68, MODE(0) | PIN_PTD }, /* MMC1_CMD.MMC1_CMD */ + { 69, MODE(3) | PIN_PTU }, /* MMC1_SDCD.GPIO0_69 */ + { 70, MODE(0) | PIN_PTU }, /* MMC1_SDWP.MMC1_SDWP */ + { 71, MODE(0) | PIN_PTD }, /* MMC1_POW.MMC1_POW */ + + /* I2C 0 */ + { 223, MODE(0) }, /* SOC_I2C0_SCL */ + { 224, MODE(0) }, /* SOC_I2C0_SDA */ + { MAX_PIN_N, } +}; + void k2g_mux_config(void) { - configure_pin_mux(k2g_evm_pin_cfg); + if (!board_ti_was_eeprom_read()) { + configure_pin_mux(k2g_generic_pin_cfg); + } else if (board_is_k2g_gp()) { + configure_pin_mux(k2g_evm_pin_cfg); + } else if (board_is_k2g_ice()) { + configure_pin_mux(k2g_ice_evm_pin_cfg); + } else { + puts("Unknown board, cannot configure pinmux."); + hang(); + } }

On Fri, Jun 16, 2017 at 05:25:23PM -0500, Cooper Jr., Franklin wrote:
Add basic pinmux data for new K2G ICE evm. Also add pinmuxing for a generic K2G evm which includes I2C 0 and 1 used for board detection purposes.
Since multiple K2G boards are supported that means initially generic pinmuxing should be used when board detection hasn't ran. Once board detection runs the proper pinmuxing can be reran to match the board being ran on.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Add configuration settings used by the K2G ICE evm. Also use board detection to determine which DDR3 configuration to use.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- board/ti/ks2_evm/ddr3_k2g.c | 62 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-)
diff --git a/board/ti/ks2_evm/ddr3_k2g.c b/board/ti/ks2_evm/ddr3_k2g.c index 3b12943..44db335 100644 --- a/board/ti/ks2_evm/ddr3_k2g.c +++ b/board/ti/ks2_evm/ddr3_k2g.c @@ -10,7 +10,9 @@ #include <common.h> #include "ddr3_cfg.h" #include <asm/arch/ddr3.h> +#include "board.h"
+/* K2G GP EVM DDR3 Configuration */ struct ddr3_phy_config ddr3phy_800_2g = { .pllcr = 0x000DC000ul, .pgcr1_mask = (IODDRM_MASK | ZCKSEL_MASK), @@ -61,13 +63,69 @@ struct ddr3_emif_config ddr3_800_2g = { .sdrfc = 0x00000C34ul, };
+/* K2G ICE evm DDR3 Configuration */ +struct ddr3_phy_config ddr3phy_800_512mb = { + .pllcr = 0x000DC000ul, + .pgcr1_mask = (IODDRM_MASK | ZCKSEL_MASK), + .pgcr1_val = ((1 << 2) | (2 << 7) | (1 << 23)), + .ptr0 = 0x42C21590ul, + .ptr1 = 0xD05612C0ul, + .ptr2 = 0, + .ptr3 = 0x06C30D40ul, + .ptr4 = 0x06413880ul, + .dcr_mask = (PDQ_MASK | MPRDQ_MASK | BYTEMASK_MASK), + .dcr_val = ((1 << 10)), + .dtpr0 = 0x550E6644ul, + .dtpr1 = 0x32834200ul, + .dtpr2 = 0x50022A00ul, + .mr0 = 0x00001430ul, + .mr1 = 0x00000006ul, + .mr2 = 0x00000008ul, + .dtcr = 0x710035C7ul, + .pgcr2 = 0x00F03D09ul, + .zq0cr1 = 0x0001005Dul, + .zq1cr1 = 0x0001005Bul, + .zq2cr1 = 0x0001005Bul, + .pir_v1 = 0x00000033ul, + .datx8_2_mask = DXEN_MASK, + .datx8_2_val = 0, + .datx8_3_mask = DXEN_MASK, + .datx8_3_val = 0, + .datx8_4_mask = DXEN_MASK, + .datx8_4_val = 0, + .datx8_5_mask = DXEN_MASK, + .datx8_5_val = 0, + .datx8_6_mask = DXEN_MASK, + .datx8_6_val = 0, + .datx8_7_mask = DXEN_MASK, + .datx8_7_val = 0, + .datx8_8_mask = DXEN_MASK, + .datx8_8_val = 0, + .pir_v2 = 0x00000F81ul, +}; + +struct ddr3_emif_config ddr3_800_512mb = { + .sdcfg = 0x62006662ul, + .sdtim1 = 0x0A385033ul, + .sdtim2 = 0x00001CA5ul, + .sdtim3 = 0x21ADFF32ul, + .sdtim4 = 0x533F067Ful, + .zqcfg = 0x70073200ul, + .sdrfc = 0x00000C34ul, +}; + u32 ddr3_init(void) { /* Reset DDR3 PHY after PLL enabled */ ddr3_reset_ddrphy();
- ddr3_init_ddrphy(KS2_DDR3A_DDRPHYC, &ddr3phy_800_2g); - ddr3_init_ddremif(KS2_DDR3A_EMIF_CTRL_BASE, &ddr3_800_2g); + if (board_is_k2g_gp()) { + ddr3_init_ddrphy(KS2_DDR3A_DDRPHYC, &ddr3phy_800_2g); + ddr3_init_ddremif(KS2_DDR3A_EMIF_CTRL_BASE, &ddr3_800_2g); + } else if (board_is_k2g_ice()) { + ddr3_init_ddrphy(KS2_DDR3A_DDRPHYC, &ddr3phy_800_512mb); + ddr3_init_ddremif(KS2_DDR3A_EMIF_CTRL_BASE, &ddr3_800_512mb); + }
return 0; }

On Fri, Jun 16, 2017 at 05:25:24PM -0500, Cooper Jr., Franklin wrote:
Add configuration settings used by the K2G ICE evm. Also use board detection to determine which DDR3 configuration to use.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Some code doesn't apply to K2G ICE evm. Therefore, use board detection to wrap these calls.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- board/ti/ks2_evm/board.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/board/ti/ks2_evm/board.c b/board/ti/ks2_evm/board.c index 4792311..c61baee 100644 --- a/board/ti/ks2_evm/board.c +++ b/board/ti/ks2_evm/board.c @@ -45,13 +45,17 @@ int dram_init(void) gd->ram_size = get_ram_size((long *)CONFIG_SYS_SDRAM_BASE, CONFIG_MAX_RAM_BANK_SIZE); #if defined(CONFIG_TI_AEMIF) - aemif_init(ARRAY_SIZE(aemif_configs), aemif_configs); + if (!board_is_k2g_ice()) + aemif_init(ARRAY_SIZE(aemif_configs), aemif_configs); #endif
- if (ddr3_size) - ddr3_init_ecc(KS2_DDR3A_EMIF_CTRL_BASE, ddr3_size); - else - ddr3_init_ecc(KS2_DDR3A_EMIF_CTRL_BASE, gd->ram_size >> 30); + if (!board_is_k2g_ice()) { + if (ddr3_size) + ddr3_init_ecc(KS2_DDR3A_EMIF_CTRL_BASE, ddr3_size); + else + ddr3_init_ecc(KS2_DDR3A_EMIF_CTRL_BASE, + gd->ram_size >> 30); + }
return 0; }

On Fri, Jun 16, 2017 at 05:25:25PM -0500, Cooper Jr., Franklin wrote:
Some code doesn't apply to K2G ICE evm. Therefore, use board detection to wrap these calls.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Certain peripherals used by K2G GP aren't used on K2G ICE evm. Or configuration is slightly different. Therefore, use board detection to deal with these variations.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- board/ti/ks2_evm/board_k2g.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/board/ti/ks2_evm/board_k2g.c b/board/ti/ks2_evm/board_k2g.c index 3622312..9001255 100644 --- a/board/ti/ks2_evm/board_k2g.c +++ b/board/ti/ks2_evm/board_k2g.c @@ -208,7 +208,9 @@ int board_mmc_init(bd_t *bis) return -1; }
- omap_mmc_init(0, 0, 0, -1, -1); + if (board_is_k2g_gp()) + omap_mmc_init(0, 0, 0, -1, -1); + omap_mmc_init(1, 0, 0, -1, -1); return 0; } @@ -278,11 +280,13 @@ int embedded_dtb_select(void)
k2g_reset_mux_config();
- /* deassert FLASH_HOLD */ - clrbits_le32(K2G_GPIO1_BANK2_BASE + K2G_GPIO_DIR_OFFSET, - BIT(9)); - setbits_le32(K2G_GPIO1_BANK2_BASE + K2G_GPIO_SETDATA_OFFSET, - BIT(9)); + if (board_is_k2g_gp()) { + /* deassert FLASH_HOLD */ + clrbits_le32(K2G_GPIO1_BANK2_BASE + K2G_GPIO_DIR_OFFSET, + BIT(9)); + setbits_le32(K2G_GPIO1_BANK2_BASE + K2G_GPIO_SETDATA_OFFSET, + BIT(9)); + }
return 0; }

On Fri, Jun 16, 2017 at 05:25:26PM -0500, Cooper Jr., Franklin wrote:
Certain peripherals used by K2G GP aren't used on K2G ICE evm. Or configuration is slightly different. Therefore, use board detection to deal with these variations.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Enable CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG to allow "board_name" to be set depending on the board it is being ran on.
Update findfdt to use this new dynamic board_name value to determine which dtb should be used.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- board/ti/ks2_evm/board_k2g.c | 6 ++++++ include/configs/k2g_evm.h | 13 +++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/board/ti/ks2_evm/board_k2g.c b/board/ti/ks2_evm/board_k2g.c index 9001255..fcab9c6 100644 --- a/board/ti/ks2_evm/board_k2g.c +++ b/board/ti/ks2_evm/board_k2g.c @@ -306,6 +306,12 @@ int board_late_init(void) board_ti_set_ethaddr(1); #endif
+#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG + if (board_is_k2g_gp()) + setenv("board_name", "66AK2GGP\0"); + else if (board_is_k2g_ice()) + setenv("board_name", "66AK2GIC\0"); +#endif return 0; } #endif diff --git a/include/configs/k2g_evm.h b/include/configs/k2g_evm.h index 1cc3576..5bf630e 100644 --- a/include/configs/k2g_evm.h +++ b/include/configs/k2g_evm.h @@ -16,6 +16,8 @@ /* Platform type */ #define CONFIG_SOC_K2G
+#define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG + /* U-Boot general configuration */ #define CONFIG_EXTRA_ENV_KS2_BOARD_SETTINGS \ DEFAULT_MMC_TI_ARGS \ @@ -28,7 +30,14 @@ "rd_spec=-\0" \ "args_ubi=setenv bootargs ${bootargs} rootfstype=ubifs " \ "root=ubi0:rootfs rootflags=sync rw ubi.mtd=ubifs,2048\0" \ - "name_fdt=keystone-k2g-evm.dtb\0" \ + "findfdt="\ + "if test $board_name = 66AK2GGP; then " \ + "setenv name_fdt keystone-k2g-evm.dtb; " \ + "else if test $board_name = 66AK2GIC; then " \ + "setenv name_fdt keystone-k2g-ice.dtb; " \ + "else if test $name_fdt = undefined; then " \ + "echo WARNING: Could not determine device tree to use;"\ + "fi;fi;fi;\0" \ "name_mon=skern-k2g.bin\0" \ "name_ubi=k2g-evm-ubifs.ubi\0" \ "name_uboot=u-boot-spi-k2g-evm.gph\0" \ @@ -46,7 +55,7 @@ "run envboot; " \ "run set_name_pmmc init_${boot} init_fw_rd_${boot} " \ "get_pmmc_${boot} run_pmmc get_mon_${boot} run_mon " \ - "get_fdt_${boot} get_kern_${boot} run_kern" + "findfdt get_fdt_${boot} get_kern_${boot} run_kern"
/* SPL SPI Loader Configuration */ #define CONFIG_SPL_TEXT_BASE 0x0c080000

On Fri, Jun 16, 2017 at 05:25:27PM -0500, Cooper Jr., Franklin wrote:
Enable CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG to allow "board_name" to be set depending on the board it is being ran on.
Update findfdt to use this new dynamic board_name value to determine which dtb should be used.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Adding the unit address to the memory node was causing the below error: Warning (reg_format): "reg" property in /memory has invalid length (8 bytes) (#address-cells == 2, #size-cells == 2)
Further debugging showed that this was due to the memory node added by default to skeleton.dtsi which was being included in keystone-k2g.dtsi. Adding a missing node was all that was needed to remove this deprecated dtsi file from the SoC dtsi. With skeleton.dtsi removed the dtc compiler no longer complained about including the unit address for the memory node.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- arch/arm/dts/keystone-k2g.dtsi | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/arch/arm/dts/keystone-k2g.dtsi b/arch/arm/dts/keystone-k2g.dtsi index 191e3f1..f05afb7 100644 --- a/arch/arm/dts/keystone-k2g.dtsi +++ b/arch/arm/dts/keystone-k2g.dtsi @@ -9,7 +9,6 @@ */
#include <dt-bindings/interrupt-controller/arm-gic.h> -#include "skeleton.dtsi"
/ { model = "Texas Instruments K2G SoC"; @@ -17,6 +16,8 @@ #size-cells = <1>; interrupt-parent = <&gic>;
+ chosen { }; + aliases { serial0 = &uart0; spi0 = &spi0;

On Fri, Jun 16, 2017 at 05:25:28PM -0500, Cooper Jr., Franklin wrote:
Adding the unit address to the memory node was causing the below error: Warning (reg_format): "reg" property in /memory has invalid length (8 bytes) (#address-cells == 2, #size-cells == 2)
Further debugging showed that this was due to the memory node added by default to skeleton.dtsi which was being included in keystone-k2g.dtsi. Adding a missing node was all that was needed to remove this deprecated dtsi file from the SoC dtsi. With skeleton.dtsi removed the dtc compiler no longer complained about including the unit address for the memory node.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Upstream Linux has the unit address being added to the various 66AK2Gx boards dts. Therefore, update the dts to mimic this change.
Also remove memory node from the base K2G dtsi file.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- arch/arm/dts/keystone-k2g-evm.dts | 5 +++++ arch/arm/dts/keystone-k2g.dtsi | 5 ----- 2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/arch/arm/dts/keystone-k2g-evm.dts b/arch/arm/dts/keystone-k2g-evm.dts index 2c99df4..f6fce33 100644 --- a/arch/arm/dts/keystone-k2g-evm.dts +++ b/arch/arm/dts/keystone-k2g-evm.dts @@ -18,6 +18,11 @@ chosen { stdout-path = &uart0; }; + + memory@80000000 { + device_type = "memory"; + reg = <0x80000000 0x80000000>; + }; };
&mdio { diff --git a/arch/arm/dts/keystone-k2g.dtsi b/arch/arm/dts/keystone-k2g.dtsi index f05afb7..7b2fae6 100644 --- a/arch/arm/dts/keystone-k2g.dtsi +++ b/arch/arm/dts/keystone-k2g.dtsi @@ -30,11 +30,6 @@ i2c2 = &i2c2; };
- memory { - device_type = "memory"; - reg = <0x80000000 0x80000000>; - }; - cpus { #address-cells = <1>; #size-cells = <0>;

On Fri, Jun 16, 2017 at 05:25:29PM -0500, Cooper Jr., Franklin wrote:
Upstream Linux has the unit address being added to the various 66AK2Gx boards dts. Therefore, update the dts to mimic this change.
Also remove memory node from the base K2G dtsi file.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Disable netcp by default like all other peripherals in the dtsi file. Enable the peripheral explicitly in the board specific dts file.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- arch/arm/dts/keystone-k2g-evm.dts | 4 ++++ arch/arm/dts/keystone-k2g-netcp.dtsi | 1 + 2 files changed, 5 insertions(+)
diff --git a/arch/arm/dts/keystone-k2g-evm.dts b/arch/arm/dts/keystone-k2g-evm.dts index f6fce33..de208b3 100644 --- a/arch/arm/dts/keystone-k2g-evm.dts +++ b/arch/arm/dts/keystone-k2g-evm.dts @@ -37,6 +37,10 @@ phy-handle = <ðphy0>; };
+&netcp { + status = "okay"; +}; + &spi1 { status = "okay";
diff --git a/arch/arm/dts/keystone-k2g-netcp.dtsi b/arch/arm/dts/keystone-k2g-netcp.dtsi index a9b26c3..d76f2a1 100644 --- a/arch/arm/dts/keystone-k2g-netcp.dtsi +++ b/arch/arm/dts/keystone-k2g-netcp.dtsi @@ -99,6 +99,7 @@ netcp: netcp@4000000 { reg = <0x2620110 0x8>; reg-names = "efuse"; compatible = "ti,netcp-1.0"; + status = "disabled"; #address-cells = <1>; #size-cells = <1>; /* power-domains = <&k2g_pds K2G_DEV_NSS0>; */

On Fri, Jun 16, 2017 at 05:25:30PM -0500, Cooper Jr., Franklin wrote:
Disable netcp by default like all other peripherals in the dtsi file. Enable the peripheral explicitly in the board specific dts file.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Add basic DT support for K2G ICE evm. Only minimal peripherals are supported to allow console output and MMC boot.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- arch/arm/dts/Makefile | 3 ++- arch/arm/dts/keystone-k2g-ice-u-boot.dtsi | 19 ++++++++++++++++ arch/arm/dts/keystone-k2g-ice.dts | 36 +++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 arch/arm/dts/keystone-k2g-ice-u-boot.dtsi create mode 100644 arch/arm/dts/keystone-k2g-ice.dts
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index cd10260..bec22a3 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -366,7 +366,8 @@ dtb-$(CONFIG_SOC_KEYSTONE) += keystone-k2hk-evm.dtb \ keystone-k2l-evm.dtb \ keystone-k2e-evm.dtb \ keystone-k2g-evm.dtb \ - keystone-k2g-generic.dtb + keystone-k2g-generic.dtb \ + keystone-k2g-ice.dtb
dtb-$(CONFIG_TARGET_AT91SAM9263EK) += at91sam9263ek.dtb
diff --git a/arch/arm/dts/keystone-k2g-ice-u-boot.dtsi b/arch/arm/dts/keystone-k2g-ice-u-boot.dtsi new file mode 100644 index 0000000..4d073f3 --- /dev/null +++ b/arch/arm/dts/keystone-k2g-ice-u-boot.dtsi @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/ + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/{ + soc { + u-boot,dm-pre-reloc; + }; +}; + +&i2c0 { + u-boot,dm-pre-reloc; +}; + +&i2c1 { + u-boot,dm-pre-reloc; +}; diff --git a/arch/arm/dts/keystone-k2g-ice.dts b/arch/arm/dts/keystone-k2g-ice.dts new file mode 100644 index 0000000..be63782 --- /dev/null +++ b/arch/arm/dts/keystone-k2g-ice.dts @@ -0,0 +1,36 @@ +/* + * Device Tree Source for K2G Industrial Communication Engine EVM + * + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/ + * + * SPDX-License-Identifier: GPL-2.0+ + */ +/dts-v1/; + +#include "keystone-k2g.dtsi" + +/ { + compatible = "ti,k2g-ice", "ti,k2g", "ti,keystone"; + model = "Texas Instruments K2G Industrial Communication EVM"; + + chosen { + stdout-path = &uart0; + }; + + memory@80000000 { + device_type = "memory"; + reg = <0x80000000 0x20000000>; + }; +}; + +&mmc1 { + status = "okay"; +}; + +&i2c0 { + status = "okay"; +}; + +&i2c1 { + status = "okay"; +};

On Fri, Jun 16, 2017 at 05:25:31PM -0500, Cooper Jr., Franklin wrote:
Add basic DT support for K2G ICE evm. Only minimal peripherals are supported to allow console output and MMC boot.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

K2G ICE evm will have its own dtb. Therefore, add it to the list of dtbs located in the appended U-boot dtb FIT image. Therefore, when swapping out dtbs K2G ICE boards can grab the correct one.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- board/ti/ks2_evm/board_k2g.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/board/ti/ks2_evm/board_k2g.c b/board/ti/ks2_evm/board_k2g.c index fcab9c6..2160576 100644 --- a/board/ti/ks2_evm/board_k2g.c +++ b/board/ti/ks2_evm/board_k2g.c @@ -225,6 +225,8 @@ int board_fit_config_name_match(const char *name) return 0; else if (!strcmp(name, "keystone-k2g-evm") && board_ti_is("66AK2GGP")) return 0; + else if (!strcmp(name, "keystone-k2g-ice") && board_ti_is("66AK2GIC")) + return 0; else return -1; }

On Fri, Jun 16, 2017 at 05:25:32PM -0500, Cooper Jr., Franklin wrote:
K2G ICE evm will have its own dtb. Therefore, add it to the list of dtbs located in the appended U-boot dtb FIT image. Therefore, when swapping out dtbs K2G ICE boards can grab the correct one.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Include K2G ICE to OF_LIST so it can be used for runtime board detection.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com --- configs/k2g_evm_defconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configs/k2g_evm_defconfig b/configs/k2g_evm_defconfig index 7b105da..a5639ea 100644 --- a/configs/k2g_evm_defconfig +++ b/configs/k2g_evm_defconfig @@ -48,4 +48,4 @@ CONFIG_USB_XHCI_DWC3=y CONFIG_USB_STORAGE=y CONFIG_DTB_RESELECT=y CONFIG_FIT_EMBED=y -CONFIG_OF_LIST="keystone-k2g-generic keystone-k2g-evm" +CONFIG_OF_LIST="keystone-k2g-generic keystone-k2g-evm keystone-k2g-ice"

On Fri, Jun 16, 2017 at 05:25:33PM -0500, Cooper Jr., Franklin wrote:
Include K2G ICE to OF_LIST so it can be used for runtime board detection.
Signed-off-by: Franklin S Cooper Jr fcooper@ti.com Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Sorry. Somehow I left out the subject from this. I resent just the cover letter with the proper subject.
On 06/16/2017 05:25 PM, Franklin S Cooper Jr wrote:
This patchset adds support for the new Keystone 2 Industrial Communication Engine board.
This patchset includes the introduction of embedded FIT images in U-boot. This creates a FIT image of dtb files that enables board specific code to select which DTB to use at runtime. Initially during boot a generic DTB is required that enables board detection to occur and once it has can later be swapped out for the correct dtb.
Version 4 changes: Rebased on top of master. Tweaks done to patches 2 and 3 since functions have been added and tweaked in spl_fit.c. Left reviewed by as is since changes weren't drastic.
Version 3 changes: Fixed minor comments that were missed in rev 2.
Version 2 changes: Some patches were dropped since equivalent changes have already be incorporated in upstream already.
The addition davinci i2c device model in upstream resulted in some patches having to be added or tweaked.
The DT for K2G ICE is based on the version that has been accepted into Linux mainline https://lkml.org/lkml/2017/5/22/28
Franklin S Cooper Jr (29): spl: fit: Break out some functions into a common file boot_fit: Create helper functions that can be used to select DTB out of FIT fdt: Enable selecting correct DTB from appended FIT Image ti: common: board_detect: Add function to determine if EEPROM was read dts: Allow OF_LIST to depend on FIT_EMBED ARM: dts: k2g: Introduce U-boot specific dtsi file arm: dts: Add new "generic" 66AK2Gx device tree file. board_f: Add new function to allow runtime DTB selection Makefile: Build additional binaries for dtb FIT blobs appended to U-boot ARM: keystone2: Allow to build with all image formats ARM: k2g: Define embedded_dtb_select for runtime DTB selection in U-boot ARM: keystone2: Define board_fit_config_name_match for Keystone 2 boards ks2_evm: Add EEPROM based board detection defconfig: keystone2: Enable U-boot runtime DTB detection ARM: keystone2: Add additional fields used for DDR3 configuration ARM: k2g: Program DDR PHY MR2 register with the default value ARM: k2g: Program DDRPHY_DATX8 registers via mask and value variables ks2_evm: Add EEPROM based board detection helper functions ARM: k2g: Add pinmux support for K2G ICE evm ARM: k2g: Add DDR3 configuration for K2G ICE evm board: ks2: Use board detection to wrap code not specific to K2G ICE evm ARM: k2g: Use board detection to wrap K2G GP specific calls ARM: k2g: Update board_name u-boot env variable at runtime ARM: dts: keystone-k2g: Remove skeleton.dtsi ARM: dts: keystone-k2g-evm: Add unit address to memory node ARM: dts: k2g: Disable netcp by default ARM: dts: k2g: Add DT support for K2G Industrial Communication Engine evm ARM: k2g: Add K2G ICE DTB to the list of possible DTBs defconfig: k2g_evm_defconfig: Add K2G ICE to OF_LIST
Nishanth Menon (1): ti: common: board_detect: Allow settings board detection variables manually
.gitignore | 1 + Makefile | 18 +++++- arch/arm/dts/Makefile | 4 +- arch/arm/dts/keystone-k2g-evm-u-boot.dtsi | 19 ++++++ arch/arm/dts/keystone-k2g-evm.dts | 9 +++ arch/arm/dts/keystone-k2g-generic-u-boot.dtsi | 19 ++++++ arch/arm/dts/keystone-k2g-generic.dts | 28 +++++++++ arch/arm/dts/keystone-k2g-ice-u-boot.dtsi | 19 ++++++ arch/arm/dts/keystone-k2g-ice.dts | 36 +++++++++++ arch/arm/dts/keystone-k2g-netcp.dtsi | 1 + arch/arm/dts/keystone-k2g.dtsi | 8 +-- arch/arm/mach-keystone/config.mk | 4 +- arch/arm/mach-keystone/ddr3.c | 35 ++++++++--- arch/arm/mach-keystone/include/mach/ddr3.h | 14 +++++ arch/arm/mach-keystone/include/mach/hardware.h | 3 + board/ti/common/board_detect.c | 34 ++++++++++ board/ti/common/board_detect.h | 26 ++++++++ board/ti/ks2_evm/board.c | 21 +++++-- board/ti/ks2_evm/board.h | 21 +++++++ board/ti/ks2_evm/board_k2e.c | 10 +++ board/ti/ks2_evm/board_k2g.c | 86 +++++++++++++++++++++++--- board/ti/ks2_evm/board_k2hk.c | 10 +++ board/ti/ks2_evm/board_k2l.c | 10 +++ board/ti/ks2_evm/ddr3_k2g.c | 78 ++++++++++++++++++++++- board/ti/ks2_evm/mux-k2g.h | 45 +++++++++++++- common/Kconfig | 16 +++++ common/Makefile | 2 + common/board_f.c | 3 + common/boot_fit.c | 80 ++++++++++++++++++++++++ common/common_fit.c | 62 +++++++++++++++++++ common/spl/spl_fit.c | 54 +--------------- configs/k2e_evm_defconfig | 3 + configs/k2g_evm_defconfig | 3 + configs/k2hk_evm_defconfig | 3 + configs/k2l_evm_defconfig | 3 + dts/Kconfig | 11 ++-- include/boot_fit.h | 9 +++ include/common.h | 4 ++ include/configs/k2g_evm.h | 13 +++- include/image.h | 10 +++ lib/fdtdec.c | 10 +++ 41 files changed, 749 insertions(+), 96 deletions(-) create mode 100644 arch/arm/dts/keystone-k2g-evm-u-boot.dtsi create mode 100644 arch/arm/dts/keystone-k2g-generic-u-boot.dtsi create mode 100644 arch/arm/dts/keystone-k2g-generic.dts create mode 100644 arch/arm/dts/keystone-k2g-ice-u-boot.dtsi create mode 100644 arch/arm/dts/keystone-k2g-ice.dts create mode 100644 common/boot_fit.c create mode 100644 common/common_fit.c create mode 100644 include/boot_fit.h
participants (2)
-
Franklin S Cooper Jr
-
Tom Rini