diff mbox

[U-Boot] ARM: imx6: Add Bachmann electronic ot1205 mr board

Message ID 1383742312-10922-1-git-send-email-christian.gmeiner@gmail.com
State Changes Requested
Delegated to: Stefano Babic
Headers show

Commit Message

Christian Gmeiner Nov. 6, 2013, 12:51 p.m. UTC
Add basic support for the Bachmann electronic ot1205 board. It
is powered by an imx6d and will come in different flavours. This
patch adds support for the mr flavour. It has a front panel with
some LEDs and some keys.

Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
---
 board/bachmann/ot1205/Makefile |    9 ++
 board/bachmann/ot1205/ot1205.c |  236 ++++++++++++++++++++++++++++++++++++++++
 boards.cfg                     |    1 +
 include/configs/ot1205.h       |  231 +++++++++++++++++++++++++++++++++++++++
 4 files changed, 477 insertions(+)
 create mode 100644 board/bachmann/ot1205/Makefile
 create mode 100644 board/bachmann/ot1205/ot1205.c
 create mode 100644 include/configs/ot1205.h

Comments

Wolfgang Denk Nov. 6, 2013, 3:57 p.m. UTC | #1
Dear Christian Gmeiner,

In message <1383742312-10922-1-git-send-email-christian.gmeiner@gmail.com> you wrote:
> Add basic support for the Bachmann electronic ot1205 board. It
> is powered by an imx6d and will come in different flavours. This
> patch adds support for the mr flavour. It has a front panel with
> some LEDs and some keys.
> 
> Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
> ---
>  board/bachmann/ot1205/Makefile |    9 ++
>  board/bachmann/ot1205/ot1205.c |  236 ++++++++++++++++++++++++++++++++++++++++
>  boards.cfg                     |    1 +
>  include/configs/ot1205.h       |  231 +++++++++++++++++++++++++++++++++++++++
>  4 files changed, 477 insertions(+)
>  create mode 100644 board/bachmann/ot1205/Makefile
>  create mode 100644 board/bachmann/ot1205/ot1205.c
>  create mode 100644 include/configs/ot1205.h

Please run your patch through checkpatch and fix the reported issues.

Thanks.

Wolfgang Denk
Eric Nelson Nov. 6, 2013, 4:21 p.m. UTC | #2
Hi Christian,

On 11/06/2013 05:51 AM, Christian Gmeiner wrote:
> Add basic support for the Bachmann electronic ot1205 board. It
> is powered by an imx6d and will come in different flavours. This
> patch adds support for the mr flavour. It has a front panel with
> some LEDs and some keys.
>
...
> +
> +iomux_v3_cfg_t const uart1_pads[] = {
> +	MX6_PAD_CSI0_DAT10__UART1_TXD | MUX_PAD_CTRL(UART_PAD_CTRL),
> +	MX6_PAD_CSI0_DAT11__UART1_RXD | MUX_PAD_CTRL(UART_PAD_CTRL),
> +};
> +

Depending on which applies, first, you may need to change the
names of these pad registers as shown in this patch:
	http://lists.denx.de/pipermail/u-boot/2013-November/166162.html

Regards,


Eric
Stefano Babic Nov. 6, 2013, 4:51 p.m. UTC | #3
Hi Christian,

On 06/11/2013 13:51, Christian Gmeiner wrote:
> Add basic support for the Bachmann electronic ot1205 board. It
> is powered by an imx6d and will come in different flavours. This
> patch adds support for the mr flavour. It has a front panel with
> some LEDs and some keys.

Maybe it helps if you add here a short list of peripheral that are
supported. From code, I see at least SDHC and ethernet.

> diff --git a/board/bachmann/ot1205/ot1205.c b/board/bachmann/ot1205/ot1205.c
> new file mode 100644
> index 0000000..37c6159
> --- /dev/null
> +++ b/board/bachmann/ot1205/ot1205.c
> @@ -0,0 +1,236 @@
> +/*
> + * Copyright (C) 2010-2013 Freescale Semiconductor, Inc.
> + * Copyright (C) 2013, Bachmann electronic GmbH
> + *
> + * SPDX-License-Identifier:	GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <asm/io.h>
> +#include <asm/arch/clock.h>
> +#include <asm/arch/imx-regs.h>
> +#include <asm/arch/iomux.h>
> +#include <asm/arch/sys_proto.h>
> +#include <malloc.h>
> +#include <asm/arch/mx6-pins.h>
> +#include <asm/errno.h>
> +#include <asm/gpio.h>
> +#include <asm/imx-common/iomux-v3.h>
> +#include <asm/imx-common/mxc_i2c.h>
> +#include <asm/imx-common/boot_mode.h>
> +#include <mmc.h>
> +#include <fsl_esdhc.h>
> +#include <micrel.h>
> +#include <miiphy.h>
> +#include <netdev.h>
> +#include <asm/arch/crm_regs.h>
> +#include <i2c.h>
> +#include <pca953x.h>
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +#define UART_PAD_CTRL  (PAD_CTL_PUS_100K_UP |			\
> +	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm |			\
> +	PAD_CTL_SRE_FAST  | PAD_CTL_HYS)
> +
> +#define USDHC_PAD_CTRL (PAD_CTL_PUS_47K_UP |			\
> +	PAD_CTL_SPEED_LOW | PAD_CTL_DSE_80ohm |			\
> +	PAD_CTL_SRE_FAST  | PAD_CTL_HYS)
> +
> +#define ENET_PAD_CTRL  (PAD_CTL_PUS_100K_UP |			\
> +	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS)
> +
> +#define SPI_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_SPEED_MED |		\
> +	PAD_CTL_DSE_40ohm     | PAD_CTL_SRE_FAST)
> +
> +#define I2C_PAD_CTRL	(PAD_CTL_PUS_100K_UP |			\
> +	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS |	\
> +	PAD_CTL_ODE | PAD_CTL_SRE_FAST)
> +
> +#define OUTPUT_40OHM (PAD_CTL_SPEED_MED|PAD_CTL_DSE_40ohm)
> +
> +int dram_init(void)
> +{
> +	gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE);
> +
> +	return 0;
> +}
> +
> +iomux_v3_cfg_t const uart1_pads[] = {
> +	MX6_PAD_CSI0_DAT10__UART1_TXD | MUX_PAD_CTRL(UART_PAD_CTRL),
> +	MX6_PAD_CSI0_DAT11__UART1_RXD | MUX_PAD_CTRL(UART_PAD_CTRL),
> +};
> +
> +
> +static void setup_iomux_uart(void)
> +{
> +	imx_iomux_v3_setup_multiple_pads(uart1_pads,
> +					ARRAY_SIZE(uart1_pads));
> +}
> +
> +int board_early_init_f(void)
> +{
> +	setup_iomux_uart();
> +
> +	return 0;
> +}
> +
> +iomux_v3_cfg_t const ecspi1_pads[] = {
> +	MX6_PAD_DISP0_DAT3__ECSPI3_SS0  | MUX_PAD_CTRL(SPI_PAD_CTRL),
> +	MX6_PAD_DISP0_DAT4__ECSPI3_SS1  | MUX_PAD_CTRL(SPI_PAD_CTRL),
> +	MX6_PAD_DISP0_DAT2__ECSPI3_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL),
> +	MX6_PAD_DISP0_DAT1__ECSPI3_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL),
> +	MX6_PAD_DISP0_DAT0__ECSPI3_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL),
> +};
> +
> +void setup_spi(void)
> +{
> +	imx_iomux_v3_setup_multiple_pads(ecspi1_pads,
> +					 ARRAY_SIZE(ecspi1_pads));
> +}
> +
> +/*
> + * Do not overwrite the console
> + * Use always serial for U-Boot console
> + */
> +int overwrite_console(void)
> +{
> +	return 1;
> +}

You do not add video capabilities: you can simply drop  overwrite_console().

> +
> +iomux_v3_cfg_t const usdhc3_pads[] = {
> +	MX6_PAD_SD3_CLK__USDHC3_CLK   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
> +	MX6_PAD_SD3_CMD__USDHC3_CMD   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
> +	MX6_PAD_SD3_DAT0__USDHC3_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
> +	MX6_PAD_SD3_DAT1__USDHC3_DAT1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
> +	MX6_PAD_SD3_DAT2__USDHC3_DAT2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
> +	MX6_PAD_SD3_DAT3__USDHC3_DAT3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
> +	MX6_PAD_SD3_DAT4__USDHC3_DAT4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
> +	MX6_PAD_SD3_DAT5__USDHC3_DAT5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
> +	MX6_PAD_SD3_DAT6__USDHC3_DAT6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
> +	MX6_PAD_SD3_DAT7__USDHC3_DAT7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
> +	MX6_PAD_SD3_RST__USDHC3_RST | MUX_PAD_CTRL(USDHC_PAD_CTRL),
> +};
> +
> +int board_mmc_getcd(struct mmc *mmc)
> +{
> +	// returns -1 to indicate that no card-detection mechanism is implemented;
> +	// 0 indicates that no card is present and
> +	// 1 is returned if it was detected that a card is present.

As codestyle we do not use C++ comments

> +int board_eth_init(bd_t *bis)
> +{
> +	setup_iomux_enet();
> +	fecmxc_initialize(bis);
> +
> +	return 0;
> +}

There is not special hndling in this board function. You could move
setup_iomux_enet() into board_early_init() to setup the pinmux and drop
this function. It is then responsability of cpu_eth_init() the
initialization of the FEC controller.

> +
> +#define PC MUX_PAD_CTRL(I2C_PAD_CTRL)
> +
> +/* I2C2 - EDID */
> +struct i2c_pads_info i2c_pad_info1 = {
> +        .scl = {
> +                .i2c_mode = MX6_PAD_EIM_EB2__I2C2_SCL | PC,
> +                .gpio_mode = MX6_PAD_EIM_EB2__GPIO_2_30 | PC,
> +                .gp = IMX_GPIO_NR(2, 30)
> +        },
> +        .sda = {
> +                .i2c_mode = MX6_PAD_EIM_D16__I2C2_SDA | PC,
> +                .gpio_mode = MX6_PAD_EIM_D16__GPIO_3_16 | PC,
> +                .gp = IMX_GPIO_NR(3, 16)
> +        }
> +};
> +
> +/* I2C3 - keys, led, temp sensor */
> +struct i2c_pads_info i2c_pad_info2 = {
> +	.scl = {
> +		.i2c_mode = MX6_PAD_EIM_D17__I2C3_SCL | PC,
> +		.gpio_mode = MX6_PAD_EIM_D17__GPIO_3_17 | PC,
> +		.gp = IMX_GPIO_NR(3, 17)
> +	},
> +	.sda = {
> +		.i2c_mode = MX6_PAD_EIM_D18__I2C3_SDA | PC,
> +		.gpio_mode = MX6_PAD_EIM_D18__GPIO_3_18 | PC,
> +		.gp = IMX_GPIO_NR(3, 18)
> +	}
> +};
> +
> +iomux_v3_cfg_t const pwm_pad[] = {
> +	MX6_PAD_SD1_CMD__PWM4_PWMO | MUX_PAD_CTRL(OUTPUT_40OHM),
> +};
> +
> +static void leds_on(void)
> +{
> +	i2c_set_bus_num(2);
> +	pca953x_set_dir(0x20, 0xffff, PCA953X_DIR_OUT);
> +	pca953x_set_val(0x20, 0xffff, 0x0);
> +}

Please add defines instead of fixed constants.

> +
> +int checkboard(void)
> +{
> +	puts("Board: "CONFIG_SYS_BOARD" "CONFIG_BOARDVER" \n");

I see we have some discrepancies in code. Sometimes we use
CONFIG_SYS_BOARD_NAME, sometimes (mx28evk). We have several
CONFIG_SYS_BOARD_*, it will be better to extend the name to
CONFIG_SYS_BOARD_NAME.

Regarding the board version: I understand this is a board type, not a
revision number. Then CONFIG_BOARDVER does not seem the best choice to
represent the meaning.

> diff --git a/include/configs/ot1205.h b/include/configs/ot1205.h
> new file mode 100644
> index 0000000..fc87d7c
> --- /dev/null
> +++ b/include/configs/ot1205.h
> @@ -0,0 +1,231 @@
> +/*
> + * Copyright (C) 2010-2013 Freescale Semiconductor, Inc.
> + * Copyright (C) 2013, Bachmann electronic GmbH
> + *
> + * SPDX-License-Identifier:     GPL-2.0+
> + */
> +
> +#ifndef __CONFIG_H
> +#define __CONFIG_H
> +
> +#define CONFIG_MX6
> +#define CONFIG_MX6Q
> +#define CONFIG_DISPLAY_CPUINFO
> +#define CONFIG_DISPLAY_BOARDINFO
> +
> +#include <asm/arch/imx-regs.h>
> +#include <asm/imx-common/gpio.h>
> +
> +#define CONFIG_CMDLINE_TAG
> +#define CONFIG_SETUP_MEMORY_TAGS
> +#define CONFIG_INITRD_TAG
> +#define CONFIG_REVISION_TAG
> +
> +/* Size of malloc() pool */
> +#define CONFIG_SYS_MALLOC_LEN           (10 * 1024 * 1024)
> +
> +#define CONFIG_BOARD_EARLY_INIT_F
> +#define CONFIG_MXC_GPIO
> +
> +#define CONFIG_CMD_FUSE
> +#ifdef CONFIG_CMD_FUSE
> +#define CONFIG_MXC_OCOTP
> +#endif
> +
> +/* UART Configs */
> +#define CONFIG_MXC_UART
> +#define CONFIG_MXC_UART_BASE           UART1_BASE
> +
> +/* SF Configs */
> +#define CONFIG_CMD_SF
> +#define CONFIG_SPI_FLASH
> +#define CONFIG_SPI_FLASH_STMICRO
> +#define CONFIG_MXC_SPI
> +#define CONFIG_SF_DEFAULT_BUS  2
> +#define CONFIG_SF_DEFAULT_CS   (0|(IMX_GPIO_NR(1, 3)<<8))
> +#define CONFIG_SF_DEFAULT_SPEED 25000000
> +#define CONFIG_SF_DEFAULT_MODE (SPI_MODE_0)
> +
> +/* IO expander */
> +#define CONFIG_PCA953X
> +#define CONFIG_SYS_I2C_PCA953X_ADDR	0x20
> +#define CONFIG_SYS_I2C_PCA953X_WIDTH	{ {0x20, 16} }
> +#define CONFIG_CMD_PCA953X
> +#define CONFIG_CMD_PCA953X_INFO
> +
> +/* I2C Configs */
> +#define CONFIG_CMD_I2C
> +#define CONFIG_SYS_I2C
> +#define CONFIG_SYS_I2C_MXC
> +#define CONFIG_SYS_I2C_SPEED            100000
> +
> +/* OCOTP Configs */
> +#define CONFIG_CMD_IMXOTP
> +#ifdef CONFIG_CMD_IMXOTP
> +#define CONFIG_IMX_OTP
> +#define IMX_OTP_BASE                    OCOTP_BASE_ADDR
> +#define IMX_OTP_ADDR_MAX                0x7F
> +#define IMX_OTP_DATA_ERROR_VAL          0xBADABADA
> +#define IMX_OTPWRITE_ENABLED
> +#endif
> +
> +/* MMC Configs */
> +#define CONFIG_FSL_ESDHC
> +#define CONFIG_FSL_USDHC
> +#define CONFIG_SYS_FSL_ESDHC_ADDR      0
> +#define CONFIG_SYS_FSL_USDHC_NUM       2
> +
> +#define CONFIG_MMC
> +#define CONFIG_CMD_MMC
> +#define CONFIG_GENERIC_MMC
> +#define CONFIG_BOUNCE_BUFFER
> +
> +#define CONFIG_CMD_PING
> +#define CONFIG_CMD_DHCP
> +#define CONFIG_CMD_MII
> +#define CONFIG_CMD_NET
> +#define CONFIG_FEC_MXC
> +#define CONFIG_MII
> +#define IMX_FEC_BASE                    ENET_BASE_ADDR
> +#define CONFIG_FEC_XCV_TYPE             MII100
> +#define CONFIG_ETHPRIME                 "FEC"
> +#define CONFIG_FEC_MXC_PHYADDR          0x5
> +#define CONFIG_PHYLIB
> +
> +/* Miscellaneous commands */
> +#define CONFIG_CMD_BMODE
> +#define CONFIG_CMD_SETEXPR
> +
> +/* allow to overwrite serial and ethaddr */
> +#define CONFIG_ENV_OVERWRITE
> +#define CONFIG_CONS_INDEX              1
> +#define CONFIG_BAUDRATE                115200
> +
> +/* Command definition */
> +#include <config_cmd_default.h>
> +
> +#undef CONFIG_CMD_IMLS
> +
> +#define CONFIG_BOOTDELAY               1
> +
> +#define CONFIG_PREBOOT                 ""
> +
> +#define CONFIG_LOADADDR                0x12000000
> +#define CONFIG_SYS_TEXT_BASE           0x17800000
> +
> +/* Miscellaneous configurable options */
> +#define CONFIG_SYS_LONGHELP
> +#define CONFIG_SYS_HUSH_PARSER
> +#define CONFIG_SYS_PROMPT              "U-Boot > "
> +#define CONFIG_SYS_CBSIZE              1024
> +
> +/* Print Buffer Size */
> +#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
> +#define CONFIG_SYS_MAXARGS             16
> +#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
> +
> +#define CONFIG_SYS_LOAD_ADDR           CONFIG_LOADADDR
> +
> +#define CONFIG_CMDLINE_EDITING
> +
> +/* Physical Memory Map */
> +#define CONFIG_NR_DRAM_BANKS           1
> +#define PHYS_SDRAM                     MMDC0_ARB_BASE_ADDR
> +#define PHYS_SDRAM_SIZE                (1u * 1024 * 1024 * 1024) /* TODO: needed? */
> +
> +#define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM
> +#define CONFIG_SYS_INIT_RAM_ADDR       IRAM_BASE_ADDR
> +#define CONFIG_SYS_INIT_RAM_SIZE       IRAM_SIZE
> +
> +#define CONFIG_SYS_INIT_SP_OFFSET \
> +        (CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
> +#define CONFIG_SYS_INIT_SP_ADDR \
> +        (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)
> +
> +/* FLASH and environment organization */
> +#define CONFIG_SYS_NO_FLASH
> +
> +#define CONFIG_ENV_SIZE                 (8 * 1024)	/* 8 kb */
> +#define CONFIG_ENV_IS_NOWHERE
> +
> +#define CONFIG_OF_LIBFDT
> +#define CONFIG_CMD_BOOTZ
> +
> +#ifndef CONFIG_SYS_DCACHE_OFF
> +#define CONFIG_CMD_CACHE
> +#endif
> +
> +#define CONFIG_CMD_BOOTZ
> +#define CONFIG_SUPPORT_RAW_INITRD
> +
> +/* FS Configs */
> +#define CONFIG_CMD_EXT3
> +#define CONFIG_CMD_EXT4
> +#define CONFIG_DOS_PARTITION
> +#define CONFIG_CMD_FS_GENERIC
> +
> +/* needed for run-in etc. */
> +#define CONFIG_BOOTP_SERVERIP
> +#define CONFIG_BOOTP_BOOTFILE
> +
> +/*
> + * Memory layout for where various images get loaded by boot scripts
> + */
> +#define MEM_LAYOUT_ENV_SETTINGS \
> +	"scriptaddr=0x14000000\0" \
> +	"kernel_addr_r=0x10000000\0" \
> +	"fdt_addr_r=0x11000000\0" \
> +	"ramdisk_addr_r=0x12A00000\0" \
> +	"fdt_high=0xffffffff\0"   \
> +	"initrd_high=0xffffffff\0"
> +
> +#ifdef CONFIG_CMD_MMC
> +#define BOOTCMDS_MMC \
> +	"mmc_boot=" \
> +		"setenv devtype mmc; " \
> +		"if mmc dev ${devnum}; then " \
> +			"run scan_boot; " \
> +		"fi\0" \
> +	"bootcmd_mmc0=setenv devnum 0; run mmc_boot;\0"
> +#define BOOT_TARGETS_MMC "mmc0"
> +#endif
> +
> +#define BOOTCMDS_COMMON \
> +	"rootpart=2\0" \
> +	\
> +	"script_boot="                                                    \
> +		"if load ${devtype} ${devnum}:${rootpart} "               \
> +				"${scriptaddr} ${prefix}${script}; then " \
> +			"echo ${script} found! Executing ...;"            \
> +			"source ${scriptaddr};"                           \
> +		"fi;\0"                                                   \
> +	\
> +	"scan_boot="                                                      \
> +		"echo Scanning ${devtype} ${devnum}...; "                 \
> +		"for prefix in ${boot_prefixes}; do "                     \
> +			"for script in ${boot_scripts}; do "              \
> +				"run script_boot; "                       \
> +			"done; "                                          \
> +		"done;\0"                                                 \
> +	\
> +	"boot_targets=" \
> +		BOOT_TARGETS_MMC " " \
> +		"\0" \
> +	\
> +	"boot_prefixes=/boot/ \0" \
> +	\
> +	"boot_scripts=boot.scr\0" \
> +	\
> +	BOOTCMDS_MMC \
> +
> +#define CONFIG_BOOTCOMMAND \
> +	"for target in ${boot_targets}; do run bootcmd_${target}; done"
> +
> +#define CONFIG_EXTRA_ENV_SETTINGS \
> +        "soc=imx6d\0" \
> +        "board="CONFIG_SYS_BOARD"\0" \
> +        "boardver="CONFIG_BOARDVER"\0" \
> +        MEM_LAYOUT_ENV_SETTINGS \
> +        BOOTCMDS_COMMON
> +
> +#endif         /* __CONFIG_H */
> 

Best regards,
Stefano Babic
Fabio Estevam Nov. 6, 2013, 6:20 p.m. UTC | #4
On Wed, Nov 6, 2013 at 10:51 AM, Christian Gmeiner
<christian.gmeiner@gmail.com> wrote:

> +int dram_init(void)
> +{
> +       gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE);
> +
> +       return 0;
> +}
> +
> +iomux_v3_cfg_t const uart1_pads[] = {

You can make it static.

> +int board_early_init_f(void)
> +{
> +       setup_iomux_uart();
> +
> +       return 0;
> +}
> +
> +iomux_v3_cfg_t const ecspi1_pads[] = {

Ditto.

> +/*
> + * Do not overwrite the console
> + * Use always serial for U-Boot console
> + */
> +int overwrite_console(void)
> +{
> +       return 1;
> +}

This can be removed.

> +iomux_v3_cfg_t const usdhc3_pads[] = {

static

> +int board_mmc_getcd(struct mmc *mmc)
> +{
> +       // returns -1 to indicate that no card-detection mechanism is implemented;
> +       // 0 indicates that no card is present and
> +       // 1 is returned if it was detected that a card is present.
> +       return 1;

No // style comments.

> +int board_mmc_init(bd_t *bis)
> +{
> +       s32 status = 0;
> +
> +       usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
> +       usdhc_cfg[0].max_bus_width = 8;
> +
> +       imx_iomux_v3_setup_multiple_pads(
> +               usdhc3_pads, ARRAY_SIZE(usdhc3_pads));
> +
> +       status |= fsl_esdhc_initialize(bis, &usdhc_cfg[0]);
> +
> +       return status;

You can get rid of the status variable and just do:

return fsl_esdhc_initialize(bis, &usdhc_cfg[0]);


> +}
> +
> +iomux_v3_cfg_t const enet_pads[] = {

static

> +/* I2C2 - EDID */
> +struct i2c_pads_info i2c_pad_info1 = {

static

> +        .scl = {
> +                .i2c_mode = MX6_PAD_EIM_EB2__I2C2_SCL | PC,
> +                .gpio_mode = MX6_PAD_EIM_EB2__GPIO_2_30 | PC,
> +                .gp = IMX_GPIO_NR(2, 30)
> +        },
> +        .sda = {
> +                .i2c_mode = MX6_PAD_EIM_D16__I2C2_SDA | PC,
> +                .gpio_mode = MX6_PAD_EIM_D16__GPIO_3_16 | PC,
> +                .gp = IMX_GPIO_NR(3, 16)
> +        }
> +};
> +
> +/* I2C3 - keys, led, temp sensor */
> +struct i2c_pads_info i2c_pad_info2 = {

static

> +       .scl = {
> +               .i2c_mode = MX6_PAD_EIM_D17__I2C3_SCL | PC,
> +               .gpio_mode = MX6_PAD_EIM_D17__GPIO_3_17 | PC,
> +               .gp = IMX_GPIO_NR(3, 17)
> +       },
> +       .sda = {
> +               .i2c_mode = MX6_PAD_EIM_D18__I2C3_SDA | PC,
> +               .gpio_mode = MX6_PAD_EIM_D18__GPIO_3_18 | PC,
> +               .gp = IMX_GPIO_NR(3, 18)
> +       }
> +};
> +
> +iomux_v3_cfg_t const pwm_pad[] = {

static

> +++ b/include/configs/ot1205.h
> @@ -0,0 +1,231 @@
> +/*
> + * Copyright (C) 2010-2013 Freescale Semiconductor, Inc.
> + * Copyright (C) 2013, Bachmann electronic GmbH
> + *
> + * SPDX-License-Identifier:     GPL-2.0+
> + */
> +
> +#ifndef __CONFIG_H
> +#define __CONFIG_H
> +
> +#define CONFIG_MX6
> +#define CONFIG_MX6Q

If you pass the mx6 version in boards.cfg, then it will make things
easier when you add support for the other board variants you have.

> +#define CONFIG_DISPLAY_CPUINFO
> +#define CONFIG_DISPLAY_BOARDINFO
> +
> +#include <asm/arch/imx-regs.h>
> +#include <asm/imx-common/gpio.h>
> +
> +#define CONFIG_CMDLINE_TAG
> +#define CONFIG_SETUP_MEMORY_TAGS
> +#define CONFIG_INITRD_TAG
> +#define CONFIG_REVISION_TAG
> +
> +/* Size of malloc() pool */
> +#define CONFIG_SYS_MALLOC_LEN           (10 * 1024 * 1024)

If you do not have video support you can use a smaller region, such as 2MB.

> +/* OCOTP Configs */
> +#define CONFIG_CMD_IMXOTP
> +#ifdef CONFIG_CMD_IMXOTP
> +#define CONFIG_IMX_OTP
> +#define IMX_OTP_BASE                    OCOTP_BASE_ADDR
> +#define IMX_OTP_ADDR_MAX                0x7F
> +#define IMX_OTP_DATA_ERROR_VAL          0xBADABADA

Why do you need this? Not used anywehere.

Regards,

Fabio Estevam
diff mbox

Patch

diff --git a/board/bachmann/ot1205/Makefile b/board/bachmann/ot1205/Makefile
new file mode 100644
index 0000000..75933c4
--- /dev/null
+++ b/board/bachmann/ot1205/Makefile
@@ -0,0 +1,9 @@ 
+#
+# Copyright (C) 2012-2013, Guennadi Liakhovetski <lg@denx.de>
+# (C) Copyright 2012-2013 Freescale Semiconductor, Inc.
+# Copyright (C) 2013, Boundary Devices <info@boundarydevices.com>
+#
+# SPDX-License-Identifier:	GPL-2.0+
+#
+
+obj-y  := ot1205.o
diff --git a/board/bachmann/ot1205/ot1205.c b/board/bachmann/ot1205/ot1205.c
new file mode 100644
index 0000000..37c6159
--- /dev/null
+++ b/board/bachmann/ot1205/ot1205.c
@@ -0,0 +1,236 @@ 
+/*
+ * Copyright (C) 2010-2013 Freescale Semiconductor, Inc.
+ * Copyright (C) 2013, Bachmann electronic GmbH
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/iomux.h>
+#include <asm/arch/sys_proto.h>
+#include <malloc.h>
+#include <asm/arch/mx6-pins.h>
+#include <asm/errno.h>
+#include <asm/gpio.h>
+#include <asm/imx-common/iomux-v3.h>
+#include <asm/imx-common/mxc_i2c.h>
+#include <asm/imx-common/boot_mode.h>
+#include <mmc.h>
+#include <fsl_esdhc.h>
+#include <micrel.h>
+#include <miiphy.h>
+#include <netdev.h>
+#include <asm/arch/crm_regs.h>
+#include <i2c.h>
+#include <pca953x.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define UART_PAD_CTRL  (PAD_CTL_PUS_100K_UP |			\
+	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm |			\
+	PAD_CTL_SRE_FAST  | PAD_CTL_HYS)
+
+#define USDHC_PAD_CTRL (PAD_CTL_PUS_47K_UP |			\
+	PAD_CTL_SPEED_LOW | PAD_CTL_DSE_80ohm |			\
+	PAD_CTL_SRE_FAST  | PAD_CTL_HYS)
+
+#define ENET_PAD_CTRL  (PAD_CTL_PUS_100K_UP |			\
+	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS)
+
+#define SPI_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_SPEED_MED |		\
+	PAD_CTL_DSE_40ohm     | PAD_CTL_SRE_FAST)
+
+#define I2C_PAD_CTRL	(PAD_CTL_PUS_100K_UP |			\
+	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS |	\
+	PAD_CTL_ODE | PAD_CTL_SRE_FAST)
+
+#define OUTPUT_40OHM (PAD_CTL_SPEED_MED|PAD_CTL_DSE_40ohm)
+
+int dram_init(void)
+{
+	gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE);
+
+	return 0;
+}
+
+iomux_v3_cfg_t const uart1_pads[] = {
+	MX6_PAD_CSI0_DAT10__UART1_TXD | MUX_PAD_CTRL(UART_PAD_CTRL),
+	MX6_PAD_CSI0_DAT11__UART1_RXD | MUX_PAD_CTRL(UART_PAD_CTRL),
+};
+
+
+static void setup_iomux_uart(void)
+{
+	imx_iomux_v3_setup_multiple_pads(uart1_pads,
+					ARRAY_SIZE(uart1_pads));
+}
+
+int board_early_init_f(void)
+{
+	setup_iomux_uart();
+
+	return 0;
+}
+
+iomux_v3_cfg_t const ecspi1_pads[] = {
+	MX6_PAD_DISP0_DAT3__ECSPI3_SS0  | MUX_PAD_CTRL(SPI_PAD_CTRL),
+	MX6_PAD_DISP0_DAT4__ECSPI3_SS1  | MUX_PAD_CTRL(SPI_PAD_CTRL),
+	MX6_PAD_DISP0_DAT2__ECSPI3_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL),
+	MX6_PAD_DISP0_DAT1__ECSPI3_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL),
+	MX6_PAD_DISP0_DAT0__ECSPI3_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL),
+};
+
+void setup_spi(void)
+{
+	imx_iomux_v3_setup_multiple_pads(ecspi1_pads,
+					 ARRAY_SIZE(ecspi1_pads));
+}
+
+/*
+ * Do not overwrite the console
+ * Use always serial for U-Boot console
+ */
+int overwrite_console(void)
+{
+	return 1;
+}
+
+iomux_v3_cfg_t const usdhc3_pads[] = {
+	MX6_PAD_SD3_CLK__USDHC3_CLK   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+	MX6_PAD_SD3_CMD__USDHC3_CMD   | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+	MX6_PAD_SD3_DAT0__USDHC3_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+	MX6_PAD_SD3_DAT1__USDHC3_DAT1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+	MX6_PAD_SD3_DAT2__USDHC3_DAT2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+	MX6_PAD_SD3_DAT3__USDHC3_DAT3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+	MX6_PAD_SD3_DAT4__USDHC3_DAT4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+	MX6_PAD_SD3_DAT5__USDHC3_DAT5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+	MX6_PAD_SD3_DAT6__USDHC3_DAT6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+	MX6_PAD_SD3_DAT7__USDHC3_DAT7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+	MX6_PAD_SD3_RST__USDHC3_RST | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+};
+
+int board_mmc_getcd(struct mmc *mmc)
+{
+	// returns -1 to indicate that no card-detection mechanism is implemented;
+	// 0 indicates that no card is present and
+	// 1 is returned if it was detected that a card is present.
+	return 1;
+}
+
+struct fsl_esdhc_cfg usdhc_cfg[] = {
+	{USDHC3_BASE_ADDR},
+};
+
+int board_mmc_init(bd_t *bis)
+{
+	s32 status = 0;
+
+	usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
+	usdhc_cfg[0].max_bus_width = 8;
+
+	imx_iomux_v3_setup_multiple_pads(
+		usdhc3_pads, ARRAY_SIZE(usdhc3_pads));
+
+	status |= fsl_esdhc_initialize(bis, &usdhc_cfg[0]);
+
+	return status;
+}
+
+iomux_v3_cfg_t const enet_pads[] = {
+	MX6_PAD_KEY_ROW1__ENET_COL | MUX_PAD_CTRL(ENET_PAD_CTRL),
+	MX6_PAD_KEY_COL3__ENET_CRS | MUX_PAD_CTRL(ENET_PAD_CTRL),
+	MX6_PAD_ENET_MDIO__ENET_MDIO |MUX_PAD_CTRL(ENET_PAD_CTRL),
+	MX6_PAD_ENET_MDC__ENET_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL),
+	MX6_PAD_GPIO_16__ENET_ETHERNET_REF_OUT | MUX_PAD_CTRL(ENET_PAD_CTRL),
+	MX6_PAD_GPIO_18__ENET_RX_CLK | MUX_PAD_CTRL(ENET_PAD_CTRL),
+	MX6_PAD_ENET_RXD0__ENET_RDATA_0 | MUX_PAD_CTRL(ENET_PAD_CTRL),
+	MX6_PAD_ENET_RXD1__ENET_RDATA_1 | MUX_PAD_CTRL(ENET_PAD_CTRL),
+	MX6_PAD_KEY_COL2__ENET_RDATA_2 | MUX_PAD_CTRL(ENET_PAD_CTRL),
+	MX6_PAD_KEY_COL0__ENET_RDATA_3 | MUX_PAD_CTRL(ENET_PAD_CTRL),
+	MX6_PAD_ENET_CRS_DV__ENET_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),
+	MX6_PAD_ENET_REF_CLK__ENET_TX_CLK | MUX_PAD_CTRL(ENET_PAD_CTRL),
+	MX6_PAD_ENET_TXD0__ENET_TDATA_0 | MUX_PAD_CTRL(ENET_PAD_CTRL),
+	MX6_PAD_ENET_TXD1__ENET_TDATA_1 | MUX_PAD_CTRL(ENET_PAD_CTRL),
+	MX6_PAD_KEY_ROW2__ENET_TDATA_2 | MUX_PAD_CTRL(ENET_PAD_CTRL),
+	MX6_PAD_KEY_ROW0__ENET_TDATA_3 | MUX_PAD_CTRL(ENET_PAD_CTRL),
+	MX6_PAD_ENET_TX_EN__ENET_TX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),
+};
+
+static void setup_iomux_enet(void)
+{
+	imx_iomux_v3_setup_multiple_pads(enet_pads,
+					ARRAY_SIZE(enet_pads));
+}
+
+int board_eth_init(bd_t *bis)
+{
+	setup_iomux_enet();
+	fecmxc_initialize(bis);
+
+	return 0;
+}
+
+#define PC MUX_PAD_CTRL(I2C_PAD_CTRL)
+
+/* I2C2 - EDID */
+struct i2c_pads_info i2c_pad_info1 = {
+        .scl = {
+                .i2c_mode = MX6_PAD_EIM_EB2__I2C2_SCL | PC,
+                .gpio_mode = MX6_PAD_EIM_EB2__GPIO_2_30 | PC,
+                .gp = IMX_GPIO_NR(2, 30)
+        },
+        .sda = {
+                .i2c_mode = MX6_PAD_EIM_D16__I2C2_SDA | PC,
+                .gpio_mode = MX6_PAD_EIM_D16__GPIO_3_16 | PC,
+                .gp = IMX_GPIO_NR(3, 16)
+        }
+};
+
+/* I2C3 - keys, led, temp sensor */
+struct i2c_pads_info i2c_pad_info2 = {
+	.scl = {
+		.i2c_mode = MX6_PAD_EIM_D17__I2C3_SCL | PC,
+		.gpio_mode = MX6_PAD_EIM_D17__GPIO_3_17 | PC,
+		.gp = IMX_GPIO_NR(3, 17)
+	},
+	.sda = {
+		.i2c_mode = MX6_PAD_EIM_D18__I2C3_SDA | PC,
+		.gpio_mode = MX6_PAD_EIM_D18__GPIO_3_18 | PC,
+		.gp = IMX_GPIO_NR(3, 18)
+	}
+};
+
+iomux_v3_cfg_t const pwm_pad[] = {
+	MX6_PAD_SD1_CMD__PWM4_PWMO | MUX_PAD_CTRL(OUTPUT_40OHM),
+};
+
+static void leds_on(void)
+{
+	i2c_set_bus_num(2);
+	pca953x_set_dir(0x20, 0xffff, PCA953X_DIR_OUT);
+	pca953x_set_val(0x20, 0xffff, 0x0);
+}
+
+int board_init(void)
+{
+	/* address of boot parameters */
+	gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
+
+	setup_spi();
+
+	setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info1);
+	setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info2);
+
+	leds_on();
+
+	return 0;
+}
+
+int checkboard(void)
+{
+	puts("Board: "CONFIG_SYS_BOARD" "CONFIG_BOARDVER" \n");
+	return 0;
+}
diff --git a/boards.cfg b/boards.cfg
index 5e10125..13dff3b 100644
--- a/boards.cfg
+++ b/boards.cfg
@@ -291,6 +291,7 @@  Active  arm         armv7          mx5         ttcontrol       vision2
 Active  arm         armv7          mx6         -               wandboard           wandboard_dl                         wandboard:IMX_CONFIG=board/boundary/nitrogen6x/nitrogen6dl.cfg,MX6DL,DDR_MB=1024                                                  Fabio Estevam <fabio.estevam@freescale.com>
 Active  arm         armv7          mx6         -               wandboard           wandboard_quad                       wandboard:IMX_CONFIG=board/boundary/nitrogen6x/nitrogen6q2g.cfg,MX6Q,DDR_MB=2048                                                  Fabio Estevam <fabio.estevam@freescale.com>
 Active  arm         armv7          mx6         -               wandboard           wandboard_solo                       wandboard:IMX_CONFIG=board/boundary/nitrogen6x/nitrogen6s.cfg,MX6S,DDR_MB=512                                                     Fabio Estevam <fabio.estevam@freescale.com>
+Active  arm         armv7          mx6         bachmann        ot1205              ot1205_mr                            ot1205:IMX_CONFIG=board/freescale/imx/ddr/mx6q_4x_mt41j128.cfg,BOARDVER="mr"                                                                    Christian Gmeiner <c.gmeiner@bachmann.info>
 Active  arm         armv7          mx6         boundary        nitrogen6x          mx6qsabrelite                        nitrogen6x:IMX_CONFIG=board/boundary/nitrogen6x/nitrogen6q.cfg,MX6Q,DDR_MB=1024,SABRELITE                                         Eric Nelson <eric.nelson@boundarydevices.com>
 Active  arm         armv7          mx6         boundary        nitrogen6x          nitrogen6dl                          nitrogen6x:IMX_CONFIG=board/boundary/nitrogen6x/nitrogen6dl.cfg,MX6DL,DDR_MB=1024                                                 Eric Nelson <eric.nelson@boundarydevices.com>
 Active  arm         armv7          mx6         boundary        nitrogen6x          nitrogen6dl2g                        nitrogen6x:IMX_CONFIG=board/boundary/nitrogen6x/nitrogen6dl2g.cfg,MX6DL,DDR_MB=2048                                               Eric Nelson <eric.nelson@boundarydevices.com>
diff --git a/include/configs/ot1205.h b/include/configs/ot1205.h
new file mode 100644
index 0000000..fc87d7c
--- /dev/null
+++ b/include/configs/ot1205.h
@@ -0,0 +1,231 @@ 
+/*
+ * Copyright (C) 2010-2013 Freescale Semiconductor, Inc.
+ * Copyright (C) 2013, Bachmann electronic GmbH
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#define CONFIG_MX6
+#define CONFIG_MX6Q
+#define CONFIG_DISPLAY_CPUINFO
+#define CONFIG_DISPLAY_BOARDINFO
+
+#include <asm/arch/imx-regs.h>
+#include <asm/imx-common/gpio.h>
+
+#define CONFIG_CMDLINE_TAG
+#define CONFIG_SETUP_MEMORY_TAGS
+#define CONFIG_INITRD_TAG
+#define CONFIG_REVISION_TAG
+
+/* Size of malloc() pool */
+#define CONFIG_SYS_MALLOC_LEN           (10 * 1024 * 1024)
+
+#define CONFIG_BOARD_EARLY_INIT_F
+#define CONFIG_MXC_GPIO
+
+#define CONFIG_CMD_FUSE
+#ifdef CONFIG_CMD_FUSE
+#define CONFIG_MXC_OCOTP
+#endif
+
+/* UART Configs */
+#define CONFIG_MXC_UART
+#define CONFIG_MXC_UART_BASE           UART1_BASE
+
+/* SF Configs */
+#define CONFIG_CMD_SF
+#define CONFIG_SPI_FLASH
+#define CONFIG_SPI_FLASH_STMICRO
+#define CONFIG_MXC_SPI
+#define CONFIG_SF_DEFAULT_BUS  2
+#define CONFIG_SF_DEFAULT_CS   (0|(IMX_GPIO_NR(1, 3)<<8))
+#define CONFIG_SF_DEFAULT_SPEED 25000000
+#define CONFIG_SF_DEFAULT_MODE (SPI_MODE_0)
+
+/* IO expander */
+#define CONFIG_PCA953X
+#define CONFIG_SYS_I2C_PCA953X_ADDR	0x20
+#define CONFIG_SYS_I2C_PCA953X_WIDTH	{ {0x20, 16} }
+#define CONFIG_CMD_PCA953X
+#define CONFIG_CMD_PCA953X_INFO
+
+/* I2C Configs */
+#define CONFIG_CMD_I2C
+#define CONFIG_SYS_I2C
+#define CONFIG_SYS_I2C_MXC
+#define CONFIG_SYS_I2C_SPEED            100000
+
+/* OCOTP Configs */
+#define CONFIG_CMD_IMXOTP
+#ifdef CONFIG_CMD_IMXOTP
+#define CONFIG_IMX_OTP
+#define IMX_OTP_BASE                    OCOTP_BASE_ADDR
+#define IMX_OTP_ADDR_MAX                0x7F
+#define IMX_OTP_DATA_ERROR_VAL          0xBADABADA
+#define IMX_OTPWRITE_ENABLED
+#endif
+
+/* MMC Configs */
+#define CONFIG_FSL_ESDHC
+#define CONFIG_FSL_USDHC
+#define CONFIG_SYS_FSL_ESDHC_ADDR      0
+#define CONFIG_SYS_FSL_USDHC_NUM       2
+
+#define CONFIG_MMC
+#define CONFIG_CMD_MMC
+#define CONFIG_GENERIC_MMC
+#define CONFIG_BOUNCE_BUFFER
+
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_NET
+#define CONFIG_FEC_MXC
+#define CONFIG_MII
+#define IMX_FEC_BASE                    ENET_BASE_ADDR
+#define CONFIG_FEC_XCV_TYPE             MII100
+#define CONFIG_ETHPRIME                 "FEC"
+#define CONFIG_FEC_MXC_PHYADDR          0x5
+#define CONFIG_PHYLIB
+
+/* Miscellaneous commands */
+#define CONFIG_CMD_BMODE
+#define CONFIG_CMD_SETEXPR
+
+/* allow to overwrite serial and ethaddr */
+#define CONFIG_ENV_OVERWRITE
+#define CONFIG_CONS_INDEX              1
+#define CONFIG_BAUDRATE                115200
+
+/* Command definition */
+#include <config_cmd_default.h>
+
+#undef CONFIG_CMD_IMLS
+
+#define CONFIG_BOOTDELAY               1
+
+#define CONFIG_PREBOOT                 ""
+
+#define CONFIG_LOADADDR                0x12000000
+#define CONFIG_SYS_TEXT_BASE           0x17800000
+
+/* Miscellaneous configurable options */
+#define CONFIG_SYS_LONGHELP
+#define CONFIG_SYS_HUSH_PARSER
+#define CONFIG_SYS_PROMPT              "U-Boot > "
+#define CONFIG_SYS_CBSIZE              1024
+
+/* Print Buffer Size */
+#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
+#define CONFIG_SYS_MAXARGS             16
+#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
+
+#define CONFIG_SYS_LOAD_ADDR           CONFIG_LOADADDR
+
+#define CONFIG_CMDLINE_EDITING
+
+/* Physical Memory Map */
+#define CONFIG_NR_DRAM_BANKS           1
+#define PHYS_SDRAM                     MMDC0_ARB_BASE_ADDR
+#define PHYS_SDRAM_SIZE                (1u * 1024 * 1024 * 1024) /* TODO: needed? */
+
+#define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM
+#define CONFIG_SYS_INIT_RAM_ADDR       IRAM_BASE_ADDR
+#define CONFIG_SYS_INIT_RAM_SIZE       IRAM_SIZE
+
+#define CONFIG_SYS_INIT_SP_OFFSET \
+        (CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
+#define CONFIG_SYS_INIT_SP_ADDR \
+        (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)
+
+/* FLASH and environment organization */
+#define CONFIG_SYS_NO_FLASH
+
+#define CONFIG_ENV_SIZE                 (8 * 1024)	/* 8 kb */
+#define CONFIG_ENV_IS_NOWHERE
+
+#define CONFIG_OF_LIBFDT
+#define CONFIG_CMD_BOOTZ
+
+#ifndef CONFIG_SYS_DCACHE_OFF
+#define CONFIG_CMD_CACHE
+#endif
+
+#define CONFIG_CMD_BOOTZ
+#define CONFIG_SUPPORT_RAW_INITRD
+
+/* FS Configs */
+#define CONFIG_CMD_EXT3
+#define CONFIG_CMD_EXT4
+#define CONFIG_DOS_PARTITION
+#define CONFIG_CMD_FS_GENERIC
+
+/* needed for run-in etc. */
+#define CONFIG_BOOTP_SERVERIP
+#define CONFIG_BOOTP_BOOTFILE
+
+/*
+ * Memory layout for where various images get loaded by boot scripts
+ */
+#define MEM_LAYOUT_ENV_SETTINGS \
+	"scriptaddr=0x14000000\0" \
+	"kernel_addr_r=0x10000000\0" \
+	"fdt_addr_r=0x11000000\0" \
+	"ramdisk_addr_r=0x12A00000\0" \
+	"fdt_high=0xffffffff\0"   \
+	"initrd_high=0xffffffff\0"
+
+#ifdef CONFIG_CMD_MMC
+#define BOOTCMDS_MMC \
+	"mmc_boot=" \
+		"setenv devtype mmc; " \
+		"if mmc dev ${devnum}; then " \
+			"run scan_boot; " \
+		"fi\0" \
+	"bootcmd_mmc0=setenv devnum 0; run mmc_boot;\0"
+#define BOOT_TARGETS_MMC "mmc0"
+#endif
+
+#define BOOTCMDS_COMMON \
+	"rootpart=2\0" \
+	\
+	"script_boot="                                                    \
+		"if load ${devtype} ${devnum}:${rootpart} "               \
+				"${scriptaddr} ${prefix}${script}; then " \
+			"echo ${script} found! Executing ...;"            \
+			"source ${scriptaddr};"                           \
+		"fi;\0"                                                   \
+	\
+	"scan_boot="                                                      \
+		"echo Scanning ${devtype} ${devnum}...; "                 \
+		"for prefix in ${boot_prefixes}; do "                     \
+			"for script in ${boot_scripts}; do "              \
+				"run script_boot; "                       \
+			"done; "                                          \
+		"done;\0"                                                 \
+	\
+	"boot_targets=" \
+		BOOT_TARGETS_MMC " " \
+		"\0" \
+	\
+	"boot_prefixes=/boot/ \0" \
+	\
+	"boot_scripts=boot.scr\0" \
+	\
+	BOOTCMDS_MMC \
+
+#define CONFIG_BOOTCOMMAND \
+	"for target in ${boot_targets}; do run bootcmd_${target}; done"
+
+#define CONFIG_EXTRA_ENV_SETTINGS \
+        "soc=imx6d\0" \
+        "board="CONFIG_SYS_BOARD"\0" \
+        "boardver="CONFIG_BOARDVER"\0" \
+        MEM_LAYOUT_ENV_SETTINGS \
+        BOOTCMDS_COMMON
+
+#endif         /* __CONFIG_H */