imx: ventana: convert U-Boot to OF_CONTROL using FIT image
In preparation for dm conversion convert to OF_CONTROL by adding FIT image support and multi dtb. Add a board_fit_config_name_match to match the dtb based off of EEPROM model. Signed-off-by: Tim Harvey <tharvey@gateworks.com>
This commit is contained in:
		
							parent
							
								
									13acc63e84
								
							
						
					
					
						commit
						d863d05439
					
				| 
						 | 
				
			
			@ -14,6 +14,8 @@
 | 
			
		|||
#include <i2c.h>
 | 
			
		||||
#include <linux/ctype.h>
 | 
			
		||||
 | 
			
		||||
#include <asm/arch/sys_proto.h>
 | 
			
		||||
 | 
			
		||||
#include "ventana_eeprom.h"
 | 
			
		||||
#include "gsc.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -179,6 +181,92 @@ int gsc_boot_wd_disable(void)
 | 
			
		|||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* determine BOM revision from model */
 | 
			
		||||
int get_bom_rev(const char *str)
 | 
			
		||||
{
 | 
			
		||||
	int  rev_bom = 0;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	for (i = strlen(str) - 1; i > 0; i--) {
 | 
			
		||||
		if (str[i] == '-')
 | 
			
		||||
			break;
 | 
			
		||||
		if (str[i] >= '1' && str[i] <= '9') {
 | 
			
		||||
			rev_bom = str[i] - '0';
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return rev_bom;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* determine PCB revision from model */
 | 
			
		||||
char get_pcb_rev(const char *str)
 | 
			
		||||
{
 | 
			
		||||
	char rev_pcb = 'A';
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	for (i = strlen(str) - 1; i > 0; i--) {
 | 
			
		||||
		if (str[i] == '-')
 | 
			
		||||
			break;
 | 
			
		||||
		if (str[i] >= 'A') {
 | 
			
		||||
			rev_pcb = str[i];
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return rev_pcb;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * get dt name based on model and detail level:
 | 
			
		||||
 */
 | 
			
		||||
const char *gsc_get_dtb_name(int level, char *buf, int sz)
 | 
			
		||||
{
 | 
			
		||||
	const char *model = (const char *)ventana_info.model;
 | 
			
		||||
	const char *pre = is_mx6dq() ? "imx6q-" : "imx6dl-";
 | 
			
		||||
	int modelno, rev_pcb, rev_bom;
 | 
			
		||||
 | 
			
		||||
	/* a few board models are dt equivalents to other models */
 | 
			
		||||
	if (strncasecmp(model, "gw5906", 6) == 0)
 | 
			
		||||
		model = "gw552x-d";
 | 
			
		||||
	else if (strncasecmp(model, "gw5908", 6) == 0)
 | 
			
		||||
		model = "gw53xx-f";
 | 
			
		||||
	else if (strncasecmp(model, "gw5905", 6) == 0)
 | 
			
		||||
		model = "gw5904-a";
 | 
			
		||||
 | 
			
		||||
	modelno = ((model[2] - '0') * 1000)
 | 
			
		||||
		  + ((model[3] - '0') * 100)
 | 
			
		||||
		  + ((model[4] - '0') * 10)
 | 
			
		||||
		  + (model[5] - '0');
 | 
			
		||||
	rev_pcb = tolower(get_pcb_rev(model));
 | 
			
		||||
	rev_bom = get_bom_rev(model);
 | 
			
		||||
 | 
			
		||||
	/* compare model/rev/bom in order of most specific to least */
 | 
			
		||||
	snprintf(buf, sz, "%s%04d", pre, modelno);
 | 
			
		||||
	switch (level) {
 | 
			
		||||
	case 0: /* full model first (ie gw5400-a1) */
 | 
			
		||||
		if (rev_bom) {
 | 
			
		||||
			snprintf(buf, sz, "%sgw%04d-%c%d", pre, modelno, rev_pcb, rev_bom);
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
		fallthrough;
 | 
			
		||||
	case 1: /* don't care about bom rev (ie gw5400-a) */
 | 
			
		||||
		snprintf(buf, sz, "%sgw%04d-%c", pre, modelno, rev_pcb);
 | 
			
		||||
		break;
 | 
			
		||||
	case 2: /* don't care about the pcb rev (ie gw5400) */
 | 
			
		||||
		snprintf(buf, sz, "%sgw%04d", pre, modelno);
 | 
			
		||||
		break;
 | 
			
		||||
	case 3: /* look for generic model (ie gw540x) */
 | 
			
		||||
		snprintf(buf, sz, "%sgw%03dx", pre, modelno / 10);
 | 
			
		||||
		break;
 | 
			
		||||
	case 4: /* look for more generic model (ie gw54xx) */
 | 
			
		||||
		snprintf(buf, sz, "%sgw%02dxx", pre, modelno / 100);
 | 
			
		||||
		break;
 | 
			
		||||
	default: /* give up */
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return buf;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_CMD_GSC) && !defined(CONFIG_SPL_BUILD)
 | 
			
		||||
static int do_gsc_sleep(struct cmd_tbl *cmdtp, int flag, int argc,
 | 
			
		||||
			char *const argv[])
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -67,5 +67,6 @@ int gsc_i2c_read(uchar chip, uint addr, int alen, uchar *buf, int len);
 | 
			
		|||
int gsc_i2c_write(uchar chip, uint addr, int alen, uchar *buf, int len);
 | 
			
		||||
int gsc_info(int verbose);
 | 
			
		||||
int gsc_boot_wd_disable(void);
 | 
			
		||||
const char *gsc_get_dtb_name(int level, char *buf, int sz);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -56,7 +56,6 @@ DECLARE_GLOBAL_DATA_PTR;
 | 
			
		|||
 * read it once.
 | 
			
		||||
 */
 | 
			
		||||
struct ventana_board_info ventana_info;
 | 
			
		||||
 | 
			
		||||
static int board_type;
 | 
			
		||||
 | 
			
		||||
/* ENET */
 | 
			
		||||
| 
						 | 
				
			
			@ -677,6 +676,25 @@ int board_init(void)
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int board_fit_config_name_match(const char *name)
 | 
			
		||||
{
 | 
			
		||||
	static char init;
 | 
			
		||||
	const char *dtb;
 | 
			
		||||
	char buf[32];
 | 
			
		||||
	int i = 0;
 | 
			
		||||
 | 
			
		||||
	do {
 | 
			
		||||
		dtb = gsc_get_dtb_name(i++, buf, sizeof(buf));
 | 
			
		||||
		if (dtb && !strcmp(dtb, name)) {
 | 
			
		||||
			if (!init++)
 | 
			
		||||
				printf("DTB:   %s\n", name);
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
	} while (dtb);
 | 
			
		||||
 | 
			
		||||
	return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_DISPLAY_BOARDINFO_LATE)
 | 
			
		||||
/*
 | 
			
		||||
 * called during late init (after relocation and after board_init())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -731,8 +731,16 @@ void board_boot_order(u32 *spl_boot_list)
 | 
			
		|||
/* its our chance to print info about boot device */
 | 
			
		||||
void spl_board_init(void)
 | 
			
		||||
{
 | 
			
		||||
	u32 boot_device;
 | 
			
		||||
	int board_type;
 | 
			
		||||
 | 
			
		||||
	/* determine boot device from SRC_SBMR1 (BOOT_CFG[4:1]) or SRC_GPR9 */
 | 
			
		||||
	u32 boot_device = spl_boot_device();
 | 
			
		||||
	boot_device = spl_boot_device();
 | 
			
		||||
 | 
			
		||||
	/* read eeprom again now that we have gd */
 | 
			
		||||
	board_type = read_eeprom(CONFIG_I2C_GSC, &ventana_info);
 | 
			
		||||
	if (board_type == GW_UNKNOWN)
 | 
			
		||||
		hang();
 | 
			
		||||
 | 
			
		||||
	switch (boot_device) {
 | 
			
		||||
	case BOOT_DEVICE_MMC1:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,8 +18,12 @@ CONFIG_SPL_STACK_R_ADDR=0x18000000
 | 
			
		|||
CONFIG_SPL=y
 | 
			
		||||
CONFIG_ENV_OFFSET_REDUND=0xD1400
 | 
			
		||||
CONFIG_CMD_HDMIDETECT=y
 | 
			
		||||
CONFIG_DEFAULT_DEVICE_TREE="imx6q-gw54xx"
 | 
			
		||||
CONFIG_FIT=y
 | 
			
		||||
CONFIG_FIT_VERBOSE=y
 | 
			
		||||
CONFIG_SPL_LOAD_FIT=y
 | 
			
		||||
# CONFIG_USE_SPL_FIT_GENERATOR is not set
 | 
			
		||||
# CONFIG_LEGACY_IMAGE_FORMAT is not set
 | 
			
		||||
CONFIG_SUPPORT_RAW_INITRD=y
 | 
			
		||||
CONFIG_OF_BOARD_SETUP=y
 | 
			
		||||
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/mach-imx/spl_sd.cfg"
 | 
			
		||||
| 
						 | 
				
			
			@ -31,6 +35,7 @@ CONFIG_BOARD_EARLY_INIT_F=y
 | 
			
		|||
CONFIG_MISC_INIT_R=y
 | 
			
		||||
CONFIG_SPL_BOARD_INIT=y
 | 
			
		||||
CONFIG_SPL_STACK_R=y
 | 
			
		||||
CONFIG_SPL_FIT_IMAGE_TINY=y
 | 
			
		||||
CONFIG_SPL_DMA=y
 | 
			
		||||
CONFIG_SPL_I2C_SUPPORT=y
 | 
			
		||||
CONFIG_SPL_OS_BOOT=y
 | 
			
		||||
| 
						 | 
				
			
			@ -62,6 +67,9 @@ CONFIG_CMD_MTDPARTS=y
 | 
			
		|||
CONFIG_MTDIDS_DEFAULT="nand0=nand"
 | 
			
		||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=nand:16m(uboot),1m(env),-(rootfs)"
 | 
			
		||||
CONFIG_CMD_UBI=y
 | 
			
		||||
CONFIG_OF_CONTROL=y
 | 
			
		||||
CONFIG_OF_LIST="imx6q-gw51xx imx6dl-gw51xx imx6q-gw52xx imx6dl-gw52xx imx6q-gw53xx imx6dl-gw53xx imx6q-gw54xx imx6dl-gw54xx imx6q-gw551x imx6dl-gw551x imx6q-gw552x imx6dl-gw552x imx6q-gw553x imx6dl-gw553x imx6q-gw560x imx6dl-gw560x imx6q-gw5903 imx6dl-gw5903 imx6q-gw5904 imx6dl-gw5904 imx6q-gw5907 imx6dl-gw5907 imx6q-gw5910 imx6dl-gw5910 imx6q-gw5912 imx6dl-gw5912 imx6q-gw5913 imx6dl-gw5913"
 | 
			
		||||
CONFIG_MULTI_DTB_FIT=y
 | 
			
		||||
CONFIG_ENV_OVERWRITE=y
 | 
			
		||||
CONFIG_ENV_IS_IN_MMC=y
 | 
			
		||||
CONFIG_SYS_REDUNDAND_ENVIRONMENT=y
 | 
			
		||||
| 
						 | 
				
			
			@ -79,6 +87,7 @@ CONFIG_PHYLIB=y
 | 
			
		|||
CONFIG_E1000=y
 | 
			
		||||
CONFIG_MII=y
 | 
			
		||||
CONFIG_PCI=y
 | 
			
		||||
CONFIG_CONS_INDEX=2
 | 
			
		||||
CONFIG_DM_SERIAL=y
 | 
			
		||||
CONFIG_MXC_UART=y
 | 
			
		||||
CONFIG_DM_THERMAL=y
 | 
			
		||||
| 
						 | 
				
			
			@ -107,5 +116,4 @@ CONFIG_DM_VIDEO=y
 | 
			
		|||
CONFIG_SYS_WHITE_ON_BLACK=y
 | 
			
		||||
# CONFIG_PANEL is not set
 | 
			
		||||
CONFIG_VIDEO_IPUV3=y
 | 
			
		||||
CONFIG_OF_LIBFDT=y
 | 
			
		||||
CONFIG_FDT_FIXUP_PARTITIONS=y
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,8 +18,12 @@ CONFIG_SPL_STACK_R_ADDR=0x18000000
 | 
			
		|||
CONFIG_SPL=y
 | 
			
		||||
CONFIG_ENV_OFFSET_REDUND=0xD1400
 | 
			
		||||
CONFIG_CMD_HDMIDETECT=y
 | 
			
		||||
CONFIG_DEFAULT_DEVICE_TREE="imx6q-gw54xx"
 | 
			
		||||
CONFIG_FIT=y
 | 
			
		||||
CONFIG_FIT_VERBOSE=y
 | 
			
		||||
CONFIG_SPL_LOAD_FIT=y
 | 
			
		||||
# CONFIG_USE_SPL_FIT_GENERATOR is not set
 | 
			
		||||
# CONFIG_LEGACY_IMAGE_FORMAT is not set
 | 
			
		||||
CONFIG_SUPPORT_RAW_INITRD=y
 | 
			
		||||
CONFIG_OF_BOARD_SETUP=y
 | 
			
		||||
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/mach-imx/spl_sd.cfg"
 | 
			
		||||
| 
						 | 
				
			
			@ -31,6 +35,7 @@ CONFIG_BOARD_EARLY_INIT_F=y
 | 
			
		|||
CONFIG_MISC_INIT_R=y
 | 
			
		||||
CONFIG_SPL_BOARD_INIT=y
 | 
			
		||||
CONFIG_SPL_STACK_R=y
 | 
			
		||||
CONFIG_SPL_FIT_IMAGE_TINY=y
 | 
			
		||||
CONFIG_SPL_DMA=y
 | 
			
		||||
CONFIG_SPL_I2C_SUPPORT=y
 | 
			
		||||
CONFIG_SPL_OS_BOOT=y
 | 
			
		||||
| 
						 | 
				
			
			@ -62,6 +67,9 @@ CONFIG_CMD_MTDPARTS=y
 | 
			
		|||
CONFIG_MTDIDS_DEFAULT="nand0=nand"
 | 
			
		||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=nand:16m(uboot),1m(env),-(rootfs)"
 | 
			
		||||
CONFIG_CMD_UBI=y
 | 
			
		||||
CONFIG_OF_CONTROL=y
 | 
			
		||||
CONFIG_OF_LIST="imx6q-gw51xx imx6dl-gw51xx imx6q-gw52xx imx6dl-gw52xx imx6q-gw53xx imx6dl-gw53xx imx6q-gw54xx imx6dl-gw54xx imx6q-gw551x imx6dl-gw551x imx6q-gw552x imx6dl-gw552x imx6q-gw553x imx6dl-gw553x imx6q-gw560x imx6dl-gw560x imx6q-gw5903 imx6dl-gw5903 imx6q-gw5904 imx6dl-gw5904 imx6q-gw5907 imx6dl-gw5907 imx6q-gw5910 imx6dl-gw5910 imx6q-gw5912 imx6dl-gw5912 imx6q-gw5913 imx6dl-gw5913"
 | 
			
		||||
CONFIG_MULTI_DTB_FIT=y
 | 
			
		||||
CONFIG_ENV_OVERWRITE=y
 | 
			
		||||
CONFIG_ENV_IS_IN_MMC=y
 | 
			
		||||
CONFIG_SYS_REDUNDAND_ENVIRONMENT=y
 | 
			
		||||
| 
						 | 
				
			
			@ -83,6 +91,7 @@ CONFIG_MV88E61XX_FIXED_PORTS=0x0
 | 
			
		|||
CONFIG_E1000=y
 | 
			
		||||
CONFIG_MII=y
 | 
			
		||||
CONFIG_PCI=y
 | 
			
		||||
CONFIG_CONS_INDEX=2
 | 
			
		||||
CONFIG_DM_SERIAL=y
 | 
			
		||||
CONFIG_MXC_UART=y
 | 
			
		||||
CONFIG_DM_THERMAL=y
 | 
			
		||||
| 
						 | 
				
			
			@ -111,5 +120,4 @@ CONFIG_DM_VIDEO=y
 | 
			
		|||
CONFIG_SYS_WHITE_ON_BLACK=y
 | 
			
		||||
# CONFIG_PANEL is not set
 | 
			
		||||
CONFIG_VIDEO_IPUV3=y
 | 
			
		||||
CONFIG_OF_LIBFDT=y
 | 
			
		||||
CONFIG_FDT_FIXUP_PARTITIONS=y
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,8 +18,12 @@ CONFIG_SPL_STACK_R_ADDR=0x18000000
 | 
			
		|||
CONFIG_SPL=y
 | 
			
		||||
CONFIG_ENV_OFFSET_REDUND=0x1080000
 | 
			
		||||
CONFIG_CMD_HDMIDETECT=y
 | 
			
		||||
CONFIG_DEFAULT_DEVICE_TREE="imx6q-gw54xx"
 | 
			
		||||
CONFIG_FIT=y
 | 
			
		||||
CONFIG_FIT_VERBOSE=y
 | 
			
		||||
CONFIG_SPL_LOAD_FIT=y
 | 
			
		||||
# CONFIG_USE_SPL_FIT_GENERATOR is not set
 | 
			
		||||
# CONFIG_LEGACY_IMAGE_FORMAT is not set
 | 
			
		||||
CONFIG_SUPPORT_RAW_INITRD=y
 | 
			
		||||
CONFIG_OF_BOARD_SETUP=y
 | 
			
		||||
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/mach-imx/spl_sd.cfg"
 | 
			
		||||
| 
						 | 
				
			
			@ -31,6 +35,7 @@ CONFIG_BOARD_EARLY_INIT_F=y
 | 
			
		|||
CONFIG_MISC_INIT_R=y
 | 
			
		||||
CONFIG_SPL_BOARD_INIT=y
 | 
			
		||||
CONFIG_SPL_STACK_R=y
 | 
			
		||||
CONFIG_SPL_FIT_IMAGE_TINY=y
 | 
			
		||||
CONFIG_SPL_DMA=y
 | 
			
		||||
CONFIG_SPL_I2C_SUPPORT=y
 | 
			
		||||
CONFIG_SPL_NAND_SUPPORT=y
 | 
			
		||||
| 
						 | 
				
			
			@ -65,6 +70,9 @@ CONFIG_CMD_MTDPARTS=y
 | 
			
		|||
CONFIG_MTDIDS_DEFAULT="nand0=nand"
 | 
			
		||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=nand:16m(uboot),1m(env),-(rootfs)"
 | 
			
		||||
CONFIG_CMD_UBI=y
 | 
			
		||||
CONFIG_OF_CONTROL=y
 | 
			
		||||
CONFIG_OF_LIST="imx6q-gw51xx imx6dl-gw51xx imx6q-gw52xx imx6dl-gw52xx imx6q-gw53xx imx6dl-gw53xx imx6q-gw54xx imx6dl-gw54xx imx6q-gw551x imx6dl-gw551x imx6q-gw552x imx6dl-gw552x imx6q-gw553x imx6dl-gw553x imx6q-gw560x imx6dl-gw560x imx6q-gw5903 imx6dl-gw5903 imx6q-gw5904 imx6dl-gw5904 imx6q-gw5907 imx6dl-gw5907 imx6q-gw5910 imx6dl-gw5910 imx6q-gw5912 imx6dl-gw5912 imx6q-gw5913 imx6dl-gw5913"
 | 
			
		||||
CONFIG_MULTI_DTB_FIT=y
 | 
			
		||||
CONFIG_ENV_OVERWRITE=y
 | 
			
		||||
CONFIG_ENV_IS_IN_NAND=y
 | 
			
		||||
CONFIG_SYS_REDUNDAND_ENVIRONMENT=y
 | 
			
		||||
| 
						 | 
				
			
			@ -83,6 +91,7 @@ CONFIG_PHYLIB=y
 | 
			
		|||
CONFIG_E1000=y
 | 
			
		||||
CONFIG_MII=y
 | 
			
		||||
CONFIG_PCI=y
 | 
			
		||||
CONFIG_CONS_INDEX=2
 | 
			
		||||
CONFIG_DM_SERIAL=y
 | 
			
		||||
CONFIG_MXC_UART=y
 | 
			
		||||
CONFIG_DM_THERMAL=y
 | 
			
		||||
| 
						 | 
				
			
			@ -111,5 +120,4 @@ CONFIG_DM_VIDEO=y
 | 
			
		|||
CONFIG_SYS_WHITE_ON_BLACK=y
 | 
			
		||||
# CONFIG_PANEL is not set
 | 
			
		||||
CONFIG_VIDEO_IPUV3=y
 | 
			
		||||
CONFIG_OF_LIBFDT=y
 | 
			
		||||
CONFIG_FDT_FIXUP_PARTITIONS=y
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue