[U-Boot] [PATCH 1/9] arm: ls102xa: Add Freescale LS102xA SoC support

Diana Craciun diana.craciun at freescale.com
Tue Jun 3 16:36:44 CEST 2014


On 05/30/2014 10:22 AM, Alison Wang wrote:
> The QorIQ LS1 family is built on Layerscape architecture,
> the industry's first software-aware, core-agnostic networking
> architecture to offer unprecedented efficiency and scale.
>
> Freescale LS102xA is a set of SoCs combines two ARM
> Cortex-A7 cores that have been optimized for high
> reliability and pack the highest level of integration
> available for sub-3 W embedded communications processors
> with Layerscape architecture and with a comprehensive
> enablement model focused on ease of programmability.
>
> Signed-off-by: Alison Wang <alison.wang at freescale.com>
> Signed-off-by: Jason Jin <jason.jin at freescale.com>
> Signed-off-by: Jingchang Lu <jingchang.lu at freescale.com>
> Signed-off-by: Prabhakar Kushwaha <prabhakar at freescale.com>
> ---
>   arch/arm/cpu/armv7/ls102xa/Makefile               |  11 +
>   arch/arm/cpu/armv7/ls102xa/clock.c                | 131 +++++++
>   arch/arm/cpu/armv7/ls102xa/cpu.c                  | 102 ++++++
>   arch/arm/cpu/armv7/ls102xa/fdt.c                  |  82 +++++
>   arch/arm/cpu/armv7/ls102xa/timer.c                | 129 +++++++
>   arch/arm/include/asm/arch-ls102xa/clock.h         |  23 ++
>   arch/arm/include/asm/arch-ls102xa/config.h        |  70 ++++
>   arch/arm/include/asm/arch-ls102xa/immap_ls102xa.h | 420 ++++++++++++++++++++++
>   arch/arm/include/asm/arch-ls102xa/imx-regs.h      |  53 +++
>   arch/arm/include/asm/config.h                     |   4 +
>   arch/arm/include/asm/io.h                         |   8 +-
>   drivers/watchdog/Makefile                         |   2 +-
>   12 files changed, 1033 insertions(+), 2 deletions(-)
>   create mode 100644 arch/arm/cpu/armv7/ls102xa/Makefile
>   create mode 100644 arch/arm/cpu/armv7/ls102xa/clock.c
>   create mode 100644 arch/arm/cpu/armv7/ls102xa/cpu.c
>   create mode 100644 arch/arm/cpu/armv7/ls102xa/fdt.c
>   create mode 100644 arch/arm/cpu/armv7/ls102xa/timer.c
>   create mode 100644 arch/arm/include/asm/arch-ls102xa/clock.h
>   create mode 100644 arch/arm/include/asm/arch-ls102xa/config.h
>   create mode 100644 arch/arm/include/asm/arch-ls102xa/immap_ls102xa.h
>   create mode 100644 arch/arm/include/asm/arch-ls102xa/imx-regs.h
>
> diff --git a/arch/arm/cpu/armv7/ls102xa/Makefile b/arch/arm/cpu/armv7/ls102xa/Makefile
> new file mode 100644
> index 0000000..7ef793a
> --- /dev/null
> +++ b/arch/arm/cpu/armv7/ls102xa/Makefile
> @@ -0,0 +1,11 @@
> +#
> +# Copyright 2014 Freescale Semiconductor, Inc.
> +#
> +# SPDX-License-Identifier:      GPL-2.0+
> +#
> +
> +obj-y	+= cpu.o
> +obj-y	+= clock.o
> +obj-y	+= timer.o
> +
> +obj-$(CONFIG_OF_LIBFDT)	+= fdt.o
> diff --git a/arch/arm/cpu/armv7/ls102xa/clock.c b/arch/arm/cpu/armv7/ls102xa/clock.c
> new file mode 100644
> index 0000000..75bb0e9
> --- /dev/null
> +++ b/arch/arm/cpu/armv7/ls102xa/clock.c
> @@ -0,0 +1,131 @@
> +/*
> + * Copyright 2014 Freescale Semiconductor, Inc.
> + *
> + * SPDX-License-Identifier:	GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <asm/io.h>
> +#include <asm/arch/immap_ls102xa.h>
> +#include <asm/arch/clock.h>
> +#include <fsl_ifc.h>
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +#ifndef CONFIG_SYS_FSL_NUM_CC_PLLS
> +#define CONFIG_SYS_FSL_NUM_CC_PLLS      2
> +#endif
> +
> +void get_sys_info(struct sys_info *sys_info)
> +{
> +	struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
> +#ifdef CONFIG_FSL_IFC
> +	struct fsl_ifc *ifc_regs = (void *)CONFIG_SYS_IFC_ADDR;
> +	u32 ccr;
> +#endif
> +	struct ccsr_clk *clk = (void *)(CONFIG_SYS_FSL_LS1_CLK_ADDR);
> +	unsigned int cpu;
> +	const u8 core_cplx_pll[6] = {
> +		[0] = 0,	/* CC1 PPL / 1 */
> +		[1] = 0,	/* CC1 PPL / 2 */
> +		[4] = 1,	/* CC2 PPL / 1 */
> +		[5] = 1,	/* CC2 PPL / 2 */
> +	};
> +
> +	const u8 core_cplx_pll_div[6] = {
> +		[0] = 1,	/* CC1 PPL / 1 */
> +		[1] = 2,	/* CC1 PPL / 2 */
> +		[4] = 1,	/* CC2 PPL / 1 */
> +		[5] = 2,	/* CC2 PPL / 2 */
> +	};
> +
> +	uint i;
> +	uint freq_c_pll[CONFIG_SYS_FSL_NUM_CC_PLLS];
> +	uint ratio[CONFIG_SYS_FSL_NUM_CC_PLLS];
> +	unsigned long sysclk = CONFIG_SYS_CLK_FREQ;
> +
> +	sys_info->freq_systembus = sysclk;
> +#ifdef CONFIG_DDR_CLK_FREQ
> +	sys_info->freq_ddrbus = CONFIG_DDR_CLK_FREQ;
> +#else
> +	sys_info->freq_ddrbus = sysclk;
> +#endif
> +
> +	sys_info->freq_systembus *= (in_be32(&gur->rcwsr[0]) >>
> +		RCWSR0_SYS_PLL_RAT_SHIFT) & RCWSR0_SYS_PLL_RAT_MASK;
> +	sys_info->freq_ddrbus *= (in_be32(&gur->rcwsr[0]) >>
> +		RCWSR0_MEM_PLL_RAT_SHIFT) & RCWSR0_MEM_PLL_RAT_MASK;
> +
> +	for (i = 0; i < CONFIG_SYS_FSL_NUM_CC_PLLS; i++) {
> +		ratio[i] = (in_be32(&clk->pllcgsr[i].pllcngsr) >> 1) & 0x3f;
> +		if (ratio[i] > 4)
> +			freq_c_pll[i] = sysclk * ratio[i];
> +		else
> +			freq_c_pll[i] = sys_info->freq_systembus * ratio[i];
> +	}
> +
> +	for (cpu = 0; cpu < CONFIG_MAX_CPUS; cpu++) {
> +		u32 c_pll_sel = (in_be32(&clk->clkcsr[cpu].clkcncsr) >> 27)
> +				& 0xf;
> +		u32 cplx_pll = core_cplx_pll[c_pll_sel];
> +
> +		sys_info->freq_processor[cpu] =
> +			freq_c_pll[cplx_pll] / core_cplx_pll_div[c_pll_sel];
> +	}
> +
> +#if defined(CONFIG_FSL_IFC)
> +	ccr = in_be32(&ifc_regs->ifc_ccr);
> +	ccr = ((ccr & IFC_CCR_CLK_DIV_MASK) >> IFC_CCR_CLK_DIV_SHIFT) + 1;
> +
> +	sys_info->freq_localbus = sys_info->freq_systembus / ccr;
> +#endif
> +}
> +
> +
> +int get_clocks(void)
> +{
> +	struct sys_info sys_info;
> +
> +	get_sys_info(&sys_info);
> +	gd->cpu_clk = sys_info.freq_processor[0];
> +	gd->bus_clk = sys_info.freq_systembus;
> +	gd->mem_clk = sys_info.freq_ddrbus * 2;
> +
> +#if defined(CONFIG_FSL_ESDHC)
> +	gd->arch.sdhc_clk = gd->bus_clk;
> +#endif
> +
> +	return 0;
> +}
> +
> +ulong get_bus_freq(ulong dummy)
> +{
> +	return gd->bus_clk;
> +}
> +
> +ulong get_ddr_freq(ulong dummy)
> +{
> +	return gd->mem_clk;
> +}
> +
> +int get_serial_clock(void)
> +{
> +	return gd->bus_clk / 2;
> +}
> +
> +unsigned int mxc_get_clock(enum mxc_clock clk)
> +{
> +	switch (clk) {
> +	case MXC_I2C_CLK:
> +		return get_bus_freq(0) / 2;
> +	case MXC_ESDHC_CLK:
> +		return get_bus_freq(0);
> +	case MXC_DSPI_CLK:
> +		return get_bus_freq(0) / 2;
> +	case MXC_UART_CLK:
> +		return get_bus_freq(0) / 2;
> +	default:
> +		printf("Unsupported clock\n");
> +	}
> +	return 0;
> +}
> diff --git a/arch/arm/cpu/armv7/ls102xa/cpu.c b/arch/arm/cpu/armv7/ls102xa/cpu.c
> new file mode 100644
> index 0000000..72d198f
> --- /dev/null
> +++ b/arch/arm/cpu/armv7/ls102xa/cpu.c
> @@ -0,0 +1,102 @@
> +/*
> + * Copyright 2014 Freescale Semiconductor, Inc.
> + *
> + * SPDX-License-Identifier:	GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <asm/arch/clock.h>
> +#include <asm/io.h>
> +#include <asm/arch/immap_ls102xa.h>
> +#include <tsec.h>
> +#include <netdev.h>
> +#include <fsl_esdhc.h>
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +#if defined(CONFIG_DISPLAY_CPUINFO)
> +int print_cpuinfo(void)
> +{
> +	char buf[32];
> +	struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
> +	unsigned int svr, major, minor, ver, i;
> +
> +	svr = in_be32(&gur->svr);
> +	major = SVR_MAJ(svr);
> +	minor = SVR_MIN(svr);
> +
> +	puts("CPU:   Freescale LayerScape ");
> +
> +	ver = SVR_SOC_VER(svr);
> +	switch (ver) {
> +	case SOC_VER_SLS1020:
> +		puts("SLS1020");
> +		break;
> +	case SOC_VER_LS1020:
> +		puts("LS1020");
> +		break;
> +	case SOC_VER_LS1021:
> +		puts("LS1021");
> +		break;
> +	case SOC_VER_LS1022:
> +		puts("LS1022");
> +		break;
> +	default:
> +		puts("Unknown");
> +		break;
> +	}
> +
> +	if (IS_E_PROCESSOR(svr) && (ver != SOC_VER_SLS1020))
> +		puts("E");
> +
> +	printf(", Version: %d.%d, (0x%08x)\n", major, minor, svr);
> +
> +	puts("Clock Configuration:");
> +
> +	printf("\n       CPU0(ARMV7):%-4s MHz, ", strmhz(buf, gd->cpu_clk));
> +	printf("\n       Bus:%-4s MHz, ", strmhz(buf, gd->bus_clk));
> +	printf("DDR:%-4s MHz, ", strmhz(buf, gd->mem_clk));
> +	puts("\n");
> +
> +	/* Display the RCW, so that no one gets confused as to what RCW
> +	 * we're actually using for this boot.
> +	 */
> +	puts("Reset Configuration Word (RCW):");
> +	for (i = 0; i < ARRAY_SIZE(gur->rcwsr); i++) {
> +		u32 rcw = in_be32(&gur->rcwsr[i]);
> +
> +		if ((i % 4) == 0)
> +			printf("\n       %08x:", i * 4);
> +		printf(" %08x", rcw);
> +	}
> +	puts("\n");
> +
> +	return 0;
> +}
> +#endif
> +
> +void enable_caches(void)
> +{
> +#ifndef CONFIG_SYS_ICACHE_OFF
> +	icache_enable();
> +#endif
> +#ifndef CONFIG_SYS_DCACHE_OFF
> +	dcache_enable();
> +#endif
> +}
> +
> +#ifdef CONFIG_FSL_ESDHC
> +int cpu_mmc_init(bd_t *bis)
> +{
> +	return fsl_esdhc_mmc_init(bis);
> +}
> +#endif
> +
> +int cpu_eth_init(bd_t *bis)
> +{
> +#ifdef CONFIG_TSEC_ENET
> +	tsec_standard_init(bis);
> +#endif
> +
> +	return 0;
> +}
> diff --git a/arch/arm/cpu/armv7/ls102xa/fdt.c b/arch/arm/cpu/armv7/ls102xa/fdt.c
> new file mode 100644
> index 0000000..042d457
> --- /dev/null
> +++ b/arch/arm/cpu/armv7/ls102xa/fdt.c
> @@ -0,0 +1,82 @@
> +/*
> + * Copyright 2014 Freescale Semiconductor, Inc.
> + *
> + * SPDX-License-Identifier:	GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <libfdt.h>
> +#include <fdt_support.h>
> +#include <asm/io.h>
> +#include <asm/processor.h>
> +#include <asm/arch/clock.h>
> +#include <linux/ctype.h>
> +#ifdef CONFIG_FSL_ESDHC
> +#include <fsl_esdhc.h>
> +#endif
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +void fdt_add_enet_stashing(void *fdt)
> +{
> +	do_fixup_by_compat(fdt, "fsl,etsec2", "bd-stash", NULL, 0, 1);
> +	do_fixup_by_compat_u32(fdt, "fsl,etsec2", "rx-stash-len", 96, 1);
> +	do_fixup_by_compat_u32(fdt, "fsl,etsec2", "rx-stash-idx", 0, 1);
> +}
> +
> +void ft_cpu_setup(void *blob, bd_t *bd)
> +{
> +	int off;
> +	int val;
> +	unsigned long busclk = get_bus_freq(0);
> +
> +	fdt_fixup_ethernet(blob);
> +
> +	fdt_add_enet_stashing(blob);
> +
> +	off = fdt_node_offset_by_prop_value(blob, -1, "device_type", "cpu", 4);
> +	while (off != -FDT_ERR_NOTFOUND) {
> +		val = gd->cpu_clk;
> +		fdt_setprop(blob, off, "clock-frequency", &val, 4);
> +		off = fdt_node_offset_by_prop_value(blob, off,
> +			"device_type", "cpu", 4);
> +	}
> +
> +	do_fixup_by_prop_u32(blob,
> +		"device_type", "soc", 4, "bus-frequency", busclk / 2, 1);
> +
> +#ifdef CONFIG_SYS_NS16550
> +	do_fixup_by_compat_u32(blob, "ns16550",
> +		"clock-frequency", CONFIG_SYS_NS16550_CLK, 1);
> +#endif
> +
> +	do_fixup_by_compat_u32(blob, "fsl,sys-clock",
> +		"clock-frequency", CONFIG_SYS_CLK_FREQ, 1);
> +
> +#if defined(CONFIG_FSL_ESDHC)
> +	fdt_fixup_esdhc(blob, bd);
> +#endif
> +
> +	/*
> +	 * platform bus clock = system bus clock/2
> +	 * Here busclk = system bus clock
> +	 * We are using the platform bus clock as 1588 Timer reference
> +	 * clock source select
> +	 */
> +	do_fixup_by_compat_u32(blob, "fsl,gianfar-ptp-timer",
> +			"timer-frequency", busclk / 2, 1);
> +
> +	/*
> +	 * clock-freq should change to clock-frequency and
> +	 * flexcan-v1.0 should change to p1010-flexcan respectively
> +	 * in the future.
> +	 */
> +	do_fixup_by_compat_u32(blob, "fsl,flexcan-v1.0",
> +			"clock_freq", busclk / 2, 1);
> +
> +	do_fixup_by_compat_u32(blob, "fsl,flexcan-v1.0",
> +			"clock-frequency", busclk / 2, 1);
> +
> +	do_fixup_by_compat_u32(blob, "fsl,p1010-flexcan",
> +			"clock-frequency", busclk / 2, 1);
> +}
> diff --git a/arch/arm/cpu/armv7/ls102xa/timer.c b/arch/arm/cpu/armv7/ls102xa/timer.c
> new file mode 100644
> index 0000000..db5eb65
> --- /dev/null
> +++ b/arch/arm/cpu/armv7/ls102xa/timer.c
> @@ -0,0 +1,129 @@
> +/*
> + * Copyright 2014 Freescale Semiconductor, Inc.
> + *
> + * SPDX-License-Identifier:     GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <asm/io.h>
> +#include <div64.h>
> +#include <asm/arch/immap_ls102xa.h>
> +#include <asm/arch/clock.h>
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +/*
> + * This function is intended for SHORT delays only.
> + * It will overflow at around 10 seconds @ 400MHz,
> + * or 20 seconds @ 200MHz.
> + */
> +unsigned long usec2ticks(unsigned long usec)
> +{
> +	ulong ticks;
> +
> +	if (usec < 1000)
> +		ticks = ((usec * (get_tbclk()/1000)) + 500) / 1000;
> +	else
> +		ticks = ((usec / 10) * (get_tbclk() / 100000));
> +
> +	return ticks;
> +}
> +
> +static inline unsigned long long tick_to_time(unsigned long long tick)
> +{
> +	unsigned long freq;
> +
> +	asm volatile("mrc p15, 0, %0, c14, c0, 0" : "=r" (freq));
> +
> +	tick *= CONFIG_SYS_HZ;
> +	do_div(tick, freq);
> +
> +	return tick;
> +}
> +
> +static inline unsigned long long us_to_tick(unsigned long long usec)
> +{
> +	unsigned long freq;
> +
> +	asm volatile("mrc p15, 0, %0, c14, c0, 0" : "=r" (freq));
> +
> +	usec = usec * freq  + 999999;
> +	do_div(usec, 1000000);
> +
> +	return usec;
> +}
> +
> +int timer_init(void)
> +{
> +	struct sctr_regs *sctr = (struct sctr_regs *)SCTR_BASE_ADDR;
> +	unsigned long ctrl, val, freq;
> +
> +	/* Enable System Counter */
> +	writel(SYS_COUNTER_CTRL_ENABLE, &sctr->cntcr);
> +
> +	freq = GENERIC_TIMER_CLK;
> +	asm("mcr p15, 0, %0, c14, c0, 0" : : "r" (freq));
> +
> +	/* Set PL1 Physical Timer Ctrl */
> +	ctrl = ARCH_TIMER_CTRL_ENABLE;
> +	asm("mcr p15, 0, %0, c14, c2, 1" : : "r" (ctrl));
> +
> +	/* Set PL1 Physical Comp Value */
> +	val = TIMER_COMP_VAL;
> +	asm("mcrr p15, 2, %Q0, %R0, c14" : : "r" (val));
> +
> +	gd->arch.tbl = 0;
> +	gd->arch.tbu = 0;
> +
> +	return 0;
> +}
> +
> +unsigned long long get_ticks(void)
> +{
> +	unsigned long long now;
> +
> +	asm("mrrc p15, 0, %Q0, %R0, c14" : "=r" (now));
> +
> +	/* increment tbu if tbl has rolled over */
> +	if (now < gd->arch.tbl)
> +		gd->arch.tbu++;
> +	gd->arch.tbl = now;
> +
> +	return (((unsigned long long)gd->arch.tbu) << 32) | gd->arch.tbl;
> +}
> +
> +unsigned long get_timer_masked(void)
> +{
> +	return tick_to_time(get_ticks());
> +}
> +
> +unsigned long get_timer(ulong base)
> +{
> +	return get_timer_masked() - base;
> +}
> +
> +/* delay x useconds and preserve advance timstamp value */
> +void __udelay(unsigned long usec)
> +{
> +	unsigned long long start;
> +	unsigned long tmo;
> +
> +	start = get_ticks();			/* get current timestamp */
> +	tmo = us_to_tick(usec);			/* convert usecs to ticks */
> +
> +	while ((get_ticks() - start) < tmo)
> +		;				/* loop till time has passed */
> +}
> +
> +/*
> + * This function is derived from PowerPC code (timebase clock frequency).
> + * On ARM it returns the number of timer ticks per second.
> + */
> +unsigned long get_tbclk(void)
> +{
> +	unsigned long freq;
> +
> +	asm volatile("mrc p15, 0, %0, c14, c0, 0" : "=r" (freq));
> +
> +	return freq;
> +}
> diff --git a/arch/arm/include/asm/arch-ls102xa/clock.h b/arch/arm/include/asm/arch-ls102xa/clock.h
> new file mode 100644
> index 0000000..fd36bb0
> --- /dev/null
> +++ b/arch/arm/include/asm/arch-ls102xa/clock.h
> @@ -0,0 +1,23 @@
> +/*
> + * Copyright 2014 Freescale Semiconductor, Inc.
> + *
> + * SPDX-License-Identifier:	GPL-2.0+
> + *
> + */
> +
> +#ifndef __ASM_ARCH_LS102XA_CLOCK_H_
> +#define __ASM_ARCH_LS102XA_CLOCK_H_
> +
> +#include <common.h>
> +
> +enum mxc_clock {
> +	MXC_ARM_CLK = 0,
> +	MXC_UART_CLK,
> +	MXC_ESDHC_CLK,
> +	MXC_I2C_CLK,
> +	MXC_DSPI_CLK,
> +};
> +
> +unsigned int mxc_get_clock(enum mxc_clock clk);
> +
> +#endif /* __ASM_ARCH_LS102XA_CLOCK_H_ */
> diff --git a/arch/arm/include/asm/arch-ls102xa/config.h b/arch/arm/include/asm/arch-ls102xa/config.h
> new file mode 100644
> index 0000000..2e90c94
> --- /dev/null
> +++ b/arch/arm/include/asm/arch-ls102xa/config.h
> @@ -0,0 +1,70 @@
> +/*
> + * Copyright 2014, Freescale Semiconductor
> + *
> + * SPDX-License-Identifier:	GPL-2.0+
> + */
> +
> +#ifndef _ASM_ARMV7_LS102xA_CONFIG_
> +#define _ASM_ARMV7_LS102xA_CONFIG_
> +
> +#define CONFIG_SYS_IMMR				0x01000000
> +
> +#define CONFIG_SYS_FSL_DDR_ADDR			(CONFIG_SYS_IMMR + 0x00080000)
> +#define CONFIG_SYS_IFC_ADDR			(CONFIG_SYS_IMMR + 0x00530000)
> +#define CONFIG_SYS_FSL_ESDHC_ADDR		(CONFIG_SYS_IMMR + 0x00560000)
> +#define CONFIG_SYS_FSL_SCFG_ADDR		(CONFIG_SYS_IMMR + 0x00570000)
> +#define CONFIG_SYS_FSL_SERDES_ADDR		(CONFIG_SYS_IMMR + 0x00ea0000)
> +#define CONFIG_SYS_FSL_GUTS_ADDR		(CONFIG_SYS_IMMR + 0x00ee0000)
> +#define CONFIG_SYS_FSL_LS1_CLK_ADDR		(CONFIG_SYS_IMMR + 0x00ee1000)
> +#define CONFIG_SYS_NS16550_COM1			(CONFIG_SYS_IMMR + 0x011c0500)
> +#define CONFIG_SYS_NS16550_COM2			(CONFIG_SYS_IMMR + 0x011d0500)
> +
> +#define CONFIG_SYS_CCI400_ADDR			0x01180000
> +
> +#define CONFIG_SYS_TSEC1_OFFSET			0x01d10000
> +#define CONFIG_SYS_TSEC2_OFFSET			0x01d50000
> +#define CONFIG_SYS_TSEC3_OFFSET			0x01d90000
> +#define CONFIG_SYS_MDIO1_OFFSET			0x01d24000
> +
> +#define TSEC_BASE_ADDR				(CONFIG_SYS_IMMR + CONFIG_SYS_TSEC1_OFFSET)
> +#define MDIO_BASE_ADDR				(CONFIG_SYS_IMMR + CONFIG_SYS_MDIO1_OFFSET)
> +
> +#define CONFIG_SYS_FSL_ESDHC_ADDR		(CONFIG_SYS_IMMR + 0x00560000)
> +
> +#define SCTR_BASE_ADDR				(CONFIG_SYS_IMMR + 0x01b00000)
> +
> +#define I2C1_BASE_ADDR				(CONFIG_SYS_IMMR + 0x01180000)
> +#define I2C2_BASE_ADDR				(CONFIG_SYS_IMMR + 0x01190000)
> +#define I2C3_BASE_ADDR				(CONFIG_SYS_IMMR + 0x011a0000)
> +
> +#define WDOG1_BASE_ADDR				(CONFIG_SYS_IMMR + 0x01ad0000)
> +
> +#define QSPI0_BASE_ADDR				(CONFIG_SYS_IMMR + 0x00550000)
> +#define DSPI1_BASE_ADDR				(CONFIG_SYS_IMMR + 0x01100000)
> +
> +#define LPUART_BASE				(CONFIG_SYS_IMMR + 0x01950000)
> +
> +#define CONFIG_SYS_FSL_DDR_BE
> +#define CONFIG_VERY_BIG_RAM
> +#define CONFIG_SYS_FSL_DDRC_ARM_GEN3
> +#define CONFIG_SYS_FSL_DDR
> +#define CONFIG_SYS_LS1_DDR_BLOCK1_SIZE		((phys_size_t)2 << 30)
> +#define CONFIG_MAX_MEM_MAPPED			CONFIG_SYS_LS1_DDR_BLOCK1_SIZE
> +
> +#define CONFIG_SYS_FSL_IFC_BE
> +#define CONFIG_SYS_FSL_ESDHC_BE
> +#define CONFIG_SYS_FSL_WDOG_BE
> +#define CONFIG_SYS_FSL_DSPI_BE
> +#define CONFIG_SYS_FSL_QSPI_BE
> +
> +#define CONFIG_SYS_FSL_SRDS_1
> +

What about CONFIG_ARMV7_VIRT? This config allows the kernel to be 
entered in the HYP mode which is a prerequisite for running KVM which we 
need to support.

Diana



More information about the U-Boot mailing list