diff mbox series

[v1,2/7] board: toradex: add apalis-imx8x 2gb wb it v1.1a module support

Message ID 20201022082143.21170-3-igor.opaniuk@gmail.com
State Accepted
Commit a51fdba3fa1e18f5b3b294663949723f220576ba
Delegated to: Stefano Babic
Headers show
Series toradex: add support for Apalis iMX8X WB IT V1.1 module | expand

Commit Message

Igor Opaniuk Oct. 22, 2020, 8:21 a.m. UTC
From: Igor Opaniuk <igor.opaniuk@toradex.com>

This commit adds initial support for the Toradex Apalis iMX8X 2GB WB
IT V1.1A System on Module support [1].

Boot log:
U-Boot 2020.10-02940-g894aebb7e8-dirty (Oct 22 2020 - 09:43:57 +0300)
CPU:   NXP i.MX8QXP RevB A35 at 1200 MHz at 30C
DRAM:  2 GiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
Loading Environment from MMC... OK
In:    serial@5a070000
Out:   serial@5a070000
Err:   serial@5a070000
Model: Toradex Apalis iMX8 QuadXPlus 2GB Wi-Fi / BT IT V1.1A,
Serial# 06617018
Net:   eth0: ethernet@5b040000 [PRIME]
Hit any key to stop autoboot:  0

Functionality wise the following is known to be working:
  - eMMC and MMC/SD card
  - Ethernet (*)
  - GPIOs
  - I2C

Unfortunately, there is no USB functionality for the i.MX 8QXP as of
yet.

* With the SCU FW from the latest Toradex BSP 5.0.0 (SCU FW 1.5.1)
ETH PHY encounters bring up problems after reset, this will be fixed
soon on SCU FW side.

[1] https://www.toradex.com/computer-on-modules/apalis-arm-family/nxp-imx-8x
Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>
---

 arch/arm/mach-imx/imx8/Kconfig                |   6 +
 board/toradex/apalis-imx8x/Kconfig            |  30 ++++
 board/toradex/apalis-imx8x/MAINTAINERS        |  10 ++
 board/toradex/apalis-imx8x/Makefile           |   6 +
 .../apalis-imx8x/apalis-imx8x-imximage.cfg    |  24 +++
 board/toradex/apalis-imx8x/apalis-imx8x.c     | 131 +++++++++++++++
 configs/apalis-imx8x_defconfig                |  77 +++++++++
 include/configs/apalis-imx8x.h                | 149 ++++++++++++++++++
 8 files changed, 433 insertions(+)
 create mode 100644 board/toradex/apalis-imx8x/Kconfig
 create mode 100644 board/toradex/apalis-imx8x/MAINTAINERS
 create mode 100644 board/toradex/apalis-imx8x/Makefile
 create mode 100644 board/toradex/apalis-imx8x/apalis-imx8x-imximage.cfg
 create mode 100644 board/toradex/apalis-imx8x/apalis-imx8x.c
 create mode 100644 configs/apalis-imx8x_defconfig
 create mode 100644 include/configs/apalis-imx8x.h

Comments

Oleksandr Suvorov Oct. 29, 2020, 4:52 p.m. UTC | #1
On Thu, Oct 22, 2020 at 11:22 AM Igor Opaniuk <igor.opaniuk@gmail.com> wrote:
>
> From: Igor Opaniuk <igor.opaniuk@toradex.com>
>
> This commit adds initial support for the Toradex Apalis iMX8X 2GB WB
> IT V1.1A System on Module support [1].
>
> Boot log:
> U-Boot 2020.10-02940-g894aebb7e8-dirty (Oct 22 2020 - 09:43:57 +0300)
> CPU:   NXP i.MX8QXP RevB A35 at 1200 MHz at 30C
> DRAM:  2 GiB
> MMC:   FSL_SDHC: 0, FSL_SDHC: 1
> Loading Environment from MMC... OK
> In:    serial@5a070000
> Out:   serial@5a070000
> Err:   serial@5a070000
> Model: Toradex Apalis iMX8 QuadXPlus 2GB Wi-Fi / BT IT V1.1A,
> Serial# 06617018
> Net:   eth0: ethernet@5b040000 [PRIME]
> Hit any key to stop autoboot:  0
>
> Functionality wise the following is known to be working:
>   - eMMC and MMC/SD card
>   - Ethernet (*)
>   - GPIOs
>   - I2C
>
> Unfortunately, there is no USB functionality for the i.MX 8QXP as of
> yet.
>
> * With the SCU FW from the latest Toradex BSP 5.0.0 (SCU FW 1.5.1)
> ETH PHY encounters bring up problems after reset, this will be fixed
> soon on SCU FW side.
>
> [1] https://www.toradex.com/computer-on-modules/apalis-arm-family/nxp-imx-8x
> Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>

Acked-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>

> ---
>
>  arch/arm/mach-imx/imx8/Kconfig                |   6 +
>  board/toradex/apalis-imx8x/Kconfig            |  30 ++++
>  board/toradex/apalis-imx8x/MAINTAINERS        |  10 ++
>  board/toradex/apalis-imx8x/Makefile           |   6 +
>  .../apalis-imx8x/apalis-imx8x-imximage.cfg    |  24 +++
>  board/toradex/apalis-imx8x/apalis-imx8x.c     | 131 +++++++++++++++
>  configs/apalis-imx8x_defconfig                |  77 +++++++++
>  include/configs/apalis-imx8x.h                | 149 ++++++++++++++++++
>  8 files changed, 433 insertions(+)
>  create mode 100644 board/toradex/apalis-imx8x/Kconfig
>  create mode 100644 board/toradex/apalis-imx8x/MAINTAINERS
>  create mode 100644 board/toradex/apalis-imx8x/Makefile
>  create mode 100644 board/toradex/apalis-imx8x/apalis-imx8x-imximage.cfg
>  create mode 100644 board/toradex/apalis-imx8x/apalis-imx8x.c
>  create mode 100644 configs/apalis-imx8x_defconfig
>  create mode 100644 include/configs/apalis-imx8x.h
>
> diff --git a/arch/arm/mach-imx/imx8/Kconfig b/arch/arm/mach-imx/imx8/Kconfig
> index 9d1f73dfc7..04b9729109 100644
> --- a/arch/arm/mach-imx/imx8/Kconfig
> +++ b/arch/arm/mach-imx/imx8/Kconfig
> @@ -65,6 +65,11 @@ config TARGET_COLIBRI_IMX8X
>         select BOARD_LATE_INIT
>         select IMX8QXP
>
> +config TARGET_APALIS_IMX8X
> +       bool "Support Apalis iMX8X module"
> +       select BOARD_LATE_INIT
> +       select IMX8QXP
> +
>  config TARGET_DENEB
>         bool "Support i.MX8QXP Capricorn Deneb board"
>         select BOARD_LATE_INIT
> @@ -98,6 +103,7 @@ source "board/freescale/imx8qxp_mek/Kconfig"
>  source "board/advantech/imx8qm_rom7720_a1/Kconfig"
>  source "board/toradex/apalis-imx8/Kconfig"
>  source "board/toradex/colibri-imx8x/Kconfig"
> +source "board/toradex/apalis-imx8x/Kconfig"
>  source "board/siemens/capricorn/Kconfig"
>
>  config IMX_SNVS_SEC_SC
> diff --git a/board/toradex/apalis-imx8x/Kconfig b/board/toradex/apalis-imx8x/Kconfig
> new file mode 100644
> index 0000000000..ee61e09736
> --- /dev/null
> +++ b/board/toradex/apalis-imx8x/Kconfig
> @@ -0,0 +1,30 @@
> +if TARGET_APALIS_IMX8X
> +
> +config SYS_BOARD
> +       default "apalis-imx8x"
> +
> +config SYS_VENDOR
> +       default "toradex"
> +
> +config SYS_CONFIG_NAME
> +       default "apalis-imx8x"
> +
> +config TDX_CFG_BLOCK
> +       default y
> +
> +config TDX_HAVE_MMC
> +       default y
> +
> +config TDX_CFG_BLOCK_DEV
> +       default "0"
> +
> +config TDX_CFG_BLOCK_PART
> +       default "1"
> +
> +# Toradex config block in eMMC, at the end of 1st "boot sector"
> +config TDX_CFG_BLOCK_OFFSET
> +       default "-512"
> +
> +source "board/toradex/common/Kconfig"
> +
> +endif
> diff --git a/board/toradex/apalis-imx8x/MAINTAINERS b/board/toradex/apalis-imx8x/MAINTAINERS
> new file mode 100644
> index 0000000000..fbf9379931
> --- /dev/null
> +++ b/board/toradex/apalis-imx8x/MAINTAINERS
> @@ -0,0 +1,10 @@
> +Apalis iMX8X
> +M:     Igor Opaniuk <igor.opaniuk@toradex.com>
> +W:     http://developer.toradex.com/software/linux/linux-software
> +S:     Maintained
> +F:     arch/arm/dts/fsl-imx8x-apalis.dts
> +F:     arch/arm/dts/fsl-imx8x-apalis-u-boot.dtsi
> +F:     board/toradex/apalis-imx8x/
> +F:     configs/apalis-imx8x_defconfig
> +F:     doc/board/toradex/apalis-imx8x.rst
> +F:     include/configs/apalis-imx8x.h
> diff --git a/board/toradex/apalis-imx8x/Makefile b/board/toradex/apalis-imx8x/Makefile
> new file mode 100644
> index 0000000000..9d6e85b742
> --- /dev/null
> +++ b/board/toradex/apalis-imx8x/Makefile
> @@ -0,0 +1,6 @@
> +# SPDX-License-Identifier: GPL-2.0+
> +#
> +# Copyright 2020 Toradex
> +#
> +
> +obj-y += apalis-imx8x.o
> diff --git a/board/toradex/apalis-imx8x/apalis-imx8x-imximage.cfg b/board/toradex/apalis-imx8x/apalis-imx8x-imximage.cfg
> new file mode 100644
> index 0000000000..58c62d0a65
> --- /dev/null
> +++ b/board/toradex/apalis-imx8x/apalis-imx8x-imximage.cfg
> @@ -0,0 +1,24 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright 2020 Toradex
> + *
> + * Refer doc/imx/mkimage/imx8image.txt for more details about how-to configure
> + * and create imx8image boot image
> + */
> +
> +#define __ASSEMBLY__
> +
> +/* Boot from SD, sector size 0x400 */
> +BOOT_FROM EMMC_FASTBOOT 0x400
> +/* SoC type IMX8QX */
> +SOC_TYPE IMX8QX
> +/* Append seco container image */
> +APPEND mx8qx-ahab-container.img
> +/* Create the 2nd container */
> +CONTAINER
> +/* Add scfw image with exec attribute */
> +IMAGE SCU mx8qx-apalis-scfw-tcm.bin
> +/* Add ATF image with exec attribute */
> +IMAGE A35 bl31.bin 0x80000000
> +/* Add U-Boot image with load attribute */
> +DATA A35 u-boot-dtb.bin 0x80020000
> diff --git a/board/toradex/apalis-imx8x/apalis-imx8x.c b/board/toradex/apalis-imx8x/apalis-imx8x.c
> new file mode 100644
> index 0000000000..9f00f26cfe
> --- /dev/null
> +++ b/board/toradex/apalis-imx8x/apalis-imx8x.c
> @@ -0,0 +1,131 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright 2020 Toradex
> + */
> +
> +#include <common.h>
> +#include <cpu_func.h>
> +#include <init.h>
> +
> +#include <asm/arch/clock.h>
> +#include <asm/arch/imx8-pins.h>
> +#include <asm/arch/iomux.h>
> +#include <asm/arch/sci/sci.h>
> +#include <asm/arch/sys_proto.h>
> +#include <asm/gpio.h>
> +#include <asm/io.h>
> +#include <env.h>
> +#include <errno.h>
> +#include <linux/libfdt.h>
> +
> +#include "../common/tdx-cfg-block.h"
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +#define UART_PAD_CTRL  ((SC_PAD_CONFIG_OUT_IN << PADRING_CONFIG_SHIFT) | \
> +                        (SC_PAD_ISO_OFF << PADRING_LPCONFIG_SHIFT) | \
> +                        (SC_PAD_28FDSOI_DSE_DV_HIGH << PADRING_DSE_SHIFT) | \
> +                        (SC_PAD_28FDSOI_PS_PU << PADRING_PULL_SHIFT))
> +
> +static iomux_cfg_t uart1_pads[] = {
> +       SC_P_UART1_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
> +       SC_P_UART1_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
> +};
> +
> +static void setup_iomux_uart(void)
> +{
> +       imx8_iomux_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads));
> +}
> +
> +int board_early_init_f(void)
> +{
> +       sc_pm_clock_rate_t rate;
> +       sc_err_t err = 0;
> +
> +       /*
> +        * This works around that having only UART3 up the baudrate is 1.2M
> +        * instead of 115.2k. Set UART0 clock root to 80 MHz
> +        */
> +       rate = 80000000;
> +       err = sc_pm_set_clock_rate(-1, SC_R_UART_0, SC_PM_CLK_PER, &rate);
> +       if (err != SC_ERR_NONE)
> +               return 0;
> +
> +       /* Set UART3 clock root to 80 MHz and enable it */
> +       rate = SC_80MHZ;
> +       err = sc_pm_setup_uart(SC_R_UART_1, rate);
> +       if (err != SC_ERR_NONE)
> +               return 0;
> +
> +       setup_iomux_uart();
> +
> +       return 0;
> +}
> +
> +#if IS_ENABLED(CONFIG_DM_GPIO)
> +static void board_gpio_init(void)
> +{
> +       /* TODO */
> +}
> +#else
> +static inline void board_gpio_init(void) {}
> +#endif
> +
> +#if IS_ENABLED(CONFIG_FEC_MXC)
> +#include <miiphy.h>
> +
> +int board_phy_config(struct phy_device *phydev)
> +{
> +       if (phydev->drv->config)
> +               phydev->drv->config(phydev);
> +
> +       return 0;
> +}
> +#endif
> +
> +int checkboard(void)
> +{
> +       puts("Model: Toradex Apalis iMX8X\n");
> +
> +       build_info();
> +       print_bootinfo();
> +
> +       return 0;
> +}
> +
> +int board_init(void)
> +{
> +       board_gpio_init();
> +
> +       return 0;
> +}
> +
> +/*
> + * Board specific reset that is system reset.
> + */
> +void reset_cpu(ulong addr)
> +{
> +       /* TODO */
> +}
> +
> +#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
> +int ft_board_setup(void *blob, struct bd_info *bd)
> +{
> +       return ft_common_board_setup(blob, bd);
> +}
> +#endif
> +
> +int board_mmc_get_env_dev(int devno)
> +{
> +       return devno;
> +}
> +
> +int board_late_init(void)
> +{
> +#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
> +/* TODO move to common */
> +       env_set("board_name", "Apalis iMX8X");
> +#endif
> +
> +       return 0;
> +}
> diff --git a/configs/apalis-imx8x_defconfig b/configs/apalis-imx8x_defconfig
> new file mode 100644
> index 0000000000..e6aa575380
> --- /dev/null
> +++ b/configs/apalis-imx8x_defconfig
> @@ -0,0 +1,77 @@
> +CONFIG_ARM=y
> +CONFIG_ARCH_IMX8=y
> +CONFIG_SYS_TEXT_BASE=0x80020000
> +CONFIG_SYS_MALLOC_F_LEN=0x4000
> +CONFIG_NR_DRAM_BANKS=3
> +CONFIG_ENV_SIZE=0x2000
> +CONFIG_ENV_OFFSET=0xFFFFDE00
> +CONFIG_DM_GPIO=y
> +CONFIG_TARGET_APALIS_IMX8X=y
> +CONFIG_DEFAULT_DEVICE_TREE="fsl-imx8qxp-apalis"
> +CONFIG_DISTRO_DEFAULTS=y
> +CONFIG_FIT=y
> +CONFIG_OF_SYSTEM_SETUP=y
> +CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/toradex/apalis-imx8x/apalis-imx8x-imximage.cfg"
> +CONFIG_BOOTDELAY=1
> +CONFIG_LOG=y
> +# CONFIG_DISPLAY_BOARDINFO is not set
> +CONFIG_BOARD_EARLY_INIT_F=y
> +CONFIG_SYS_PROMPT="Apalis iMX8X # "
> +CONFIG_CMD_CPU=y
> +# CONFIG_BOOTM_NETBSD is not set
> +CONFIG_CMD_ASKENV=y
> +CONFIG_CMD_MEMTEST=y
> +CONFIG_SYS_MEMTEST_START=0x88000000
> +CONFIG_SYS_MEMTEST_END=0x89000000
> +CONFIG_CMD_CLK=y
> +CONFIG_CMD_DM=y
> +CONFIG_CMD_GPIO=y
> +CONFIG_CMD_I2C=y
> +CONFIG_CMD_MMC=y
> +CONFIG_CMD_PCI=y
> +CONFIG_CMD_CACHE=y
> +CONFIG_CMD_UUID=y
> +CONFIG_CMD_EXT4_WRITE=y
> +CONFIG_ENV_OVERWRITE=y
> +CONFIG_ENV_IS_IN_MMC=y
> +CONFIG_SYS_RELOC_GD_ENV_ADDR=y
> +CONFIG_SYS_MMC_ENV_PART=1
> +CONFIG_VERSION_VARIABLE=y
> +CONFIG_NET_RANDOM_ETHADDR=y
> +CONFIG_IP_DEFRAG=y
> +CONFIG_TFTP_BLOCKSIZE=4096
> +CONFIG_BOOTCOUNT_LIMIT=y
> +CONFIG_BOOTCOUNT_ENV=y
> +CONFIG_CLK_IMX8=y
> +CONFIG_CPU=y
> +CONFIG_MXC_GPIO=y
> +CONFIG_DM_I2C=y
> +CONFIG_SYS_I2C_IMX_LPI2C=y
> +CONFIG_I2C_MUX=y
> +CONFIG_I2C_MUX_PCA954x=y
> +CONFIG_MISC=y
> +CONFIG_DM_MMC=y
> +CONFIG_FSL_USDHC=y
> +CONFIG_PHYLIB=y
> +CONFIG_PHY_ADDR_ENABLE=y
> +CONFIG_PHY_MICREL=y
> +CONFIG_PHY_MICREL_KSZ90X1=y
> +CONFIG_DM_ETH=y
> +CONFIG_FEC_MXC_SHARE_MDIO=y
> +CONFIG_FEC_MXC_MDIO_BASE=0x5B040000
> +CONFIG_FEC_MXC=y
> +CONFIG_MII=y
> +CONFIG_PCI=y
> +CONFIG_DM_PCI=y
> +CONFIG_PINCTRL=y
> +CONFIG_PINCTRL_IMX8=y
> +CONFIG_POWER_DOMAIN=y
> +CONFIG_IMX8_POWER_DOMAIN=y
> +CONFIG_DM_REGULATOR=y
> +CONFIG_DM_REGULATOR_FIXED=y
> +CONFIG_DM_REGULATOR_GPIO=y
> +CONFIG_DM_SERIAL=y
> +CONFIG_FSL_LPUART=y
> +CONFIG_DM_THERMAL=y
> +CONFIG_IMX_SCU_THERMAL=y
> +# CONFIG_EFI_LOADER is not set
> diff --git a/include/configs/apalis-imx8x.h b/include/configs/apalis-imx8x.h
> new file mode 100644
> index 0000000000..db31c210f5
> --- /dev/null
> +++ b/include/configs/apalis-imx8x.h
> @@ -0,0 +1,149 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright 2020 Toradex
> + */
> +
> +#ifndef __APALIS_IMX8X_H
> +#define __APALIS_IMX8X_H
> +
> +#include <asm/arch/imx-regs.h>
> +#include <linux/sizes.h>
> +#include <linux/stringify.h>
> +
> +#define CONFIG_REMAKE_ELF
> +
> +#define CONFIG_SYS_FSL_ESDHC_ADDR      0
> +#define USDHC1_BASE_ADDR               0x5b010000
> +#define USDHC2_BASE_ADDR               0x5b020000
> +#define CONFIG_SUPPORT_EMMC_BOOT       /* eMMC specific */
> +
> +#define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
> +
> +#define CONFIG_TFTP_TSIZE
> +
> +#define CONFIG_IPADDR                  192.168.10.2
> +#define CONFIG_NETMASK                 255.255.255.0
> +#define CONFIG_SERVERIP                        192.168.10.1
> +
> +#define FEC_ENET_ENABLE_TXC_DELAY
> +#define FEC_ENET_ENABLE_RXC_DELAY
> +
> +#define MEM_LAYOUT_ENV_SETTINGS \
> +       "kernel_addr_r=0x80280000\0" \
> +       "fdt_addr_r=0x83100000\0" \
> +       "ramdisk_addr_r=0x8a000000\0" \
> +       "scriptaddr=0x83200000\0"
> +
> +#ifdef CONFIG_AHAB_BOOT
> +#define AHAB_ENV "sec_boot=yes\0"
> +#else
> +#define AHAB_ENV "sec_boot=no\0"
> +#endif
> +
> +/* Boot M4 */
> +#define M4_BOOT_ENV \
> +       "m4_0_image=m4_0.bin\0" \
> +       "loadm4image_0=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} " \
> +               "${m4_0_image}\0" \
> +       "m4boot_0=run loadm4image_0; dcache flush; bootaux ${loadaddr} 0\0" \
> +
> +#define MFG_NAND_PARTITION ""
> +
> +#define BOOT_TARGET_DEVICES(func) \
> +       func(MMC, mmc, 1) \
> +       func(MMC, mmc, 0) \
> +       func(DHCP, dhcp, na)
> +#include <config_distro_bootcmd.h>
> +#undef BOOTENV_RUN_NET_USB_START
> +#define BOOTENV_RUN_NET_USB_START ""
> +
> +#define CONFIG_MFG_ENV_SETTINGS \
> +       "mfgtool_args=setenv bootargs ${consoleargs} " \
> +               "rdinit=/linuxrc g_mass_storage.stall=0 " \
> +               "g_mass_storage.removable=1 g_mass_storage.idVendor=0x066F " \
> +               "g_mass_storage.idProduct=0x37FF " \
> +               "g_mass_storage.iSerialNumber=\"\" " MFG_NAND_PARTITION \
> +               "${vidargs} clk_ignore_unused\0" \
> +       "initrd_addr=0x83800000\0" \
> +       "bootcmd_mfg=run mfgtool_args;booti ${loadaddr} ${initrd_addr} " \
> +               "${fdt_addr};\0" \
> +
> +/* Initial environment variables */
> +#define CONFIG_EXTRA_ENV_SETTINGS \
> +       AHAB_ENV \
> +       BOOTENV \
> +       CONFIG_MFG_ENV_SETTINGS \
> +       M4_BOOT_ENV \
> +       MEM_LAYOUT_ENV_SETTINGS \
> +       "boot_file=Image\0" \
> +       "consoleargs=console=ttyLP3,${baudrate} earlycon\0" \
> +       "fdt_file=imx8qxp-apalis-eval.dtb\0" \
> +       "fdtfile=imx8qxp-apalis-eval.dtb\0" \
> +       "finduuid=part uuid mmc ${mmcdev}:2 uuid\0" \
> +       "image=Image\0" \
> +       "initrd_addr=0x83800000\0" \
> +       "mmcargs=setenv bootargs ${consoleargs} " \
> +               "root=PARTUUID=${uuid} rootwait " \
> +       "mmcdev=" __stringify(CONFIG_SYS_MMC_ENV_DEV) "\0" \
> +       "mmcpart=" __stringify(CONFIG_SYS_MMC_IMG_LOAD_PART) "\0" \
> +       "netargs=setenv bootargs ${consoleargs} " \
> +               "root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp " \
> +               "${vidargs}\0" \
> +       "nfsboot=run netargs; dhcp ${loadaddr} ${image}; tftp ${fdt_addr} " \
> +               "apalis-imx8x/${fdt_file}; booti ${loadaddr} - " \
> +               "${fdt_addr}\0" \
> +       "panel=NULL\0" \
> +       "script=boot.scr\0" \
> +       "update_uboot=askenv confirm Did you load u-boot-dtb.imx (y/N)?; " \
> +               "if test \"$confirm\" = \"y\"; then " \
> +               "setexpr blkcnt ${filesize} + 0x1ff && setexpr blkcnt " \
> +               "${blkcnt} / 0x200; mmc dev 0 1; mmc write ${loadaddr} 0x0 " \
> +               "${blkcnt}; fi\0" \
> +       "vidargs=video=imxdpufb5:off video=imxdpufb6:off video=imxdpufb7:off\0"
> +
> +/* Link Definitions */
> +#define CONFIG_LOADADDR                        0x89000000
> +
> +#define CONFIG_SYS_LOAD_ADDR           CONFIG_LOADADDR
> +
> +#define CONFIG_SYS_INIT_SP_ADDR                0x80200000
> +
> +/* Environment in eMMC, before config block at the end of 1st "boot sector" */
> +
> +#define CONFIG_SYS_MMC_IMG_LOAD_PART   1
> +
> +/* On Apalis iMX8X USDHC1 is eMMC, USDHC2 is 4-bit SD */
> +#define CONFIG_SYS_FSL_USDHC_NUM       2
> +
> +#define CONFIG_SYS_BOOTM_LEN           SZ_64M /* Increase max gunzip size */
> +
> +/* Size of malloc() pool */
> +#define CONFIG_SYS_MALLOC_LEN          ((CONFIG_ENV_SIZE + (32 * 1024)) * 1024)
> +
> +#define CONFIG_SYS_SDRAM_BASE          0x80000000
> +#define PHYS_SDRAM_1                   0x80000000
> +#define PHYS_SDRAM_2                   0x880000000
> +#define PHYS_SDRAM_1_SIZE              SZ_2G           /* 2 GB */
> +#define PHYS_SDRAM_2_SIZE              0x00000000      /* 0 GB */
> +
> +/* Monitor Command Prompt */
> +#define CONFIG_SYS_PROMPT_HUSH_PS2     "> "
> +#define CONFIG_SYS_CBSIZE              SZ_2K
> +#define CONFIG_SYS_MAXARGS             64
> +#define CONFIG_SYS_BARGSIZE            CONFIG_SYS_CBSIZE
> +#define CONFIG_SYS_PBSIZE              (CONFIG_SYS_CBSIZE + \
> +                                       sizeof(CONFIG_SYS_PROMPT) + 16)
> +
> +/* Generic Timer Definitions */
> +#define COUNTER_FREQUENCY              8000000 /* 8MHz */
> +
> +/* Networking */
> +#define CONFIG_FEC_ENET_DEV 0
> +#define IMX_FEC_BASE                   0x5b040000
> +#define CONFIG_FEC_MXC_PHYADDR          0x4
> +#define CONFIG_ETHPRIME                 "eth0"
> +#define CONFIG_FEC_XCV_TYPE            RGMII
> +#define FEC_QUIRK_ENET_MAC
> +#define PHY_ANEG_TIMEOUT 20000
> +
> +#endif /* __APALIS_IMX8X_H */
> --
> 2.17.1
>
Oliver Graute Nov. 19, 2020, 2:27 p.m. UTC | #2
On 22/10/20, Igor Opaniuk wrote:
> From: Igor Opaniuk <igor.opaniuk@toradex.com>
> 
> * With the SCU FW from the latest Toradex BSP 5.0.0 (SCU FW 1.5.1)
> ETH PHY encounters bring up problems after reset, this will be fixed
> soon on SCU FW side.

Hello Igor,

are these ETH Phy problems also in NXP provided SCU FW 1.5.1/ 1.6.0?

Because I observe some phy clk issue after upgrading from SCU FW 1.2.6
to 1.5.1/1.6.0. (iMX8QM)

Best regards,

Oliver
Stefano Babic Dec. 8, 2020, 7:58 a.m. UTC | #3
> From: Igor Opaniuk <igor.opaniuk@toradex.com>
> This commit adds initial support for the Toradex Apalis iMX8X 2GB WB
> IT V1.1A System on Module support [1].
> Boot log:
> U-Boot 2020.10-02940-g894aebb7e8-dirty (Oct 22 2020 - 09:43:57 +0300)
> CPU:   NXP i.MX8QXP RevB A35 at 1200 MHz at 30C
> DRAM:  2 GiB
> MMC:   FSL_SDHC: 0, FSL_SDHC: 1
> Loading Environment from MMC... OK
> In:    serial@5a070000
> Out:   serial@5a070000
> Err:   serial@5a070000
> Model: Toradex Apalis iMX8 QuadXPlus 2GB Wi-Fi / BT IT V1.1A,
> Serial# 06617018
> Net:   eth0: ethernet@5b040000 [PRIME]
> Hit any key to stop autoboot:  0
> Functionality wise the following is known to be working:
>   - eMMC and MMC/SD card
>   - Ethernet (*)
>   - GPIOs
>   - I2C
> Unfortunately, there is no USB functionality for the i.MX 8QXP as of
> yet.
> * With the SCU FW from the latest Toradex BSP 5.0.0 (SCU FW 1.5.1)
> ETH PHY encounters bring up problems after reset, this will be fixed
> soon on SCU FW side.
> [1] https://www.toradex.com/computer-on-modules/apalis-arm-family/nxp-imx-8x
> Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>
> Acked-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
Applied to u-boot-imx, master, thanks !

Best regards,
Stefano Babic
diff mbox series

Patch

diff --git a/arch/arm/mach-imx/imx8/Kconfig b/arch/arm/mach-imx/imx8/Kconfig
index 9d1f73dfc7..04b9729109 100644
--- a/arch/arm/mach-imx/imx8/Kconfig
+++ b/arch/arm/mach-imx/imx8/Kconfig
@@ -65,6 +65,11 @@  config TARGET_COLIBRI_IMX8X
 	select BOARD_LATE_INIT
 	select IMX8QXP
 
+config TARGET_APALIS_IMX8X
+	bool "Support Apalis iMX8X module"
+	select BOARD_LATE_INIT
+	select IMX8QXP
+
 config TARGET_DENEB
 	bool "Support i.MX8QXP Capricorn Deneb board"
 	select BOARD_LATE_INIT
@@ -98,6 +103,7 @@  source "board/freescale/imx8qxp_mek/Kconfig"
 source "board/advantech/imx8qm_rom7720_a1/Kconfig"
 source "board/toradex/apalis-imx8/Kconfig"
 source "board/toradex/colibri-imx8x/Kconfig"
+source "board/toradex/apalis-imx8x/Kconfig"
 source "board/siemens/capricorn/Kconfig"
 
 config IMX_SNVS_SEC_SC
diff --git a/board/toradex/apalis-imx8x/Kconfig b/board/toradex/apalis-imx8x/Kconfig
new file mode 100644
index 0000000000..ee61e09736
--- /dev/null
+++ b/board/toradex/apalis-imx8x/Kconfig
@@ -0,0 +1,30 @@ 
+if TARGET_APALIS_IMX8X
+
+config SYS_BOARD
+	default "apalis-imx8x"
+
+config SYS_VENDOR
+	default "toradex"
+
+config SYS_CONFIG_NAME
+	default "apalis-imx8x"
+
+config TDX_CFG_BLOCK
+	default y
+
+config TDX_HAVE_MMC
+	default y
+
+config TDX_CFG_BLOCK_DEV
+	default "0"
+
+config TDX_CFG_BLOCK_PART
+	default "1"
+
+# Toradex config block in eMMC, at the end of 1st "boot sector"
+config TDX_CFG_BLOCK_OFFSET
+	default "-512"
+
+source "board/toradex/common/Kconfig"
+
+endif
diff --git a/board/toradex/apalis-imx8x/MAINTAINERS b/board/toradex/apalis-imx8x/MAINTAINERS
new file mode 100644
index 0000000000..fbf9379931
--- /dev/null
+++ b/board/toradex/apalis-imx8x/MAINTAINERS
@@ -0,0 +1,10 @@ 
+Apalis iMX8X
+M:	Igor Opaniuk <igor.opaniuk@toradex.com>
+W:	http://developer.toradex.com/software/linux/linux-software
+S:	Maintained
+F:	arch/arm/dts/fsl-imx8x-apalis.dts
+F:	arch/arm/dts/fsl-imx8x-apalis-u-boot.dtsi
+F:	board/toradex/apalis-imx8x/
+F:	configs/apalis-imx8x_defconfig
+F:	doc/board/toradex/apalis-imx8x.rst
+F:	include/configs/apalis-imx8x.h
diff --git a/board/toradex/apalis-imx8x/Makefile b/board/toradex/apalis-imx8x/Makefile
new file mode 100644
index 0000000000..9d6e85b742
--- /dev/null
+++ b/board/toradex/apalis-imx8x/Makefile
@@ -0,0 +1,6 @@ 
+# SPDX-License-Identifier: GPL-2.0+
+#
+# Copyright 2020 Toradex
+#
+
+obj-y += apalis-imx8x.o
diff --git a/board/toradex/apalis-imx8x/apalis-imx8x-imximage.cfg b/board/toradex/apalis-imx8x/apalis-imx8x-imximage.cfg
new file mode 100644
index 0000000000..58c62d0a65
--- /dev/null
+++ b/board/toradex/apalis-imx8x/apalis-imx8x-imximage.cfg
@@ -0,0 +1,24 @@ 
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright 2020 Toradex
+ *
+ * Refer doc/imx/mkimage/imx8image.txt for more details about how-to configure
+ * and create imx8image boot image
+ */
+
+#define __ASSEMBLY__
+
+/* Boot from SD, sector size 0x400 */
+BOOT_FROM EMMC_FASTBOOT 0x400
+/* SoC type IMX8QX */
+SOC_TYPE IMX8QX
+/* Append seco container image */
+APPEND mx8qx-ahab-container.img
+/* Create the 2nd container */
+CONTAINER
+/* Add scfw image with exec attribute */
+IMAGE SCU mx8qx-apalis-scfw-tcm.bin
+/* Add ATF image with exec attribute */
+IMAGE A35 bl31.bin 0x80000000
+/* Add U-Boot image with load attribute */
+DATA A35 u-boot-dtb.bin 0x80020000
diff --git a/board/toradex/apalis-imx8x/apalis-imx8x.c b/board/toradex/apalis-imx8x/apalis-imx8x.c
new file mode 100644
index 0000000000..9f00f26cfe
--- /dev/null
+++ b/board/toradex/apalis-imx8x/apalis-imx8x.c
@@ -0,0 +1,131 @@ 
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2020 Toradex
+ */
+
+#include <common.h>
+#include <cpu_func.h>
+#include <init.h>
+
+#include <asm/arch/clock.h>
+#include <asm/arch/imx8-pins.h>
+#include <asm/arch/iomux.h>
+#include <asm/arch/sci/sci.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/gpio.h>
+#include <asm/io.h>
+#include <env.h>
+#include <errno.h>
+#include <linux/libfdt.h>
+
+#include "../common/tdx-cfg-block.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define UART_PAD_CTRL	((SC_PAD_CONFIG_OUT_IN << PADRING_CONFIG_SHIFT) | \
+			 (SC_PAD_ISO_OFF << PADRING_LPCONFIG_SHIFT) | \
+			 (SC_PAD_28FDSOI_DSE_DV_HIGH << PADRING_DSE_SHIFT) | \
+			 (SC_PAD_28FDSOI_PS_PU << PADRING_PULL_SHIFT))
+
+static iomux_cfg_t uart1_pads[] = {
+	SC_P_UART1_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
+	SC_P_UART1_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
+};
+
+static void setup_iomux_uart(void)
+{
+	imx8_iomux_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads));
+}
+
+int board_early_init_f(void)
+{
+	sc_pm_clock_rate_t rate;
+	sc_err_t err = 0;
+
+	/*
+	 * This works around that having only UART3 up the baudrate is 1.2M
+	 * instead of 115.2k. Set UART0 clock root to 80 MHz
+	 */
+	rate = 80000000;
+	err = sc_pm_set_clock_rate(-1, SC_R_UART_0, SC_PM_CLK_PER, &rate);
+	if (err != SC_ERR_NONE)
+		return 0;
+
+	/* Set UART3 clock root to 80 MHz and enable it */
+	rate = SC_80MHZ;
+	err = sc_pm_setup_uart(SC_R_UART_1, rate);
+	if (err != SC_ERR_NONE)
+		return 0;
+
+	setup_iomux_uart();
+
+	return 0;
+}
+
+#if IS_ENABLED(CONFIG_DM_GPIO)
+static void board_gpio_init(void)
+{
+	/* TODO */
+}
+#else
+static inline void board_gpio_init(void) {}
+#endif
+
+#if IS_ENABLED(CONFIG_FEC_MXC)
+#include <miiphy.h>
+
+int board_phy_config(struct phy_device *phydev)
+{
+	if (phydev->drv->config)
+		phydev->drv->config(phydev);
+
+	return 0;
+}
+#endif
+
+int checkboard(void)
+{
+	puts("Model: Toradex Apalis iMX8X\n");
+
+	build_info();
+	print_bootinfo();
+
+	return 0;
+}
+
+int board_init(void)
+{
+	board_gpio_init();
+
+	return 0;
+}
+
+/*
+ * Board specific reset that is system reset.
+ */
+void reset_cpu(ulong addr)
+{
+	/* TODO */
+}
+
+#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
+int ft_board_setup(void *blob, struct bd_info *bd)
+{
+	return ft_common_board_setup(blob, bd);
+}
+#endif
+
+int board_mmc_get_env_dev(int devno)
+{
+	return devno;
+}
+
+int board_late_init(void)
+{
+#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
+/* TODO move to common */
+	env_set("board_name", "Apalis iMX8X");
+#endif
+
+	return 0;
+}
diff --git a/configs/apalis-imx8x_defconfig b/configs/apalis-imx8x_defconfig
new file mode 100644
index 0000000000..e6aa575380
--- /dev/null
+++ b/configs/apalis-imx8x_defconfig
@@ -0,0 +1,77 @@ 
+CONFIG_ARM=y
+CONFIG_ARCH_IMX8=y
+CONFIG_SYS_TEXT_BASE=0x80020000
+CONFIG_SYS_MALLOC_F_LEN=0x4000
+CONFIG_NR_DRAM_BANKS=3
+CONFIG_ENV_SIZE=0x2000
+CONFIG_ENV_OFFSET=0xFFFFDE00
+CONFIG_DM_GPIO=y
+CONFIG_TARGET_APALIS_IMX8X=y
+CONFIG_DEFAULT_DEVICE_TREE="fsl-imx8qxp-apalis"
+CONFIG_DISTRO_DEFAULTS=y
+CONFIG_FIT=y
+CONFIG_OF_SYSTEM_SETUP=y
+CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/toradex/apalis-imx8x/apalis-imx8x-imximage.cfg"
+CONFIG_BOOTDELAY=1
+CONFIG_LOG=y
+# CONFIG_DISPLAY_BOARDINFO is not set
+CONFIG_BOARD_EARLY_INIT_F=y
+CONFIG_SYS_PROMPT="Apalis iMX8X # "
+CONFIG_CMD_CPU=y
+# CONFIG_BOOTM_NETBSD is not set
+CONFIG_CMD_ASKENV=y
+CONFIG_CMD_MEMTEST=y
+CONFIG_SYS_MEMTEST_START=0x88000000
+CONFIG_SYS_MEMTEST_END=0x89000000
+CONFIG_CMD_CLK=y
+CONFIG_CMD_DM=y
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_PCI=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_UUID=y
+CONFIG_CMD_EXT4_WRITE=y
+CONFIG_ENV_OVERWRITE=y
+CONFIG_ENV_IS_IN_MMC=y
+CONFIG_SYS_RELOC_GD_ENV_ADDR=y
+CONFIG_SYS_MMC_ENV_PART=1
+CONFIG_VERSION_VARIABLE=y
+CONFIG_NET_RANDOM_ETHADDR=y
+CONFIG_IP_DEFRAG=y
+CONFIG_TFTP_BLOCKSIZE=4096
+CONFIG_BOOTCOUNT_LIMIT=y
+CONFIG_BOOTCOUNT_ENV=y
+CONFIG_CLK_IMX8=y
+CONFIG_CPU=y
+CONFIG_MXC_GPIO=y
+CONFIG_DM_I2C=y
+CONFIG_SYS_I2C_IMX_LPI2C=y
+CONFIG_I2C_MUX=y
+CONFIG_I2C_MUX_PCA954x=y
+CONFIG_MISC=y
+CONFIG_DM_MMC=y
+CONFIG_FSL_USDHC=y
+CONFIG_PHYLIB=y
+CONFIG_PHY_ADDR_ENABLE=y
+CONFIG_PHY_MICREL=y
+CONFIG_PHY_MICREL_KSZ90X1=y
+CONFIG_DM_ETH=y
+CONFIG_FEC_MXC_SHARE_MDIO=y
+CONFIG_FEC_MXC_MDIO_BASE=0x5B040000
+CONFIG_FEC_MXC=y
+CONFIG_MII=y
+CONFIG_PCI=y
+CONFIG_DM_PCI=y
+CONFIG_PINCTRL=y
+CONFIG_PINCTRL_IMX8=y
+CONFIG_POWER_DOMAIN=y
+CONFIG_IMX8_POWER_DOMAIN=y
+CONFIG_DM_REGULATOR=y
+CONFIG_DM_REGULATOR_FIXED=y
+CONFIG_DM_REGULATOR_GPIO=y
+CONFIG_DM_SERIAL=y
+CONFIG_FSL_LPUART=y
+CONFIG_DM_THERMAL=y
+CONFIG_IMX_SCU_THERMAL=y
+# CONFIG_EFI_LOADER is not set
diff --git a/include/configs/apalis-imx8x.h b/include/configs/apalis-imx8x.h
new file mode 100644
index 0000000000..db31c210f5
--- /dev/null
+++ b/include/configs/apalis-imx8x.h
@@ -0,0 +1,149 @@ 
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright 2020 Toradex
+ */
+
+#ifndef __APALIS_IMX8X_H
+#define __APALIS_IMX8X_H
+
+#include <asm/arch/imx-regs.h>
+#include <linux/sizes.h>
+#include <linux/stringify.h>
+
+#define CONFIG_REMAKE_ELF
+
+#define CONFIG_SYS_FSL_ESDHC_ADDR	0
+#define USDHC1_BASE_ADDR		0x5b010000
+#define USDHC2_BASE_ADDR		0x5b020000
+#define CONFIG_SUPPORT_EMMC_BOOT	/* eMMC specific */
+
+#define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
+
+#define CONFIG_TFTP_TSIZE
+
+#define CONFIG_IPADDR			192.168.10.2
+#define CONFIG_NETMASK			255.255.255.0
+#define CONFIG_SERVERIP			192.168.10.1
+
+#define FEC_ENET_ENABLE_TXC_DELAY
+#define FEC_ENET_ENABLE_RXC_DELAY
+
+#define MEM_LAYOUT_ENV_SETTINGS \
+	"kernel_addr_r=0x80280000\0" \
+	"fdt_addr_r=0x83100000\0" \
+	"ramdisk_addr_r=0x8a000000\0" \
+	"scriptaddr=0x83200000\0"
+
+#ifdef CONFIG_AHAB_BOOT
+#define AHAB_ENV "sec_boot=yes\0"
+#else
+#define AHAB_ENV "sec_boot=no\0"
+#endif
+
+/* Boot M4 */
+#define M4_BOOT_ENV \
+	"m4_0_image=m4_0.bin\0" \
+	"loadm4image_0=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} " \
+		"${m4_0_image}\0" \
+	"m4boot_0=run loadm4image_0; dcache flush; bootaux ${loadaddr} 0\0" \
+
+#define MFG_NAND_PARTITION ""
+
+#define BOOT_TARGET_DEVICES(func) \
+	func(MMC, mmc, 1) \
+	func(MMC, mmc, 0) \
+	func(DHCP, dhcp, na)
+#include <config_distro_bootcmd.h>
+#undef BOOTENV_RUN_NET_USB_START
+#define BOOTENV_RUN_NET_USB_START ""
+
+#define CONFIG_MFG_ENV_SETTINGS \
+	"mfgtool_args=setenv bootargs ${consoleargs} " \
+		"rdinit=/linuxrc g_mass_storage.stall=0 " \
+		"g_mass_storage.removable=1 g_mass_storage.idVendor=0x066F " \
+		"g_mass_storage.idProduct=0x37FF " \
+		"g_mass_storage.iSerialNumber=\"\" " MFG_NAND_PARTITION \
+		"${vidargs} clk_ignore_unused\0" \
+	"initrd_addr=0x83800000\0" \
+	"bootcmd_mfg=run mfgtool_args;booti ${loadaddr} ${initrd_addr} " \
+		"${fdt_addr};\0" \
+
+/* Initial environment variables */
+#define CONFIG_EXTRA_ENV_SETTINGS \
+	AHAB_ENV \
+	BOOTENV \
+	CONFIG_MFG_ENV_SETTINGS \
+	M4_BOOT_ENV \
+	MEM_LAYOUT_ENV_SETTINGS \
+	"boot_file=Image\0" \
+	"consoleargs=console=ttyLP3,${baudrate} earlycon\0" \
+	"fdt_file=imx8qxp-apalis-eval.dtb\0" \
+	"fdtfile=imx8qxp-apalis-eval.dtb\0" \
+	"finduuid=part uuid mmc ${mmcdev}:2 uuid\0" \
+	"image=Image\0" \
+	"initrd_addr=0x83800000\0" \
+	"mmcargs=setenv bootargs ${consoleargs} " \
+		"root=PARTUUID=${uuid} rootwait " \
+	"mmcdev=" __stringify(CONFIG_SYS_MMC_ENV_DEV) "\0" \
+	"mmcpart=" __stringify(CONFIG_SYS_MMC_IMG_LOAD_PART) "\0" \
+	"netargs=setenv bootargs ${consoleargs} " \
+		"root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp " \
+		"${vidargs}\0" \
+	"nfsboot=run netargs; dhcp ${loadaddr} ${image}; tftp ${fdt_addr} " \
+		"apalis-imx8x/${fdt_file}; booti ${loadaddr} - " \
+		"${fdt_addr}\0" \
+	"panel=NULL\0" \
+	"script=boot.scr\0" \
+	"update_uboot=askenv confirm Did you load u-boot-dtb.imx (y/N)?; " \
+		"if test \"$confirm\" = \"y\"; then " \
+		"setexpr blkcnt ${filesize} + 0x1ff && setexpr blkcnt " \
+		"${blkcnt} / 0x200; mmc dev 0 1; mmc write ${loadaddr} 0x0 " \
+		"${blkcnt}; fi\0" \
+	"vidargs=video=imxdpufb5:off video=imxdpufb6:off video=imxdpufb7:off\0"
+
+/* Link Definitions */
+#define CONFIG_LOADADDR			0x89000000
+
+#define CONFIG_SYS_LOAD_ADDR		CONFIG_LOADADDR
+
+#define CONFIG_SYS_INIT_SP_ADDR		0x80200000
+
+/* Environment in eMMC, before config block at the end of 1st "boot sector" */
+
+#define CONFIG_SYS_MMC_IMG_LOAD_PART	1
+
+/* On Apalis iMX8X USDHC1 is eMMC, USDHC2 is 4-bit SD */
+#define CONFIG_SYS_FSL_USDHC_NUM	2
+
+#define CONFIG_SYS_BOOTM_LEN		SZ_64M /* Increase max gunzip size */
+
+/* Size of malloc() pool */
+#define CONFIG_SYS_MALLOC_LEN		((CONFIG_ENV_SIZE + (32 * 1024)) * 1024)
+
+#define CONFIG_SYS_SDRAM_BASE		0x80000000
+#define PHYS_SDRAM_1			0x80000000
+#define PHYS_SDRAM_2			0x880000000
+#define PHYS_SDRAM_1_SIZE		SZ_2G		/* 2 GB */
+#define PHYS_SDRAM_2_SIZE		0x00000000	/* 0 GB */
+
+/* Monitor Command Prompt */
+#define CONFIG_SYS_PROMPT_HUSH_PS2	"> "
+#define CONFIG_SYS_CBSIZE		SZ_2K
+#define CONFIG_SYS_MAXARGS		64
+#define CONFIG_SYS_BARGSIZE		CONFIG_SYS_CBSIZE
+#define CONFIG_SYS_PBSIZE		(CONFIG_SYS_CBSIZE + \
+					sizeof(CONFIG_SYS_PROMPT) + 16)
+
+/* Generic Timer Definitions */
+#define COUNTER_FREQUENCY		8000000	/* 8MHz */
+
+/* Networking */
+#define CONFIG_FEC_ENET_DEV 0
+#define IMX_FEC_BASE			0x5b040000
+#define CONFIG_FEC_MXC_PHYADDR          0x4
+#define CONFIG_ETHPRIME                 "eth0"
+#define CONFIG_FEC_XCV_TYPE		RGMII
+#define FEC_QUIRK_ENET_MAC
+#define PHY_ANEG_TIMEOUT 20000
+
+#endif /* __APALIS_IMX8X_H */