All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lukasz Majewski <lukma@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH V2 51/51] imx: add i.MX8MN DDR4 board support
Date: Wed, 10 Jul 2019 10:34:24 +0200	[thread overview]
Message-ID: <20190710103424.518237bc@jawa> (raw)
In-Reply-To: <20190708015333.20411-52-peng.fan@nxp.com>

Hi Peng,

> Support pinctrl/clk/sdhc, include ddr4 timing data.
> 
> Log:
> U-Boot SPL 2019.07-rc4-00310-geff364e1d0 (Jul 02 2019 - 09:47:06
> +0800) DDRINFO: start DRAM init
> DDRINFO:ddrphy calibration done
> DDRINFO: ddrmix config done
> Normal Boot
> Trying to boot from BOOTROM
> image offset 0x8000, pagesize 0x200, ivt offset 0x0
> 
> U-Boot 2019.07-rc4-00310-geff364e1d0 (Jul 02 2019 - 09:47:06 +0800)
> 
> CPU:   Freescale i.MX8MNano rev1.0 at 1000 MHz
> Reset cause: POR
> Model: FSL i.MX8MM EVK board
> DRAM:  2 GiB
> MMC:   FSL_SDHC: 1, FSL_SDHC: 2
> In:    serial
> Out:   serial
> Err:   serial
> Net:   No ethernet found.
> Hit any key to stop autoboot:  0
> 
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---
>  arch/arm/dts/Makefile                    |    3 +-
>  arch/arm/dts/imx8mm-evk.dts              |    6 +-
>  arch/arm/dts/imx8mn-ddr4-evk-u-boot.dtsi |   92 +++
>  arch/arm/dts/imx8mn-ddr4-evk.dts         |  221 ++++++
>  arch/arm/mach-imx/imx8m/Kconfig          |    7 +
>  board/freescale/imx8mn_evk/Kconfig       |   14 +
>  board/freescale/imx8mn_evk/MAINTAINERS   |    6 +
>  board/freescale/imx8mn_evk/Makefile      |   12 +
>  board/freescale/imx8mn_evk/ddr4_timing.c | 1213
> ++++++++++++++++++++++++++++++
> board/freescale/imx8mn_evk/imx8mn_evk.c  |   85 +++
> board/freescale/imx8mn_evk/spl.c         |   90 +++
> configs/imx8mn_ddr4_evk_defconfig        |   53 ++
> include/configs/imx8mn_evk.h             |  198 +++++ 13 files
> changed, 1996 insertions(+), 4 deletions(-) create mode 100644
> arch/arm/dts/imx8mn-ddr4-evk-u-boot.dtsi create mode 100644
> arch/arm/dts/imx8mn-ddr4-evk.dts create mode 100644
> board/freescale/imx8mn_evk/Kconfig create mode 100644
> board/freescale/imx8mn_evk/MAINTAINERS create mode 100644
> board/freescale/imx8mn_evk/Makefile create mode 100644
> board/freescale/imx8mn_evk/ddr4_timing.c create mode 100644
> board/freescale/imx8mn_evk/imx8mn_evk.c create mode 100644
> board/freescale/imx8mn_evk/spl.c create mode 100644
> configs/imx8mn_ddr4_evk_defconfig create mode 100644
> include/configs/imx8mn_evk.h
> 
> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
> index 8b7822cd99..e262880b79 100644
> --- a/arch/arm/dts/Makefile
> +++ b/arch/arm/dts/Makefile
> @@ -617,7 +617,8 @@ dtb-$(CONFIG_ARCH_IMX8) += \
>  	fsl-imx8qxp-mek.dtb
>  
>  dtb-$(CONFIG_ARCH_IMX8M) += fsl-imx8mq-evk.dtb \
> -	imx8mm-evk.dtb
> +	imx8mm-evk.dtb \
> +	imx8mn-ddr4-evk.dtb
>  
>  dtb-$(CONFIG_RCAR_GEN2) += \
>  	r8a7790-lager-u-boot.dtb \
> diff --git a/arch/arm/dts/imx8mm-evk.dts b/arch/arm/dts/imx8mm-evk.dts
> index 2d5d89475b..1e8b10a965 100644
> --- a/arch/arm/dts/imx8mm-evk.dts
> +++ b/arch/arm/dts/imx8mm-evk.dts
> @@ -191,7 +191,7 @@
>  			MX8MM_IOMUXC_NAND_CE2_B_USDHC3_DATA5
> 0x1d0 MX8MM_IOMUXC_NAND_CE3_B_USDHC3_DATA6		0x1d0
>  			MX8MM_IOMUXC_NAND_CLE_USDHC3_DATA7
> 0x1d0
> -			MX8MM_IOMUXC_NAND_CE1_B_USDHC3_STROBE
> 		0x190
> +
> MX8MM_IOMUXC_NAND_CE1_B_USDHC3_STROBE		0x190

Those changes looks identical. Why do you need to change those lines?
(Wrong formatting) ?

>  		>;  
>  	};
>  
> @@ -207,7 +207,7 @@
>  			MX8MM_IOMUXC_NAND_CE2_B_USDHC3_DATA5
> 0x1d4 MX8MM_IOMUXC_NAND_CE3_B_USDHC3_DATA6		0x1d4
>  			MX8MM_IOMUXC_NAND_CLE_USDHC3_DATA7
> 0x1d4
> -			MX8MM_IOMUXC_NAND_CE1_B_USDHC3_STROBE
> 		0x194
> +
> MX8MM_IOMUXC_NAND_CE1_B_USDHC3_STROBE		0x194
>  		>;  
>  	};
>  
> @@ -223,7 +223,7 @@
>  			MX8MM_IOMUXC_NAND_CE2_B_USDHC3_DATA5
> 0x1d6 MX8MM_IOMUXC_NAND_CE3_B_USDHC3_DATA6		0x1d6
>  			MX8MM_IOMUXC_NAND_CLE_USDHC3_DATA7
> 0x1d6
> -			MX8MM_IOMUXC_NAND_CE1_B_USDHC3_STROBE
> 		0x196
> +
> MX8MM_IOMUXC_NAND_CE1_B_USDHC3_STROBE		0x196
>  		>;  
>  	};
>  
> diff --git a/arch/arm/dts/imx8mn-ddr4-evk-u-boot.dtsi
> b/arch/arm/dts/imx8mn-ddr4-evk-u-boot.dtsi new file mode 100644
> index 0000000000..8d61597e0c
> --- /dev/null
> +++ b/arch/arm/dts/imx8mn-ddr4-evk-u-boot.dtsi
> @@ -0,0 +1,92 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright 2019 NXP
> + */
> +
> +&{/soc at 0} {
> +	u-boot,dm-pre-reloc;
> +	u-boot,dm-spl;
> +};
> +
> +&clk {
> +	u-boot,dm-spl;
> +	u-boot,dm-pre-reloc;
> +};
> +
> +&osc_24m {
> +	u-boot,dm-spl;
> +	u-boot,dm-pre-reloc;
> +};
> +
> +&aips1 {
> +	u-boot,dm-spl;
> +	u-boot,dm-pre-reloc;
> +};
> +
> +&aips2 {
> +	u-boot,dm-spl;
> +};
> +
> +&aips3 {
> +	u-boot,dm-spl;
> +};
> +
> +&iomuxc {
> +	u-boot,dm-spl;
> +};
> +
> +&pinctrl_reg_usdhc2_vmmc {
> +	u-boot,dm-spl;
> +};
> +
> +&pinctrl_uart2 {
> +	u-boot,dm-spl;
> +};
> +
> +&pinctrl_usdhc2_gpio {
> +	u-boot,dm-spl;
> +};
> +
> +&pinctrl_usdhc2 {
> +	u-boot,dm-spl;
> +};
> +
> +&pinctrl_usdhc3 {
> +	u-boot,dm-spl;
> +};
> +
> +&gpio1 {
> +	u-boot,dm-spl;
> +};
> +
> +&gpio2 {
> +	u-boot,dm-spl;
> +};
> +
> +&gpio3 {
> +	u-boot,dm-spl;
> +};
> +
> +&gpio4 {
> +	u-boot,dm-spl;
> +};
> +
> +&gpio5 {
> +	u-boot,dm-spl;
> +};
> +
> +&uart2 {
> +	u-boot,dm-spl;
> +};
> +
> +&usdhc1 {
> +	u-boot,dm-spl;
> +};
> +
> +&usdhc2 {
> +	u-boot,dm-spl;
> +};
> +
> +&usdhc3 {
> +	u-boot,dm-spl;
> +};

> diff --git a/arch/arm/dts/imx8mn-ddr4-evk.dts
> b/arch/arm/dts/imx8mn-ddr4-evk.dts new file mode 100644
> index 0000000000..9b2c1727a8
> --- /dev/null
> +++ b/arch/arm/dts/imx8mn-ddr4-evk.dts

DTS files shall be added in a separate commit, to avoid one very large
one when you add the board.

> @@ -0,0 +1,221 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Copyright 2019 NXP
> + */
> +
> +/dts-v1/;
> +
> +#include "imx8mn.dtsi"
> +
> +/ {
> +	model = "NXP i.MX8MNano DDR4 EVK board";
> +	compatible = "fsl,imx8mn-ddr4-evk", "fsl,imx8mn";
> +
> +	chosen {
> +		stdout-path = &uart2;
> +	};
> +
> +	reg_usdhc2_vmmc: regulator-usdhc2 {
> +		compatible = "regulator-fixed";
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&pinctrl_reg_usdhc2_vmmc>;
> +		regulator-name = "VSD_3V3";
> +		regulator-min-microvolt = <3300000>;
> +		regulator-max-microvolt = <3300000>;
> +		gpio = <&gpio2 19 GPIO_ACTIVE_HIGH>;
> +		enable-active-high;
> +	};
> +};
> +
> +&iomuxc {
> +	pinctrl-names = "default";
> +
> +	pinctrl_fec1: fec1grp {
> +		fsl,pins = <
> +
> MX8MN_IOMUXC_ENET_MDC_ENET1_MDC		0x3
> +			MX8MN_IOMUXC_ENET_MDIO_ENET1_MDIO	0x3
> +			MX8MN_IOMUXC_ENET_TD3_ENET1_RGMII_TD3
> 0x1f
> +			MX8MN_IOMUXC_ENET_TD2_ENET1_RGMII_TD2
> 0x1f
> +			MX8MN_IOMUXC_ENET_TD1_ENET1_RGMII_TD1
> 0x1f
> +			MX8MN_IOMUXC_ENET_TD0_ENET1_RGMII_TD0
> 0x1f
> +			MX8MN_IOMUXC_ENET_RD3_ENET1_RGMII_RD3
> 0x91
> +			MX8MN_IOMUXC_ENET_RD2_ENET1_RGMII_RD2
> 0x91
> +			MX8MN_IOMUXC_ENET_RD1_ENET1_RGMII_RD1
> 0x91
> +			MX8MN_IOMUXC_ENET_RD0_ENET1_RGMII_RD0
> 0x91
> +			MX8MN_IOMUXC_ENET_TXC_ENET1_RGMII_TXC
> 0x1f
> +			MX8MN_IOMUXC_ENET_RXC_ENET1_RGMII_RXC
> 0x91
> +
> MX8MN_IOMUXC_ENET_RX_CTL_ENET1_RGMII_RX_CTL	0x91
> +
> MX8MN_IOMUXC_ENET_TX_CTL_ENET1_RGMII_TX_CTL	0x1f
> +			MX8MN_IOMUXC_SAI2_RXC_GPIO4_IO22	0x19
> +		>;
> +	};
> +
> +	pinctrl_reg_usdhc2_vmmc: regusdhc2vmmc {
> +		fsl,pins = <
> +			MX8MN_IOMUXC_SD2_RESET_B_GPIO2_IO19
> 0x41
> +		>;
> +	};
> +
> +	pinctrl_uart2: uart2grp {
> +		fsl,pins = <
> +			MX8MN_IOMUXC_UART2_RXD_UART2_DCE_RX
> 0x140
> +			MX8MN_IOMUXC_UART2_TXD_UART2_DCE_TX
> 0x140
> +		>;
> +	};
> +
> +	pinctrl_usdhc2_gpio: usdhc2grpgpio {
> +		fsl,pins = <
> +			MX8MN_IOMUXC_GPIO1_IO15_GPIO1_IO15
> 0x1c4
> +		>;
> +	};
> +
> +	pinctrl_usdhc2: usdhc2grp {
> +		fsl,pins = <
> +
> MX8MN_IOMUXC_SD2_CLK_USDHC2_CLK		0x190
> +
> MX8MN_IOMUXC_SD2_CMD_USDHC2_CMD		0x1d0
> +			MX8MN_IOMUXC_SD2_DATA0_USDHC2_DATA0
> 0x1d0
> +			MX8MN_IOMUXC_SD2_DATA1_USDHC2_DATA1
> 0x1d0
> +			MX8MN_IOMUXC_SD2_DATA2_USDHC2_DATA2
> 0x1d0
> +			MX8MN_IOMUXC_SD2_DATA3_USDHC2_DATA3
> 0x1d0
> +
> MX8MN_IOMUXC_GPIO1_IO04_USDHC2_VSELECT	0x1d0
> +		>;
> +	};
> +
> +	pinctrl_usdhc2_100mhz: usdhc2grp100mhz {
> +		fsl,pins = <
> +
> MX8MN_IOMUXC_SD2_CLK_USDHC2_CLK		0x194
> +
> MX8MN_IOMUXC_SD2_CMD_USDHC2_CMD		0x1d4
> +			MX8MN_IOMUXC_SD2_DATA0_USDHC2_DATA0
> 0x1d4
> +			MX8MN_IOMUXC_SD2_DATA1_USDHC2_DATA1
> 0x1d4
> +			MX8MN_IOMUXC_SD2_DATA2_USDHC2_DATA2
> 0x1d4
> +			MX8MN_IOMUXC_SD2_DATA3_USDHC2_DATA3
> 0x1d4
> +
> MX8MN_IOMUXC_GPIO1_IO04_USDHC2_VSELECT	0x1d0
> +		>;
> +	};
> +
> +	pinctrl_usdhc2_200mhz: usdhc2grp200mhz {
> +		fsl,pins = <
> +
> MX8MN_IOMUXC_SD2_CLK_USDHC2_CLK		0x196
> +
> MX8MN_IOMUXC_SD2_CMD_USDHC2_CMD		0x1d6
> +			MX8MN_IOMUXC_SD2_DATA0_USDHC2_DATA0
> 0x1d6
> +			MX8MN_IOMUXC_SD2_DATA1_USDHC2_DATA1
> 0x1d6
> +			MX8MN_IOMUXC_SD2_DATA2_USDHC2_DATA2
> 0x1d6
> +			MX8MN_IOMUXC_SD2_DATA3_USDHC2_DATA3
> 0x1d6
> +
> MX8MN_IOMUXC_GPIO1_IO04_USDHC2_VSELECT	0x1d0
> +		>;
> +	};
> +
> +	pinctrl_usdhc3: usdhc3grp {
> +		fsl,pins = <
> +
> MX8MN_IOMUXC_NAND_WE_B_USDHC3_CLK		0x40000190
> +
> MX8MN_IOMUXC_NAND_WP_B_USDHC3_CMD		0x1d0
> +
> MX8MN_IOMUXC_NAND_DATA04_USDHC3_DATA0		0x1d0
> +
> MX8MN_IOMUXC_NAND_DATA05_USDHC3_DATA1		0x1d0
> +
> MX8MN_IOMUXC_NAND_DATA06_USDHC3_DATA2		0x1d0
> +
> MX8MN_IOMUXC_NAND_DATA07_USDHC3_DATA3		0x1d0
> +
> MX8MN_IOMUXC_NAND_RE_B_USDHC3_DATA4		0x1d0
> +
> MX8MN_IOMUXC_NAND_CE2_B_USDHC3_DATA5		0x1d0
> +
> MX8MN_IOMUXC_NAND_CE3_B_USDHC3_DATA6		0x1d0
> +
> MX8MN_IOMUXC_NAND_CLE_USDHC3_DATA7		0x1d0
> +
> MX8MN_IOMUXC_NAND_CE1_B_USDHC3_STROBE		0x190
> +		>;
> +	};
> +
> +	pinctrl_usdhc3_100mhz: usdhc3grp100mhz {
> +		fsl,pins = <
> +
> MX8MN_IOMUXC_NAND_WE_B_USDHC3_CLK		0x40000194
> +
> MX8MN_IOMUXC_NAND_WP_B_USDHC3_CMD		0x1d4
> +
> MX8MN_IOMUXC_NAND_DATA04_USDHC3_DATA0		0x1d4
> +
> MX8MN_IOMUXC_NAND_DATA05_USDHC3_DATA1		0x1d4
> +
> MX8MN_IOMUXC_NAND_DATA06_USDHC3_DATA2		0x1d4
> +
> MX8MN_IOMUXC_NAND_DATA07_USDHC3_DATA3		0x1d4
> +
> MX8MN_IOMUXC_NAND_RE_B_USDHC3_DATA4		0x1d4
> +
> MX8MN_IOMUXC_NAND_CE2_B_USDHC3_DATA5		0x1d4
> +
> MX8MN_IOMUXC_NAND_CE3_B_USDHC3_DATA6		0x1d4
> +
> MX8MN_IOMUXC_NAND_CLE_USDHC3_DATA7		0x1d4
> +
> MX8MN_IOMUXC_NAND_CE1_B_USDHC3_STROBE		0x194
> +		>;
> +	};
> +
> +	pinctrl_usdhc3_200mhz: usdhc3grp200mhz {
> +		fsl,pins = <
> +
> MX8MN_IOMUXC_NAND_WE_B_USDHC3_CLK		0x40000196
> +
> MX8MN_IOMUXC_NAND_WP_B_USDHC3_CMD		0x1d6
> +
> MX8MN_IOMUXC_NAND_DATA04_USDHC3_DATA0		0x1d6
> +
> MX8MN_IOMUXC_NAND_DATA05_USDHC3_DATA1		0x1d6
> +
> MX8MN_IOMUXC_NAND_DATA06_USDHC3_DATA2		0x1d6
> +
> MX8MN_IOMUXC_NAND_DATA07_USDHC3_DATA3		0x1d6
> +
> MX8MN_IOMUXC_NAND_RE_B_USDHC3_DATA4		0x1d6
> +
> MX8MN_IOMUXC_NAND_CE2_B_USDHC3_DATA5		0x1d6
> +
> MX8MN_IOMUXC_NAND_CE3_B_USDHC3_DATA6		0x1d6
> +
> MX8MN_IOMUXC_NAND_CLE_USDHC3_DATA7		0x1d6
> +
> MX8MN_IOMUXC_NAND_CE1_B_USDHC3_STROBE		0x196
> +		>;
> +	};
> +
> +	pinctrl_wdog: wdoggrp {
> +		fsl,pins = <
> +
> MX8MN_IOMUXC_GPIO1_IO02_WDOG1_WDOG_B		0xc6
> +		>;
> +	};
> +};
> +
> +&fec1 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&pinctrl_fec1>;
> +	phy-mode = "rgmii-id";
> +	phy-handle = <&ethphy0>;
> +	fsl,magic-packet;
> +	status = "okay";
> +
> +	mdio {
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +
> +		ethphy0: ethernet-phy at 0 {
> +			compatible = "ethernet-phy-ieee802.3-c22";
> +			reg = <0>;
> +			at803x,led-act-blind-workaround;
> +			at803x,eee-disabled;
> +			at803x,vddio-1p8v;
> +		};
> +	};
> +};
> +
> +&snvs_pwrkey {
> +	status = "okay";
> +};
> +
> +&uart2 { /* console */
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&pinctrl_uart2>;
> +	status = "okay";
> +};
> +
> +&usdhc2 {
> +	pinctrl-names = "default", "state_100mhz", "state_200mhz";
> +	pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>;
> +	pinctrl-1 = <&pinctrl_usdhc2_100mhz>, <&pinctrl_usdhc2_gpio>;
> +	pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_gpio>;
> +	cd-gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
> +	bus-width = <4>;
> +	vmmc-supply = <&reg_usdhc2_vmmc>;
> +	status = "okay";
> +};
> +
> +&usdhc3 {
> +	pinctrl-names = "default", "state_100mhz", "state_200mhz";
> +	pinctrl-0 = <&pinctrl_usdhc3>;
> +	pinctrl-1 = <&pinctrl_usdhc3_100mhz>;
> +	pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
> +	bus-width = <8>;
> +	non-removable;
> +	status = "okay";
> +};
> +
> +&wdog1 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&pinctrl_wdog>;
> +	fsl,ext-reset-output;
> +	status = "okay";
> +};
> diff --git a/arch/arm/mach-imx/imx8m/Kconfig
> b/arch/arm/mach-imx/imx8m/Kconfig index b0932f1647..eb4a73b3e2 100644
> --- a/arch/arm/mach-imx/imx8m/Kconfig
> +++ b/arch/arm/mach-imx/imx8m/Kconfig
> @@ -34,9 +34,16 @@ config TARGET_IMX8MM_EVK
>  	select SUPPORT_SPL
>  	select IMX8M_LPDDR4
>  
> +config TARGET_IMX8MN_EVK
> +	bool "imx8mn DDR4 EVK board"
> +	select IMX8MN
> +	select SUPPORT_SPL
> +	select IMX8M_DDR4
> +
>  endchoice
>  
>  source "board/freescale/imx8mq_evk/Kconfig"
>  source "board/freescale/imx8mm_evk/Kconfig"
> +source "board/freescale/imx8mn_evk/Kconfig"
>  
>  endif
> diff --git a/board/freescale/imx8mn_evk/Kconfig
> b/board/freescale/imx8mn_evk/Kconfig new file mode 100644
> index 0000000000..38ac846802
> --- /dev/null
> +++ b/board/freescale/imx8mn_evk/Kconfig
> @@ -0,0 +1,14 @@
> +if TARGET_IMX8MN_EVK
> +
> +config SYS_BOARD
> +	default "imx8mn_evk"
> +
> +config SYS_VENDOR
> +	default "freescale"
> +
> +config SYS_CONFIG_NAME
> +	default "imx8mn_evk"
> +
> +source "board/freescale/common/Kconfig"
> +
> +endif
> diff --git a/board/freescale/imx8mn_evk/MAINTAINERS
> b/board/freescale/imx8mn_evk/MAINTAINERS new file mode 100644
> index 0000000000..3b0653d3c8
> --- /dev/null
> +++ b/board/freescale/imx8mn_evk/MAINTAINERS
> @@ -0,0 +1,6 @@
> +i.MX8MM EVK BOARD
> +M:	Peng Fan <peng.fan@nxp.com>
> +S:	Maintained
> +F:	board/freescale/imx8mn_evk/
> +F:	include/configs/imx8mn_evk.h
> +F:	configs/imx8mn_ddr4_evk_defconfig
> diff --git a/board/freescale/imx8mn_evk/Makefile
> b/board/freescale/imx8mn_evk/Makefile new file mode 100644
> index 0000000000..9511a70c31
> --- /dev/null
> +++ b/board/freescale/imx8mn_evk/Makefile
> @@ -0,0 +1,12 @@
> +#
> +# Copyright 2018 NXP
> +#
> +# SPDX-License-Identifier:      GPL-2.0+
> +#
> +
> +obj-y += imx8mn_evk.o
> +
> +ifdef CONFIG_SPL_BUILD
> +obj-y += spl.o
> +obj-$(CONFIG_IMX8M_DDR4) += ddr4_timing.o
> +endif
> diff --git a/board/freescale/imx8mn_evk/ddr4_timing.c
> b/board/freescale/imx8mn_evk/ddr4_timing.c new file mode 100644
> index 0000000000..d83ea443af
> --- /dev/null
> +++ b/board/freescale/imx8mn_evk/ddr4_timing.c
> @@ -0,0 +1,1213 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright 2019 NXP
> + *
> + * Generated code from MX8M_DDR_tool
> + * Align with uboot-imx_v2018.03_4.14.78_1.0.0_ga
> + */
> +
> +#include <linux/kernel.h>
> +#include <asm/arch/ddr.h>
> +
> +struct dram_cfg_param ddr_ddrc_cfg[] = {
> +	{0x3d400000, 0x81040010},
> +	{0x3d400030, 0x00000020},
> +	{0x3d400034, 0x00221306},
> +	{0x3d400050, 0x00210070},
> +	{0x3d400054, 0x00010008},
> +	{0x3d400060, 0x00000000},
> +	{0x3d400064, 0x0092014a},
> +	{0x3d4000c0, 0x00000000},
> +	{0x3d4000c4, 0x00001000},
> +	{0x3d4000d0, 0xc0030126},
> +	{0x3d4000d4, 0x00770000},
> +	{0x3d4000dc, 0x08340105},
> +	{0x3d4000e0, 0x00180200},
> +	{0x3d4000e4, 0x00110000},
> +	{0x3d4000e8, 0x02000740},
> +	{0x3d4000ec, 0x00000850},
> +	{0x3d4000f4, 0x00000ec7},
> +	{0x3d400100, 0x11122914},
> +	{0x3d400104, 0x0004051c},
> +	{0x3d400108, 0x0608050d},
> +	{0x3d40010c, 0x0000400c},
> +	{0x3d400110, 0x08030409},
> +	{0x3d400114, 0x06060403},
> +	{0x3d40011c, 0x00000606},
> +	{0x3d400120, 0x07070d0c},
> +	{0x3d400124, 0x0002040a},
> +	{0x3d40012c, 0x1809010e},
> +	{0x3d400130, 0x00000008},
> +	{0x3d40013c, 0x00000000},
> +	{0x3d400180, 0x01000040},
> +	{0x3d400184, 0x0000493e},
> +	{0x3d400190, 0x038b8207},
> +	{0x3d400194, 0x02020303},
> +	{0x3d400198, 0x07f04011},
> +	{0x3d40019c, 0x000000b0},
> +	{0x3d4001a0, 0xe0400018},
> +	{0x3d4001a4, 0x0048005a},
> +	{0x3d4001a8, 0x80000000},
> +	{0x3d4001b0, 0x00000001},
> +	{0x3d4001b4, 0x00000b07},
> +	{0x3d4001b8, 0x00000004},
> +	{0x3d4001c0, 0x00000001},
> +	{0x3d4001c4, 0x00000000},
> +	{0x3d400240, 0x06000610},
> +	{0x3d400244, 0x00001323},
> +	{0x3d400200, 0x00003f1f},
> +	{0x3d400204, 0x003f0909},
> +	{0x3d400208, 0x01010100},
> +	{0x3d40020c, 0x01010101},
> +	{0x3d400210, 0x00001f1f},
> +	{0x3d400214, 0x07070707},
> +	{0x3d400218, 0x07070707},
> +	{0x3d40021c, 0x00000f07},
> +	{0x3d400220, 0x00003f01},
> +	{0x3d402050, 0x00210070},
> +	{0x3d402064, 0x00180037},
> +	{0x3d4020dc, 0x00000105},
> +	{0x3d4020e0, 0x00000000},
> +	{0x3d4020e8, 0x02000740},
> +	{0x3d4020ec, 0x00000050},
> +	{0x3d402100, 0x08030604},
> +	{0x3d402104, 0x00020205},
> +	{0x3d402108, 0x05050309},
> +	{0x3d40210c, 0x0000400c},
> +	{0x3d402110, 0x02030202},
> +	{0x3d402114, 0x03030202},
> +	{0x3d402118, 0x0a070008},
> +	{0x3d40211c, 0x00000d09},
> +	{0x3d402120, 0x08084b09},
> +	{0x3d402124, 0x00020308},
> +	{0x3d402128, 0x000f0d06},
> +	{0x3d40212c, 0x12060111},
> +	{0x3d402130, 0x00000008},
> +	{0x3d40213c, 0x00000000},
> +	{0x3d402180, 0x01000040},
> +	{0x3d402190, 0x03848204},
> +	{0x3d402194, 0x02020303},
> +	{0x3d4021b4, 0x00000404},
> +	{0x3d4021b8, 0x00000004},
> +	{0x3d402240, 0x07000600},
> +	{0x3d403050, 0x00210070},
> +	{0x3d403064, 0x0006000d},
> +	{0x3d4030dc, 0x00000105},
> +	{0x3d4030e0, 0x00000000},
> +	{0x3d4030e8, 0x02000740},
> +	{0x3d4030ec, 0x00000050},
> +	{0x3d403100, 0x07010101},
> +	{0x3d403104, 0x00020202},
> +	{0x3d403108, 0x05050309},
> +	{0x3d40310c, 0x0000400c},
> +	{0x3d403110, 0x01030201},
> +	{0x3d403114, 0x03030202},
> +	{0x3d40311c, 0x00000303},
> +	{0x3d403120, 0x02020d02},
> +	{0x3d403124, 0x00020208},
> +	{0x3d403128, 0x000f0d06},
> +	{0x3d40312c, 0x0e02010e},
> +	{0x3d403130, 0x00000008},
> +	{0x3d40313c, 0x00000000},
> +	{0x3d403180, 0x01000040},
> +	{0x3d403190, 0x03848204},
> +	{0x3d403194, 0x02020303},
> +	{0x3d4031b4, 0x00000404},
> +	{0x3d4031b8, 0x00000004},
> +	{0x3d403240, 0x07000600},
> +
> +	/* performance setting */
> +	{ 0x3d400250, 0x00001f05 },
> +	{ 0x3d400254, 0x1f },
> +	{ 0x3d400264, 0x900003ff },
> +	{ 0x3d40026c, 0x200003ff },
> +	{ 0x3d400494, 0x01000e00 },
> +	{ 0x3d400498, 0x03ff0000 },
> +	{ 0x3d40049c, 0x01000e00 },
> +	{ 0x3d4004a0, 0x03ff0000 },
> +};

Isn't there auto training code for i.MX8 as it is for i.MX6Q?

For example: 
https://gitlab.denx.de/u-boot/u-boot/blob/master/arch/arm/mach-imx/mx6/ddr.c
https://gitlab.denx.de/u-boot/u-boot/blob/master/arch/arm/mach-imx/ddrmc-vf610-calibration.c


> +
> +/* PHY Initialize Configuration */
> +struct dram_cfg_param ddr_ddrphy_cfg[] = {
> +	{0x0001005f, 0x000002fd},
> +	{0x0001015f, 0x000002fd},
> +	{0x0001105f, 0x000002fd},
> +	{0x0001115f, 0x000002fd},
> +	{0x0011005f, 0x000002fd},
> +	{0x0011015f, 0x000002fd},
> +	{0x0011105f, 0x000002fd},
> +	{0x0011115f, 0x000002fd},
> +	{0x0021005f, 0x000002fd},
> +	{0x0021015f, 0x000002fd},
> +	{0x0021105f, 0x000002fd},
> +	{0x0021115f, 0x000002fd},
> +	{0x00000055, 0x00000355},
> +	{0x00001055, 0x00000355},
> +	{0x00002055, 0x00000355},
> +	{0x00003055, 0x00000355},
> +	{0x00004055, 0x00000055},
> +	{0x00005055, 0x00000055},
> +	{0x00006055, 0x00000355},
> +	{0x00007055, 0x00000355},
> +	{0x00008055, 0x00000355},
> +	{0x00009055, 0x00000355},
> +	{0x000200c5, 0x0000000a},
> +	{0x001200c5, 0x00000007},
> +	{0x002200c5, 0x00000007},
> +	{0x0002002e, 0x00000002},
> +	{0x0012002e, 0x00000002},
> +	{0x0022002e, 0x00000002},
> +	{0x00020024, 0x00000008},
> +	{0x0002003a, 0x00000002},
> +	{0x0002007d, 0x00000212},
> +	{0x0002007c, 0x00000061},
> +	{0x00120024, 0x00000008},
> +	{0x0002003a, 0x00000002},
> +	{0x0012007d, 0x00000212},
> +	{0x0012007c, 0x00000061},
> +	{0x00220024, 0x00000008},
> +	{0x0002003a, 0x00000002},
> +	{0x0022007d, 0x00000212},
> +	{0x0022007c, 0x00000061},
> +	{0x00020056, 0x00000006},
> +	{0x00120056, 0x0000000a},
> +	{0x00220056, 0x0000000a},
> +	{0x0001004d, 0x0000001a},
> +	{0x0001014d, 0x0000001a},
> +	{0x0001104d, 0x0000001a},
> +	{0x0001114d, 0x0000001a},
> +	{0x0011004d, 0x0000001a},
> +	{0x0011014d, 0x0000001a},
> +	{0x0011104d, 0x0000001a},
> +	{0x0011114d, 0x0000001a},
> +	{0x0021004d, 0x0000001a},
> +	{0x0021014d, 0x0000001a},
> +	{0x0021104d, 0x0000001a},
> +	{0x0021114d, 0x0000001a},
> +	{0x00010049, 0x00000e38},
> +	{0x00010149, 0x00000e38},
> +	{0x00011049, 0x00000e38},
> +	{0x00011149, 0x00000e38},
> +	{0x00110049, 0x00000e38},
> +	{0x00110149, 0x00000e38},
> +	{0x00111049, 0x00000e38},
> +	{0x00111149, 0x00000e38},
> +	{0x00210049, 0x00000e38},
> +	{0x00210149, 0x00000e38},
> +	{0x00211049, 0x00000e38},
> +	{0x00211149, 0x00000e38},
> +	{0x00000043, 0x00000063},
> +	{0x00001043, 0x00000063},
> +	{0x00002043, 0x00000063},
> +	{0x00003043, 0x00000063},
> +	{0x00004043, 0x00000063},
> +	{0x00005043, 0x00000063},
> +	{0x00006043, 0x00000063},
> +	{0x00007043, 0x00000063},
> +	{0x00008043, 0x00000063},
> +	{0x00009043, 0x00000063},
> +	{0x00020018, 0x00000001},
> +	{0x00020075, 0x00000002},
> +	{0x00020050, 0x00000000},
> +	{0x00020008, 0x00000258},
> +	{0x00120008, 0x00000064},
> +	{0x00220008, 0x00000019},
> +	{0x00020088, 0x00000009},
> +	{0x000200b2, 0x00000268},
> +	{0x00010043, 0x000005b1},
> +	{0x00010143, 0x000005b1},
> +	{0x00011043, 0x000005b1},
> +	{0x00011143, 0x000005b1},
> +	{0x001200b2, 0x00000268},
> +	{0x00110043, 0x000005b1},
> +	{0x00110143, 0x000005b1},
> +	{0x00111043, 0x000005b1},
> +	{0x00111143, 0x000005b1},
> +	{0x002200b2, 0x00000268},
> +	{0x00210043, 0x000005b1},
> +	{0x00210143, 0x000005b1},
> +	{0x00211043, 0x000005b1},
> +	{0x00211143, 0x000005b1},
> +	{0x0002005b, 0x00007529},
> +	{0x0002005c, 0x00000000},
> +	{0x000200fa, 0x00000001},
> +	{0x001200fa, 0x00000001},
> +	{0x002200fa, 0x00000001},
> +	{0x00020019, 0x00000005},
> +	{0x00120019, 0x00000005},
> +	{0x00220019, 0x00000005},
> +	{0x000200f0, 0x00005665},
> +	{0x000200f1, 0x00005555},
> +	{0x000200f2, 0x00005555},
> +	{0x000200f3, 0x00005555},
> +	{0x000200f4, 0x00005555},
> +	{0x000200f5, 0x00005555},
> +	{0x000200f6, 0x00005555},
> +	{0x000200f7, 0x0000f000},
> +	{0x0001004a, 0x00000500},
> +	{0x0001104a, 0x00000500},
> +	{0x00020025, 0x00000000},
> +	{0x0002002d, 0x00000000},
> +	{0x0012002d, 0x00000000},
> +	{0x0022002d, 0x00000000},
> +	{0x0002002c, 0x00000000},
> +	{0x000200c7, 0x00000021},
> +	{0x000200ca, 0x00000024},
> +	{0x000200cc, 0x000001f7},
> +	{0x001200c7, 0x00000021},
> +	{0x001200ca, 0x00000024},
> +	{0x001200cc, 0x000001f7},
> +	{0x002200c7, 0x00000021},
> +	{0x002200ca, 0x00000024},
> +	{0x002200cc, 0x000001f7},
> +};
> +
> +/* ddr phy trained csr */
> +struct dram_cfg_param ddr_ddrphy_trained_csr[] = {
> +	{0x0200b2, 0x0},
> +	{0x1200b2, 0x0},
> +	{0x2200b2, 0x0},
> +	{0x0200cb, 0x0},
> +	{0x010043, 0x0},
> +	{0x110043, 0x0},
> +	{0x210043, 0x0},
> +	{0x010143, 0x0},
> +	{0x110143, 0x0},
> +	{0x210143, 0x0},
> +	{0x011043, 0x0},
> +	{0x111043, 0x0},
> +	{0x211043, 0x0},
> +	{0x011143, 0x0},
> +	{0x111143, 0x0},
> +	{0x211143, 0x0},
> +	{0x000080, 0x0},
> +	{0x100080, 0x0},
> +	{0x200080, 0x0},
> +	{0x001080, 0x0},
> +	{0x101080, 0x0},
> +	{0x201080, 0x0},
> +	{0x002080, 0x0},
> +	{0x102080, 0x0},
> +	{0x202080, 0x0},
> +	{0x003080, 0x0},
> +	{0x103080, 0x0},
> +	{0x203080, 0x0},
> +	{0x004080, 0x0},
> +	{0x104080, 0x0},
> +	{0x204080, 0x0},
> +	{0x005080, 0x0},
> +	{0x105080, 0x0},
> +	{0x205080, 0x0},
> +	{0x006080, 0x0},
> +	{0x106080, 0x0},
> +	{0x206080, 0x0},
> +	{0x007080, 0x0},
> +	{0x107080, 0x0},
> +	{0x207080, 0x0},
> +	{0x008080, 0x0},
> +	{0x108080, 0x0},
> +	{0x208080, 0x0},
> +	{0x009080, 0x0},
> +	{0x109080, 0x0},
> +	{0x209080, 0x0},
> +	{0x010080, 0x0},
> +	{0x110080, 0x0},
> +	{0x210080, 0x0},
> +	{0x010180, 0x0},
> +	{0x110180, 0x0},
> +	{0x210180, 0x0},
> +	{0x010081, 0x0},
> +	{0x110081, 0x0},
> +	{0x210081, 0x0},
> +	{0x010181, 0x0},
> +	{0x110181, 0x0},
> +	{0x210181, 0x0},
> +	{0x010082, 0x0},
> +	{0x110082, 0x0},
> +	{0x210082, 0x0},
> +	{0x010182, 0x0},
> +	{0x110182, 0x0},
> +	{0x210182, 0x0},
> +	{0x010083, 0x0},
> +	{0x110083, 0x0},
> +	{0x210083, 0x0},
> +	{0x010183, 0x0},
> +	{0x110183, 0x0},
> +	{0x210183, 0x0},
> +	{0x011080, 0x0},
> +	{0x111080, 0x0},
> +	{0x211080, 0x0},
> +	{0x011180, 0x0},
> +	{0x111180, 0x0},
> +	{0x211180, 0x0},
> +	{0x011081, 0x0},
> +	{0x111081, 0x0},
> +	{0x211081, 0x0},
> +	{0x011181, 0x0},
> +	{0x111181, 0x0},
> +	{0x211181, 0x0},
> +	{0x011082, 0x0},
> +	{0x111082, 0x0},
> +	{0x211082, 0x0},
> +	{0x011182, 0x0},
> +	{0x111182, 0x0},
> +	{0x211182, 0x0},
> +	{0x011083, 0x0},
> +	{0x111083, 0x0},
> +	{0x211083, 0x0},
> +	{0x011183, 0x0},
> +	{0x111183, 0x0},
> +	{0x211183, 0x0},
> +	{0x0100d0, 0x0},
> +	{0x1100d0, 0x0},
> +	{0x2100d0, 0x0},
> +	{0x0101d0, 0x0},
> +	{0x1101d0, 0x0},
> +	{0x2101d0, 0x0},
> +	{0x0100d1, 0x0},
> +	{0x1100d1, 0x0},
> +	{0x2100d1, 0x0},
> +	{0x0101d1, 0x0},
> +	{0x1101d1, 0x0},
> +	{0x2101d1, 0x0},
> +	{0x0100d2, 0x0},
> +	{0x1100d2, 0x0},
> +	{0x2100d2, 0x0},
> +	{0x0101d2, 0x0},
> +	{0x1101d2, 0x0},
> +	{0x2101d2, 0x0},
> +	{0x0100d3, 0x0},
> +	{0x1100d3, 0x0},
> +	{0x2100d3, 0x0},
> +	{0x0101d3, 0x0},
> +	{0x1101d3, 0x0},
> +	{0x2101d3, 0x0},
> +	{0x0110d0, 0x0},
> +	{0x1110d0, 0x0},
> +	{0x2110d0, 0x0},
> +	{0x0111d0, 0x0},
> +	{0x1111d0, 0x0},
> +	{0x2111d0, 0x0},
> +	{0x0110d1, 0x0},
> +	{0x1110d1, 0x0},
> +	{0x2110d1, 0x0},
> +	{0x0111d1, 0x0},
> +	{0x1111d1, 0x0},
> +	{0x2111d1, 0x0},
> +	{0x0110d2, 0x0},
> +	{0x1110d2, 0x0},
> +	{0x2110d2, 0x0},
> +	{0x0111d2, 0x0},
> +	{0x1111d2, 0x0},
> +	{0x2111d2, 0x0},
> +	{0x0110d3, 0x0},
> +	{0x1110d3, 0x0},
> +	{0x2110d3, 0x0},
> +	{0x0111d3, 0x0},
> +	{0x1111d3, 0x0},
> +	{0x2111d3, 0x0},
> +	{0x010068, 0x0},
> +	{0x010168, 0x0},
> +	{0x010268, 0x0},
> +	{0x010368, 0x0},
> +	{0x010468, 0x0},
> +	{0x010568, 0x0},
> +	{0x010668, 0x0},
> +	{0x010768, 0x0},
> +	{0x010868, 0x0},
> +	{0x010069, 0x0},
> +	{0x010169, 0x0},
> +	{0x010269, 0x0},
> +	{0x010369, 0x0},
> +	{0x010469, 0x0},
> +	{0x010569, 0x0},
> +	{0x010669, 0x0},
> +	{0x010769, 0x0},
> +	{0x010869, 0x0},
> +	{0x01006a, 0x0},
> +	{0x01016a, 0x0},
> +	{0x01026a, 0x0},
> +	{0x01036a, 0x0},
> +	{0x01046a, 0x0},
> +	{0x01056a, 0x0},
> +	{0x01066a, 0x0},
> +	{0x01076a, 0x0},
> +	{0x01086a, 0x0},
> +	{0x01006b, 0x0},
> +	{0x01016b, 0x0},
> +	{0x01026b, 0x0},
> +	{0x01036b, 0x0},
> +	{0x01046b, 0x0},
> +	{0x01056b, 0x0},
> +	{0x01066b, 0x0},
> +	{0x01076b, 0x0},
> +	{0x01086b, 0x0},
> +	{0x011068, 0x0},
> +	{0x011168, 0x0},
> +	{0x011268, 0x0},
> +	{0x011368, 0x0},
> +	{0x011468, 0x0},
> +	{0x011568, 0x0},
> +	{0x011668, 0x0},
> +	{0x011768, 0x0},
> +	{0x011868, 0x0},
> +	{0x011069, 0x0},
> +	{0x011169, 0x0},
> +	{0x011269, 0x0},
> +	{0x011369, 0x0},
> +	{0x011469, 0x0},
> +	{0x011569, 0x0},
> +	{0x011669, 0x0},
> +	{0x011769, 0x0},
> +	{0x011869, 0x0},
> +	{0x01106a, 0x0},
> +	{0x01116a, 0x0},
> +	{0x01126a, 0x0},
> +	{0x01136a, 0x0},
> +	{0x01146a, 0x0},
> +	{0x01156a, 0x0},
> +	{0x01166a, 0x0},
> +	{0x01176a, 0x0},
> +	{0x01186a, 0x0},
> +	{0x01106b, 0x0},
> +	{0x01116b, 0x0},
> +	{0x01126b, 0x0},
> +	{0x01136b, 0x0},
> +	{0x01146b, 0x0},
> +	{0x01156b, 0x0},
> +	{0x01166b, 0x0},
> +	{0x01176b, 0x0},
> +	{0x01186b, 0x0},
> +	{0x01008c, 0x0},
> +	{0x11008c, 0x0},
> +	{0x21008c, 0x0},
> +	{0x01018c, 0x0},
> +	{0x11018c, 0x0},
> +	{0x21018c, 0x0},
> +	{0x01008d, 0x0},
> +	{0x11008d, 0x0},
> +	{0x21008d, 0x0},
> +	{0x01018d, 0x0},
> +	{0x11018d, 0x0},
> +	{0x21018d, 0x0},
> +	{0x01008e, 0x0},
> +	{0x11008e, 0x0},
> +	{0x21008e, 0x0},
> +	{0x01018e, 0x0},
> +	{0x11018e, 0x0},
> +	{0x21018e, 0x0},
> +	{0x01008f, 0x0},
> +	{0x11008f, 0x0},
> +	{0x21008f, 0x0},
> +	{0x01018f, 0x0},
> +	{0x11018f, 0x0},
> +	{0x21018f, 0x0},
> +	{0x01108c, 0x0},
> +	{0x11108c, 0x0},
> +	{0x21108c, 0x0},
> +	{0x01118c, 0x0},
> +	{0x11118c, 0x0},
> +	{0x21118c, 0x0},
> +	{0x01108d, 0x0},
> +	{0x11108d, 0x0},
> +	{0x21108d, 0x0},
> +	{0x01118d, 0x0},
> +	{0x11118d, 0x0},
> +	{0x21118d, 0x0},
> +	{0x01108e, 0x0},
> +	{0x11108e, 0x0},
> +	{0x21108e, 0x0},
> +	{0x01118e, 0x0},
> +	{0x11118e, 0x0},
> +	{0x21118e, 0x0},
> +	{0x01108f, 0x0},
> +	{0x11108f, 0x0},
> +	{0x21108f, 0x0},
> +	{0x01118f, 0x0},
> +	{0x11118f, 0x0},
> +	{0x21118f, 0x0},
> +	{0x0100c0, 0x0},
> +	{0x1100c0, 0x0},
> +	{0x2100c0, 0x0},
> +	{0x0101c0, 0x0},
> +	{0x1101c0, 0x0},
> +	{0x2101c0, 0x0},
> +	{0x0102c0, 0x0},
> +	{0x1102c0, 0x0},
> +	{0x2102c0, 0x0},
> +	{0x0103c0, 0x0},
> +	{0x1103c0, 0x0},
> +	{0x2103c0, 0x0},
> +	{0x0104c0, 0x0},
> +	{0x1104c0, 0x0},
> +	{0x2104c0, 0x0},
> +	{0x0105c0, 0x0},
> +	{0x1105c0, 0x0},
> +	{0x2105c0, 0x0},
> +	{0x0106c0, 0x0},
> +	{0x1106c0, 0x0},
> +	{0x2106c0, 0x0},
> +	{0x0107c0, 0x0},
> +	{0x1107c0, 0x0},
> +	{0x2107c0, 0x0},
> +	{0x0108c0, 0x0},
> +	{0x1108c0, 0x0},
> +	{0x2108c0, 0x0},
> +	{0x0100c1, 0x0},
> +	{0x1100c1, 0x0},
> +	{0x2100c1, 0x0},
> +	{0x0101c1, 0x0},
> +	{0x1101c1, 0x0},
> +	{0x2101c1, 0x0},
> +	{0x0102c1, 0x0},
> +	{0x1102c1, 0x0},
> +	{0x2102c1, 0x0},
> +	{0x0103c1, 0x0},
> +	{0x1103c1, 0x0},
> +	{0x2103c1, 0x0},
> +	{0x0104c1, 0x0},
> +	{0x1104c1, 0x0},
> +	{0x2104c1, 0x0},
> +	{0x0105c1, 0x0},
> +	{0x1105c1, 0x0},
> +	{0x2105c1, 0x0},
> +	{0x0106c1, 0x0},
> +	{0x1106c1, 0x0},
> +	{0x2106c1, 0x0},
> +	{0x0107c1, 0x0},
> +	{0x1107c1, 0x0},
> +	{0x2107c1, 0x0},
> +	{0x0108c1, 0x0},
> +	{0x1108c1, 0x0},
> +	{0x2108c1, 0x0},
> +	{0x0100c2, 0x0},
> +	{0x1100c2, 0x0},
> +	{0x2100c2, 0x0},
> +	{0x0101c2, 0x0},
> +	{0x1101c2, 0x0},
> +	{0x2101c2, 0x0},
> +	{0x0102c2, 0x0},
> +	{0x1102c2, 0x0},
> +	{0x2102c2, 0x0},
> +	{0x0103c2, 0x0},
> +	{0x1103c2, 0x0},
> +	{0x2103c2, 0x0},
> +	{0x0104c2, 0x0},
> +	{0x1104c2, 0x0},
> +	{0x2104c2, 0x0},
> +	{0x0105c2, 0x0},
> +	{0x1105c2, 0x0},
> +	{0x2105c2, 0x0},
> +	{0x0106c2, 0x0},
> +	{0x1106c2, 0x0},
> +	{0x2106c2, 0x0},
> +	{0x0107c2, 0x0},
> +	{0x1107c2, 0x0},
> +	{0x2107c2, 0x0},
> +	{0x0108c2, 0x0},
> +	{0x1108c2, 0x0},
> +	{0x2108c2, 0x0},
> +	{0x0100c3, 0x0},
> +	{0x1100c3, 0x0},
> +	{0x2100c3, 0x0},
> +	{0x0101c3, 0x0},
> +	{0x1101c3, 0x0},
> +	{0x2101c3, 0x0},
> +	{0x0102c3, 0x0},
> +	{0x1102c3, 0x0},
> +	{0x2102c3, 0x0},
> +	{0x0103c3, 0x0},
> +	{0x1103c3, 0x0},
> +	{0x2103c3, 0x0},
> +	{0x0104c3, 0x0},
> +	{0x1104c3, 0x0},
> +	{0x2104c3, 0x0},
> +	{0x0105c3, 0x0},
> +	{0x1105c3, 0x0},
> +	{0x2105c3, 0x0},
> +	{0x0106c3, 0x0},
> +	{0x1106c3, 0x0},
> +	{0x2106c3, 0x0},
> +	{0x0107c3, 0x0},
> +	{0x1107c3, 0x0},
> +	{0x2107c3, 0x0},
> +	{0x0108c3, 0x0},
> +	{0x1108c3, 0x0},
> +	{0x2108c3, 0x0},
> +	{0x0110c0, 0x0},
> +	{0x1110c0, 0x0},
> +	{0x2110c0, 0x0},
> +	{0x0111c0, 0x0},
> +	{0x1111c0, 0x0},
> +	{0x2111c0, 0x0},
> +	{0x0112c0, 0x0},
> +	{0x1112c0, 0x0},
> +	{0x2112c0, 0x0},
> +	{0x0113c0, 0x0},
> +	{0x1113c0, 0x0},
> +	{0x2113c0, 0x0},
> +	{0x0114c0, 0x0},
> +	{0x1114c0, 0x0},
> +	{0x2114c0, 0x0},
> +	{0x0115c0, 0x0},
> +	{0x1115c0, 0x0},
> +	{0x2115c0, 0x0},
> +	{0x0116c0, 0x0},
> +	{0x1116c0, 0x0},
> +	{0x2116c0, 0x0},
> +	{0x0117c0, 0x0},
> +	{0x1117c0, 0x0},
> +	{0x2117c0, 0x0},
> +	{0x0118c0, 0x0},
> +	{0x1118c0, 0x0},
> +	{0x2118c0, 0x0},
> +	{0x0110c1, 0x0},
> +	{0x1110c1, 0x0},
> +	{0x2110c1, 0x0},
> +	{0x0111c1, 0x0},
> +	{0x1111c1, 0x0},
> +	{0x2111c1, 0x0},
> +	{0x0112c1, 0x0},
> +	{0x1112c1, 0x0},
> +	{0x2112c1, 0x0},
> +	{0x0113c1, 0x0},
> +	{0x1113c1, 0x0},
> +	{0x2113c1, 0x0},
> +	{0x0114c1, 0x0},
> +	{0x1114c1, 0x0},
> +	{0x2114c1, 0x0},
> +	{0x0115c1, 0x0},
> +	{0x1115c1, 0x0},
> +	{0x2115c1, 0x0},
> +	{0x0116c1, 0x0},
> +	{0x1116c1, 0x0},
> +	{0x2116c1, 0x0},
> +	{0x0117c1, 0x0},
> +	{0x1117c1, 0x0},
> +	{0x2117c1, 0x0},
> +	{0x0118c1, 0x0},
> +	{0x1118c1, 0x0},
> +	{0x2118c1, 0x0},
> +	{0x0110c2, 0x0},
> +	{0x1110c2, 0x0},
> +	{0x2110c2, 0x0},
> +	{0x0111c2, 0x0},
> +	{0x1111c2, 0x0},
> +	{0x2111c2, 0x0},
> +	{0x0112c2, 0x0},
> +	{0x1112c2, 0x0},
> +	{0x2112c2, 0x0},
> +	{0x0113c2, 0x0},
> +	{0x1113c2, 0x0},
> +	{0x2113c2, 0x0},
> +	{0x0114c2, 0x0},
> +	{0x1114c2, 0x0},
> +	{0x2114c2, 0x0},
> +	{0x0115c2, 0x0},
> +	{0x1115c2, 0x0},
> +	{0x2115c2, 0x0},
> +	{0x0116c2, 0x0},
> +	{0x1116c2, 0x0},
> +	{0x2116c2, 0x0},
> +	{0x0117c2, 0x0},
> +	{0x1117c2, 0x0},
> +	{0x2117c2, 0x0},
> +	{0x0118c2, 0x0},
> +	{0x1118c2, 0x0},
> +	{0x2118c2, 0x0},
> +	{0x0110c3, 0x0},
> +	{0x1110c3, 0x0},
> +	{0x2110c3, 0x0},
> +	{0x0111c3, 0x0},
> +	{0x1111c3, 0x0},
> +	{0x2111c3, 0x0},
> +	{0x0112c3, 0x0},
> +	{0x1112c3, 0x0},
> +	{0x2112c3, 0x0},
> +	{0x0113c3, 0x0},
> +	{0x1113c3, 0x0},
> +	{0x2113c3, 0x0},
> +	{0x0114c3, 0x0},
> +	{0x1114c3, 0x0},
> +	{0x2114c3, 0x0},
> +	{0x0115c3, 0x0},
> +	{0x1115c3, 0x0},
> +	{0x2115c3, 0x0},
> +	{0x0116c3, 0x0},
> +	{0x1116c3, 0x0},
> +	{0x2116c3, 0x0},
> +	{0x0117c3, 0x0},
> +	{0x1117c3, 0x0},
> +	{0x2117c3, 0x0},
> +	{0x0118c3, 0x0},
> +	{0x1118c3, 0x0},
> +	{0x2118c3, 0x0},
> +	{0x010020, 0x0},
> +	{0x110020, 0x0},
> +	{0x210020, 0x0},
> +	{0x011020, 0x0},
> +	{0x111020, 0x0},
> +	{0x211020, 0x0},
> +	{0x02007d, 0x0},
> +	{0x12007d, 0x0},
> +	{0x22007d, 0x0},
> +	{0x010040, 0x0},
> +	{0x010140, 0x0},
> +	{0x010240, 0x0},
> +	{0x010340, 0x0},
> +	{0x010440, 0x0},
> +	{0x010540, 0x0},
> +	{0x010640, 0x0},
> +	{0x010740, 0x0},
> +	{0x010840, 0x0},
> +	{0x010030, 0x0},
> +	{0x010130, 0x0},
> +	{0x010230, 0x0},
> +	{0x010330, 0x0},
> +	{0x010430, 0x0},
> +	{0x010530, 0x0},
> +	{0x010630, 0x0},
> +	{0x010730, 0x0},
> +	{0x010830, 0x0},
> +	{0x011040, 0x0},
> +	{0x011140, 0x0},
> +	{0x011240, 0x0},
> +	{0x011340, 0x0},
> +	{0x011440, 0x0},
> +	{0x011540, 0x0},
> +	{0x011640, 0x0},
> +	{0x011740, 0x0},
> +	{0x011840, 0x0},
> +	{0x011030, 0x0},
> +	{0x011130, 0x0},
> +	{0x011230, 0x0},
> +	{0x011330, 0x0},
> +	{0x011430, 0x0},
> +	{0x011530, 0x0},
> +	{0x011630, 0x0},
> +	{0x011730, 0x0},
> +	{0x011830, 0x0},
> +};
> +
> +/* P0 message block paremeter for training firmware */
> +struct dram_cfg_param ddr_fsp0_cfg[] = {
> +	{0x000d0000, 0x00000000},
> +	{0x00020060, 0x00000002},
> +	{0x00054000, 0x00000000},
> +	{0x00054001, 0x00000000},
> +	{0x00054002, 0x00000000},
> +	{0x00054003, 0x00000960},
> +	{0x00054004, 0x00000002},
> +	{0x00054005, 0x00000000},
> +	{0x00054006, 0x0000025e},
> +	{0x00054007, 0x00001000},
> +	{0x00054008, 0x00000101},
> +	{0x00054009, 0x00000000},
> +	{0x0005400a, 0x00000000},
> +	{0x0005400b, 0x0000031f},
> +	{0x0005400c, 0x000000c8},
> +	{0x0005400d, 0x00000100},
> +	{0x0005400e, 0x00000000},
> +	{0x0005400f, 0x00000000},
> +	{0x00054010, 0x00000000},
> +	{0x00054011, 0x00000000},
> +	{0x00054012, 0x00000001},
> +	{0x0005402f, 0x00000834},
> +	{0x00054030, 0x00000105},
> +	{0x00054031, 0x00000018},
> +	{0x00054032, 0x00000200},
> +	{0x00054033, 0x00000200},
> +	{0x00054034, 0x00000740},
> +	{0x00054035, 0x00000850},
> +	{0x00054036, 0x00000103},
> +	{0x00054037, 0x00000000},
> +	{0x00054038, 0x00000000},
> +	{0x00054039, 0x00000000},
> +	{0x0005403a, 0x00000000},
> +	{0x0005403b, 0x00000000},
> +	{0x0005403c, 0x00000000},
> +	{0x0005403d, 0x00000000},
> +	{0x0005403e, 0x00000000},
> +	{0x0005403f, 0x00001221},
> +	{0x000541fc, 0x00000100},
> +	{0x000d0000, 0x00000001},
> +};
> +
> +/* P1 message block paremeter for training firmware */
> +struct dram_cfg_param ddr_fsp1_cfg[] = {
> +	{0x000d0000, 0x00000000},
> +	{0x00054000, 0x00000000},
> +	{0x00054001, 0x00000000},
> +	{0x00054002, 0x00000101},
> +	{0x00054003, 0x00000190},
> +	{0x00054004, 0x00000002},
> +	{0x00054005, 0x00000000},
> +	{0x00054006, 0x0000025e},
> +	{0x00054007, 0x00001000},
> +	{0x00054008, 0x00000101},
> +	{0x00054009, 0x00000000},
> +	{0x0005400a, 0x00000000},
> +	{0x0005400b, 0x0000021f},
> +	{0x0005400c, 0x000000c8},
> +	{0x0005400d, 0x00000100},
> +	{0x0005400e, 0x00000000},
> +	{0x0005400f, 0x00000000},
> +	{0x00054010, 0x00000000},
> +	{0x00054011, 0x00000000},
> +	{0x00054012, 0x00000001},
> +	{0x0005402f, 0x00000000},
> +	{0x00054030, 0x00000105},
> +	{0x00054031, 0x00000000},
> +	{0x00054032, 0x00000000},
> +	{0x00054033, 0x00000200},
> +	{0x00054034, 0x00000740},
> +	{0x00054035, 0x00000050},
> +	{0x00054036, 0x00000103},
> +	{0x00054037, 0x00000000},
> +	{0x00054038, 0x00000000},
> +	{0x00054039, 0x00000000},
> +	{0x0005403a, 0x00000000},
> +	{0x0005403b, 0x00000000},
> +	{0x0005403c, 0x00000000},
> +	{0x0005403d, 0x00000000},
> +	{0x0005403e, 0x00000000},
> +	{0x0005403f, 0x00001221},
> +	{0x000541fc, 0x00000100},
> +	{0x000d0000, 0x00000001},
> +};
> +
> +/* P2 message block paremeter for training firmware */
> +struct dram_cfg_param ddr_fsp2_cfg[] = {
> +	{0x000d0000, 0x00000000},
> +	{0x00054000, 0x00000000},
> +	{0x00054001, 0x00000000},
> +	{0x00054002, 0x00000102},
> +	{0x00054003, 0x00000064},
> +	{0x00054004, 0x00000002},
> +	{0x00054005, 0x00000000},
> +	{0x00054006, 0x0000025e},
> +	{0x00054007, 0x00001000},
> +	{0x00054008, 0x00000101},
> +	{0x00054009, 0x00000000},
> +	{0x0005400a, 0x00000000},
> +	{0x0005400b, 0x0000021f},
> +	{0x0005400c, 0x000000c8},
> +	{0x0005400d, 0x00000100},
> +	{0x0005400e, 0x00000000},
> +	{0x0005400f, 0x00000000},
> +	{0x00054010, 0x00000000},
> +	{0x00054011, 0x00000000},
> +	{0x00054012, 0x00000001},
> +	{0x0005402f, 0x00000000},
> +	{0x00054030, 0x00000105},
> +	{0x00054031, 0x00000000},
> +	{0x00054032, 0x00000000},
> +	{0x00054033, 0x00000200},
> +	{0x00054034, 0x00000740},
> +	{0x00054035, 0x00000050},
> +	{0x00054036, 0x00000103},
> +	{0x00054037, 0x00000000},
> +	{0x00054038, 0x00000000},
> +	{0x00054039, 0x00000000},
> +	{0x0005403a, 0x00000000},
> +	{0x0005403b, 0x00000000},
> +	{0x0005403c, 0x00000000},
> +	{0x0005403d, 0x00000000},
> +	{0x0005403e, 0x00000000},
> +	{0x0005403f, 0x00001221},
> +	{0x000541fc, 0x00000100},
> +	{0x000d0000, 0x00000001},
> +};
> +
> +/* P0 2D message block paremeter for training firmware */
> +struct dram_cfg_param ddr_fsp0_2d_cfg[] = {
> +	{0x000d0000, 0x00000000},
> +	{0x00054000, 0x00000000},
> +	{0x00054001, 0x00000000},
> +	{0x00054002, 0x00000000},
> +	{0x00054003, 0x00000960},
> +	{0x00054004, 0x00000002},
> +	{0x00054005, 0x00000000},
> +	{0x00054006, 0x0000025e},
> +	{0x00054007, 0x00001000},
> +	{0x00054008, 0x00000101},
> +	{0x00054009, 0x00000000},
> +	{0x0005400a, 0x00000000},
> +	{0x0005400b, 0x00000061},
> +	{0x0005400c, 0x000000c8},
> +	{0x0005400d, 0x00000100},
> +	{0x0005400e, 0x00001f7f},
> +	{0x0005400f, 0x00000000},
> +	{0x00054010, 0x00000000},
> +	{0x00054011, 0x00000000},
> +	{0x00054012, 0x00000001},
> +	{0x0005402f, 0x00000834},
> +	{0x00054030, 0x00000105},
> +	{0x00054031, 0x00000018},
> +	{0x00054032, 0x00000200},
> +	{0x00054033, 0x00000200},
> +	{0x00054034, 0x00000740},
> +	{0x00054035, 0x00000850},
> +	{0x00054036, 0x00000103},
> +	{0x00054037, 0x00000000},
> +	{0x00054038, 0x00000000},
> +	{0x00054039, 0x00000000},
> +	{0x0005403a, 0x00000000},
> +	{0x0005403b, 0x00000000},
> +	{0x0005403c, 0x00000000},
> +	{0x0005403d, 0x00000000},
> +	{0x0005403e, 0x00000000},
> +	{0x0005403f, 0x00001221},
> +	{0x000541fc, 0x00000100},
> +	{0x000d0000, 0x00000001},
> +};
> +
> +/* DRAM PHY init engine image */
> +struct dram_cfg_param ddr_phy_pie[] = {
> +	{0xd0000, 0x0},
> +	{0x90000, 0x10},
> +	{0x90001, 0x400},
> +	{0x90002, 0x10e},
> +	{0x90003, 0x0},
> +	{0x90004, 0x0},
> +	{0x90005, 0x8},
> +	{0x90029, 0xb},
> +	{0x9002a, 0x480},
> +	{0x9002b, 0x109},
> +	{0x9002c, 0x8},
> +	{0x9002d, 0x448},
> +	{0x9002e, 0x139},
> +	{0x9002f, 0x8},
> +	{0x90030, 0x478},
> +	{0x90031, 0x109},
> +	{0x90032, 0x2},
> +	{0x90033, 0x10},
> +	{0x90034, 0x139},
> +	{0x90035, 0xb},
> +	{0x90036, 0x7c0},
> +	{0x90037, 0x139},
> +	{0x90038, 0x44},
> +	{0x90039, 0x633},
> +	{0x9003a, 0x159},
> +	{0x9003b, 0x14f},
> +	{0x9003c, 0x630},
> +	{0x9003d, 0x159},
> +	{0x9003e, 0x47},
> +	{0x9003f, 0x633},
> +	{0x90040, 0x149},
> +	{0x90041, 0x4f},
> +	{0x90042, 0x633},
> +	{0x90043, 0x179},
> +	{0x90044, 0x8},
> +	{0x90045, 0xe0},
> +	{0x90046, 0x109},
> +	{0x90047, 0x0},
> +	{0x90048, 0x7c8},
> +	{0x90049, 0x109},
> +	{0x9004a, 0x0},
> +	{0x9004b, 0x1},
> +	{0x9004c, 0x8},
> +	{0x9004d, 0x0},
> +	{0x9004e, 0x45a},
> +	{0x9004f, 0x9},
> +	{0x90050, 0x0},
> +	{0x90051, 0x448},
> +	{0x90052, 0x109},
> +	{0x90053, 0x40},
> +	{0x90054, 0x633},
> +	{0x90055, 0x179},
> +	{0x90056, 0x1},
> +	{0x90057, 0x618},
> +	{0x90058, 0x109},
> +	{0x90059, 0x40c0},
> +	{0x9005a, 0x633},
> +	{0x9005b, 0x149},
> +	{0x9005c, 0x8},
> +	{0x9005d, 0x4},
> +	{0x9005e, 0x48},
> +	{0x9005f, 0x4040},
> +	{0x90060, 0x633},
> +	{0x90061, 0x149},
> +	{0x90062, 0x0},
> +	{0x90063, 0x4},
> +	{0x90064, 0x48},
> +	{0x90065, 0x40},
> +	{0x90066, 0x633},
> +	{0x90067, 0x149},
> +	{0x90068, 0x10},
> +	{0x90069, 0x4},
> +	{0x9006a, 0x18},
> +	{0x9006b, 0x0},
> +	{0x9006c, 0x4},
> +	{0x9006d, 0x78},
> +	{0x9006e, 0x549},
> +	{0x9006f, 0x633},
> +	{0x90070, 0x159},
> +	{0x90071, 0xd49},
> +	{0x90072, 0x633},
> +	{0x90073, 0x159},
> +	{0x90074, 0x94a},
> +	{0x90075, 0x633},
> +	{0x90076, 0x159},
> +	{0x90077, 0x441},
> +	{0x90078, 0x633},
> +	{0x90079, 0x149},
> +	{0x9007a, 0x42},
> +	{0x9007b, 0x633},
> +	{0x9007c, 0x149},
> +	{0x9007d, 0x1},
> +	{0x9007e, 0x633},
> +	{0x9007f, 0x149},
> +	{0x90080, 0x0},
> +	{0x90081, 0xe0},
> +	{0x90082, 0x109},
> +	{0x90083, 0xa},
> +	{0x90084, 0x10},
> +	{0x90085, 0x109},
> +	{0x90086, 0x9},
> +	{0x90087, 0x3c0},
> +	{0x90088, 0x149},
> +	{0x90089, 0x9},
> +	{0x9008a, 0x3c0},
> +	{0x9008b, 0x159},
> +	{0x9008c, 0x18},
> +	{0x9008d, 0x10},
> +	{0x9008e, 0x109},
> +	{0x9008f, 0x0},
> +	{0x90090, 0x3c0},
> +	{0x90091, 0x109},
> +	{0x90092, 0x18},
> +	{0x90093, 0x4},
> +	{0x90094, 0x48},
> +	{0x90095, 0x18},
> +	{0x90096, 0x4},
> +	{0x90097, 0x58},
> +	{0x90098, 0xb},
> +	{0x90099, 0x10},
> +	{0x9009a, 0x109},
> +	{0x9009b, 0x1},
> +	{0x9009c, 0x10},
> +	{0x9009d, 0x109},
> +	{0x9009e, 0x5},
> +	{0x9009f, 0x7c0},
> +	{0x900a0, 0x109},
> +	{0x900a1, 0x0},
> +	{0x900a2, 0x8140},
> +	{0x900a3, 0x10c},
> +	{0x900a4, 0x10},
> +	{0x900a5, 0x8138},
> +	{0x900a6, 0x10c},
> +	{0x900a7, 0x8},
> +	{0x900a8, 0x7c8},
> +	{0x900a9, 0x101},
> +	{0x900aa, 0x8},
> +	{0x900ab, 0x448},
> +	{0x900ac, 0x109},
> +	{0x900ad, 0xf},
> +	{0x900ae, 0x7c0},
> +	{0x900af, 0x109},
> +	{0x900b0, 0x47},
> +	{0x900b1, 0x630},
> +	{0x900b2, 0x109},
> +	{0x900b3, 0x8},
> +	{0x900b4, 0x618},
> +	{0x900b5, 0x109},
> +	{0x900b6, 0x8},
> +	{0x900b7, 0xe0},
> +	{0x900b8, 0x109},
> +	{0x900b9, 0x0},
> +	{0x900ba, 0x7c8},
> +	{0x900bb, 0x109},
> +	{0x900bc, 0x8},
> +	{0x900bd, 0x8140},
> +	{0x900be, 0x10c},
> +	{0x900bf, 0x0},
> +	{0x900c0, 0x1},
> +	{0x900c1, 0x8},
> +	{0x900c2, 0x8},
> +	{0x900c3, 0x4},
> +	{0x900c4, 0x8},
> +	{0x900c5, 0x8},
> +	{0x900c6, 0x7c8},
> +	{0x900c7, 0x101},
> +	{0x90006, 0x0},
> +	{0x90007, 0x0},
> +	{0x90008, 0x8},
> +	{0x90009, 0x0},
> +	{0x9000a, 0x0},
> +	{0x9000b, 0x0},
> +	{0xd00e7, 0x400},
> +	{0x90017, 0x0},
> +	{0x90026, 0x2b},
> +	{0x2000b, 0x4b},
> +	{0x2000c, 0x96},
> +	{0x2000d, 0x5dc},
> +	{0x2000e, 0x2c},
> +	{0x12000b, 0xc},
> +	{0x12000c, 0x16},
> +	{0x12000d, 0xfa},
> +	{0x12000e, 0x10},
> +	{0x22000b, 0x3},
> +	{0x22000c, 0x3},
> +	{0x22000d, 0x3e},
> +	{0x22000e, 0x10},
> +	{0x9000c, 0x0},
> +	{0x9000d, 0x173},
> +	{0x9000e, 0x60},
> +	{0x9000f, 0x6110},
> +	{0x90010, 0x2152},
> +	{0x90011, 0xdfbd},
> +	{0x90012, 0xffff},
> +	{0x90013, 0x6152},
> +	{0x20089, 0x1},
> +	{0x20088, 0x19},
> +	{0xc0080, 0x0},
> +	{0xd0000, 0x1},
> +};
> +

The list of binary data is quite impressive for i.MX8

> +struct dram_fsp_msg ddr_dram_fsp_msg[] = {
> +	{
> +		/* P0 2400mts 1D */
> +		.drate = 2400,
> +		.fw_type = FW_1D_IMAGE,
> +		.fsp_cfg = ddr_fsp0_cfg,
> +		.fsp_cfg_num = ARRAY_SIZE(ddr_fsp0_cfg),
> +	},
> +	{
> +		/* P1 400mts 1D */
> +		.drate = 400,
> +		.fw_type = FW_1D_IMAGE,
> +		.fsp_cfg = ddr_fsp1_cfg,
> +		.fsp_cfg_num = ARRAY_SIZE(ddr_fsp1_cfg),
> +	},
> +	{
> +		/* P2 100mts 1D */
> +		.drate = 100,
> +		.fw_type = FW_1D_IMAGE,
> +		.fsp_cfg = ddr_fsp2_cfg,
> +		.fsp_cfg_num = ARRAY_SIZE(ddr_fsp2_cfg),
> +	},
> +	{
> +		/* P0 2400mts 2D */
> +		.drate = 2400,
> +		.fw_type = FW_2D_IMAGE,
> +		.fsp_cfg = ddr_fsp0_2d_cfg,
> +		.fsp_cfg_num = ARRAY_SIZE(ddr_fsp0_2d_cfg),
> +	},
> +};
> +
> +/* ddr timing config params */
> +struct dram_timing_info dram_timing = {
> +	.ddrc_cfg = ddr_ddrc_cfg,
> +	.ddrc_cfg_num = ARRAY_SIZE(ddr_ddrc_cfg),
> +	.ddrphy_cfg = ddr_ddrphy_cfg,
> +	.ddrphy_cfg_num = ARRAY_SIZE(ddr_ddrphy_cfg),
> +	.fsp_msg = ddr_dram_fsp_msg,
> +	.fsp_msg_num = ARRAY_SIZE(ddr_dram_fsp_msg),
> +	.ddrphy_trained_csr = ddr_ddrphy_trained_csr,
> +	.ddrphy_trained_csr_num = ARRAY_SIZE(ddr_ddrphy_trained_csr),
> +	.ddrphy_pie = ddr_phy_pie,
> +	.ddrphy_pie_num = ARRAY_SIZE(ddr_phy_pie),
> +	.fsp_table = { 2400, 400, 100,},
> +};
> +
> diff --git a/board/freescale/imx8mn_evk/imx8mn_evk.c
> b/board/freescale/imx8mn_evk/imx8mn_evk.c new file mode 100644
> index 0000000000..badfde911b
> --- /dev/null
> +++ b/board/freescale/imx8mn_evk/imx8mn_evk.c
> @@ -0,0 +1,85 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright 2019 NXP
> + */
> +
> +#include <common.h>
> +#include <errno.h>
> +#include <asm/arch/clock.h>
> +#include <asm/arch/imx8mn_pins.h>
> +#include <asm/arch/sys_proto.h>
> +#include <asm/mach-imx/iomux-v3.h>
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +#define UART_PAD_CTRL	(PAD_CTL_DSE6 | PAD_CTL_FSEL1)
> +#define WDOG_PAD_CTRL	(PAD_CTL_DSE6 | PAD_CTL_ODE |
> PAD_CTL_PUE | PAD_CTL_PE) +
> +static iomux_v3_cfg_t const uart_pads[] = {
> +	IMX8MN_PAD_UART2_RXD__UART2_DCE_RX |
> MUX_PAD_CTRL(UART_PAD_CTRL),
> +	IMX8MN_PAD_UART2_TXD__UART2_DCE_TX |
> MUX_PAD_CTRL(UART_PAD_CTRL), +};
> +
> +static iomux_v3_cfg_t const wdog_pads[] = {
> +	IMX8MN_PAD_GPIO1_IO02__WDOG1_WDOG_B  |
> MUX_PAD_CTRL(WDOG_PAD_CTRL), +};
> +
> +int board_early_init_f(void)
> +{
> +	struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR;
> +
> +	imx_iomux_v3_setup_multiple_pads(wdog_pads,

Shouldn't those pins be configured via DTS/DM? As fair as I see this is
the imx8mn_evk.c file (which seems not to be the SPL).

> ARRAY_SIZE(wdog_pads)); +
> +	set_wdog_reset(wdog);
> +
> +	imx_iomux_v3_setup_multiple_pads(uart_pads,
> ARRAY_SIZE(uart_pads)); +
> +	init_uart_clk(1);

This also seems like not DM/DTS code.

> +
> +	return 0;
> +}
> +
> +#ifdef CONFIG_BOARD_POSTCLK_INIT
> +int board_postclk_init(void)
> +{
> +	/* TODO */
> +	return 0;
> +}
> +#endif
> +
> +int dram_init(void)
> +{
> +	/* rom_pointer[1] contains the size of TEE occupies */
> +	if (rom_pointer[1])
> +		gd->ram_size = PHYS_SDRAM_SIZE - rom_pointer[1];
> +	else
> +		gd->ram_size = PHYS_SDRAM_SIZE;
> +
> +	return 0;
> +}
> +
> +#ifdef CONFIG_OF_BOARD_SETUP
> +int ft_board_setup(void *blob, bd_t *bd)
> +{
> +	return 0;
> +}
> +#endif
> +
> +int board_init(void)
> +{
> +	return 0;
> +}
> +
> +int board_mmc_get_env_dev(int devno)
> +{
> +	return devno - 1;
> +}

Shouldn't the number of mmc device be get via alias defined in DTS (or
assigned automatically)? 

What is the purpose of this function?

> +
> +int board_late_init(void)
> +{
> +#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
> +	env_set("board_name", "DDR4 EVK");
> +	env_set("board_rev", "iMX8MN");
> +#endif
> +	return 0;
> +}
> diff --git a/board/freescale/imx8mn_evk/spl.c
> b/board/freescale/imx8mn_evk/spl.c new file mode 100644
> index 0000000000..aa5f37fde0
> --- /dev/null
> +++ b/board/freescale/imx8mn_evk/spl.c
> @@ -0,0 +1,90 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright 2019 NXP
> + */
> +
> +#include <common.h>
> +#include <spl.h>
> +#include <asm/io.h>
> +#include <errno.h>
> +#include <asm/arch/imx8mn_pins.h>
> +#include <asm/arch/sys_proto.h>
> +#include <asm/arch/clock.h>
> +#include <asm/gpio.h>
> +#include <asm/arch/ddr.h>
> +#include <asm/mach-imx/boot_mode.h>
> +#include <asm/mach-imx/gpio.h>
> +#include <asm/mach-imx/iomux-v3.h>
> +#include <asm/mach-imx/mxc_i2c.h>
> +
> +#include <dm/uclass.h>
> +#include <dm/device.h>
> +#include <dm/uclass-internal.h>
> +#include <dm/device-internal.h>
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +int spl_board_boot_device(enum boot_device boot_dev_spl)
> +{
> +	return BOOT_DEVICE_BOOTROM;
> +}
> +
> +void spl_dram_init(void)
> +{
> +	ddr_init(&dram_timing);
> +}
> +
> +void spl_board_init(void)
> +{
> +	struct udevice *dev;
> +
> +	puts("Normal Boot\n");
> +
> +	uclass_find_first_device(UCLASS_CLK, &dev);
> +
> +	for (; dev; uclass_find_next_device(&dev)) {
> +		if (device_probe(dev))
> +			continue;

Is this correct that in the SPL you call probe on all UCLASS_CLK
devices registered for i.MX8?

> +	}
> +}
> +
> +#ifdef CONFIG_SPL_LOAD_FIT
> +int board_fit_config_name_match(const char *name)
> +{
> +	/* Just empty function now - can't decide what to choose */
> +	debug("%s: %s\n", __func__, name);
> +
> +	return 0;
> +}
> +#endif
> +
> +void board_init_f(ulong dummy)
> +{
> +	int ret;
> +
> +	arch_cpu_init();
> +
> +	init_uart_clk(1);
> +
> +	board_early_init_f();
> +
> +	timer_init();
> +
> +	preloader_console_init();
> +
> +	/* Clear the BSS. */
> +	memset(__bss_start, 0, __bss_end - __bss_start);
> +
> +	ret = spl_init();
> +	if (ret) {
> +		debug("spl_init() failed: %d\n", ret);
> +		hang();
> +	}
> +
> +	enable_tzc380();
> +
> +	/* DDR initialization */
> +	spl_dram_init();
> +
> +	board_init_r(NULL, 0);
> +}
> diff --git a/configs/imx8mn_ddr4_evk_defconfig
> b/configs/imx8mn_ddr4_evk_defconfig new file mode 100644
> index 0000000000..01e10fc427
> --- /dev/null
> +++ b/configs/imx8mn_ddr4_evk_defconfig
> @@ -0,0 +1,53 @@
> +CONFIG_ARM=y
> +CONFIG_ARCH_IMX8M=y
> +CONFIG_SYS_TEXT_BASE=0x40200000
> +CONFIG_SPL_GPIO_SUPPORT=y
> +CONFIG_SPL_LIBCOMMON_SUPPORT=y
> +CONFIG_SPL_LIBGENERIC_SUPPORT=y
> +CONFIG_SYS_MALLOC_F_LEN=0x6000
> +CONFIG_TARGET_IMX8MN_EVK=y
> +CONFIG_SPL_SERIAL_SUPPORT=y
> +CONFIG_SPL=y
> +CONFIG_IMX_ROMAPI_LOADADDR=0x48000000
> +CONFIG_FIT=y
> +CONFIG_FIT_EXTERNAL_OFFSET=0x3000
> +CONFIG_SPL_LOAD_FIT=y
> +CONFIG_SPL_FIT_GENERATOR="arch/arm/mach-imx/mkimage_fit_atf.sh"
> +CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/mach-imx/imx8m/imximage-8mn-ddr4.cfg"
> +CONFIG_DEFAULT_FDT_FILE="fsl-imx8mn-ddr4-evk.dtb"
> +CONFIG_SPL_TEXT_BASE=0x912000
> +CONFIG_SPL_BOARD_INIT=y
> +CONFIG_SPL_BOOTROM_SUPPORT=y
> +CONFIG_SPL_SEPARATE_BSS=y
> +CONFIG_SPL_I2C_SUPPORT=y
> +CONFIG_HUSH_PARSER=y
> +CONFIG_CMD_CLK=y
> +CONFIG_CMD_GPIO=y
> +CONFIG_CMD_I2C=y
> +CONFIG_CMD_CACHE=y
> +CONFIG_CMD_REGULATOR=y
> +CONFIG_CMD_EXT2=y
> +CONFIG_CMD_EXT4=y
> +CONFIG_CMD_EXT4_WRITE=y
> +CONFIG_CMD_FAT=y
> +CONFIG_OF_CONTROL=y
> +CONFIG_SPL_OF_CONTROL=y
> +CONFIG_DEFAULT_DEVICE_TREE="imx8mm-evk"
> +CONFIG_SPL_DM=y
> +CONFIG_SPL_CLK=y
> +CONFIG_CLK_IMX8MN=y
> +CONFIG_DM_GPIO=y
> +CONFIG_MXC_GPIO=y
> +CONFIG_DM_I2C=y
> +CONFIG_SYS_I2C_MXC=y
> +CONFIG_DM_MMC=y
> +CONFIG_PHYLIB=y
> +CONFIG_DM_ETH=y
> +CONFIG_PINCTRL=y
> +CONFIG_SPL_PINCTRL=y
> +CONFIG_PINCTRL_IMX8M=y
> +CONFIG_DM_REGULATOR=y
> +CONFIG_DM_REGULATOR_FIXED=y
> +CONFIG_DM_REGULATOR_GPIO=y
> +CONFIG_MXC_UART=y
> +CONFIG_DM_THERMAL=y

You could also from the beginning enable CONFIG_WDT and CONFIG_SYSRESET
(as i.MX6 already uses it).

> diff --git a/include/configs/imx8mn_evk.h
> b/include/configs/imx8mn_evk.h new file mode 100644
> index 0000000000..6ec8a2e362
> --- /dev/null
> +++ b/include/configs/imx8mn_evk.h
> @@ -0,0 +1,198 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright 2018 NXP
> + */
> +
> +#ifndef __IMX8MN_EVK_H
> +#define __IMX8MN_EVK_H
> +
> +#include <linux/sizes.h>
> +#include <asm/arch/imx-regs.h>
> +
> +#ifdef CONFIG_SECURE_BOOT
> +#define CONFIG_CSF_SIZE			0x2000 /* 8K region */
> +#endif
> +
> +#define CONFIG_SPL_MAX_SIZE		(148 * 1024)
> +#define CONFIG_SYS_MONITOR_LEN		(512 * 1024)
> +#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
> +#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR	0x300
> +#define CONFIG_SYS_MMCSD_FS_BOOT_PARTITION	1
> +#define CONFIG_SYS_UBOOT_BASE	\
> +	(QSPI0_AMBA_BASE + CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR *
> 512) +
> +#ifdef CONFIG_SPL_BUILD
> +/*#define CONFIG_ENABLE_DDR_TRAINING_DEBUG*/
> +#define CONFIG_SPL_WATCHDOG_SUPPORT
> +#define CONFIG_SPL_DRIVERS_MISC_SUPPORT
> +#define CONFIG_SPL_POWER_SUPPORT
> +#define
> CONFIG_SPL_LDSCRIPT		"arch/arm/cpu/armv8/u-boot-spl.lds"
> +#define CONFIG_SPL_STACK		0x95fff0 +#define
> CONFIG_SPL_BSS_START_ADDR	0x00950000 +#define
> CONFIG_SPL_BSS_MAX_SIZE		0x2000	/* 8 KB */

Please fix globally -> replace 0x2000 -> SZ_8K from
include/linux/sizes.h

> +#define CONFIG_SYS_SPL_MALLOC_START	0x42200000 +#define
> CONFIG_SYS_SPL_MALLOC_SIZE	0x80000	/* 64 KB */ +#define
> CONFIG_SYS_ICACHE_OFF +#define CONFIG_SYS_DCACHE_OFF
> +
> +/* malloc f used before GD_FLG_FULL_MALLOC_INIT set */
> +#define CONFIG_MALLOC_F_ADDR		0x00940000
> +
> +/* For RAW image gives a error info not panic */
> +#define CONFIG_SPL_ABORT_ON_RAW_IMAGE
> +
> +#undef CONFIG_DM_MMC
> +#undef CONFIG_DM_PMIC
> +#undef CONFIG_DM_PMIC_PFUZE100
> +
> +#define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
> +
> +#endif
> +
> +#define CONFIG_REMAKE_ELF
> +
> +#define CONFIG_BOARD_EARLY_INIT_F
> +#define CONFIG_BOARD_POSTCLK_INIT
> +#define CONFIG_BOARD_LATE_INIT
> +
> +/* Flat Device Tree Definitions */
> +#define CONFIG_OF_BOARD_SETUP
> +
> +#undef CONFIG_CMD_EXPORTENV
> +#undef CONFIG_CMD_IMPORTENV
> +#undef CONFIG_CMD_IMLS
> +
> +#undef CONFIG_CMD_CRC32
> +#undef CONFIG_BOOTM_NETBSD
> +
> +/* Initial environment variables */
> +#define CONFIG_EXTRA_ENV_SETTINGS		\
> +	"script=boot.scr\0" \
> +	"image=Image\0" \
> +	"console=ttymxc1,115200
> earlycon=ec_imx6q,0x30890000,115200\0" \
> +	"fdt_addr=0x43000000\0"			\
> +	"fdt_high=0xffffffffffffffff\0"		\
> +	"boot_fdt=try\0" \
> +	"fdt_file=" CONFIG_DEFAULT_FDT_FILE "\0" \
> +	"initrd_addr=0x43800000\0"		\
> +	"initrd_high=0xffffffffffffffff\0" \
> +	"mmcdev="__stringify(CONFIG_SYS_MMC_ENV_DEV)"\0" \
> +	"mmcpart=" __stringify(CONFIG_SYS_MMC_IMG_LOAD_PART) "\0" \
> +	"mmcroot=" CONFIG_MMCROOT " rootwait rw\0" \
> +	"mmcautodetect=yes\0" \
> +	"mmcargs=setenv bootargs console=${console}
> root=${mmcroot}\0 " \
> +	"loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr}
> ${script};\0" \
> +	"bootscript=echo Running bootscript from mmc ...; " \
> +		"source\0" \
> +	"loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr}
> ${image}\0" \
> +	"loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr}
> ${fdt_file}\0" \
> +	"mmcboot=echo Booting from mmc ...; " \
> +		"run mmcargs; " \
> +		"if test ${boot_fdt} = yes || test ${boot_fdt} =
> try; then " \
> +			"if run loadfdt; then " \
> +				"booti ${loadaddr} - ${fdt_addr}; " \

Please correct me if I'm wrong, but why do you use 'booti' (and
presumably boot Image?).

Please use fitImage (in think that it is mature enough to be used for
new ports - other imx SoCs use it already for some time); 

It can be called as: bootm ${loadaddr}#conf@${fdt_conf}


> +			"else " \
> +				"echo WARN: Cannot load the DT; " \
> +			"fi; " \
> +		"else " \
> +			"echo wait for boot; " \
> +		"fi;\0" \
> +	"netargs=setenv bootargs console=${console} " \
> +		"root=/dev/nfs " \
> +		"ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0" \
> +	"netboot=echo Booting from net ...; " \
> +		"run netargs;  " \
> +		"if test ${ip_dyn} = yes; then " \
> +			"setenv get_cmd dhcp; " \
> +		"else " \
> +			"setenv get_cmd tftp; " \
> +		"fi; " \
> +		"${get_cmd} ${loadaddr} ${image}; " \
> +		"if test ${boot_fdt} = yes || test ${boot_fdt} =
> try; then " \
> +			"if ${get_cmd} ${fdt_addr} ${fdt_file}; then
> " \
> +				"booti ${loadaddr} - ${fdt_addr}; " \
> +			"else " \
> +				"echo WARN: Cannot load the DT; " \
> +			"fi; " \
> +		"else " \
> +			"booti; " \
> +		"fi;\0"
> +
> +#define CONFIG_BOOTCOMMAND \
> +	   "mmc dev ${mmcdev}; if mmc rescan; then " \
> +		   "if run loadbootscript; then " \
> +			   "run bootscript; " \
> +		   "else " \
> +			   "if run loadimage; then " \
> +				   "run mmcboot; " \
> +			   "else run netboot; " \
> +			   "fi; " \
> +		   "fi; " \
> +	   "else booti ${loadaddr} - ${fdt_addr}; fi"
> +
> +/* Link Definitions */
> +#define CONFIG_LOADADDR			0x40480000
> +
> +#define CONFIG_SYS_LOAD_ADDR           CONFIG_LOADADDR
> +
> +#define CONFIG_SYS_INIT_RAM_ADDR        0x40000000
> +#define CONFIG_SYS_INIT_RAM_SIZE        0x80000
> +#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)
> +
> +#define CONFIG_ENV_OVERWRITE
> +#if defined(CONFIG_ENV_IS_IN_MMC)
> +#define CONFIG_ENV_OFFSET               (64 * SZ_64K)
> +#endif
> +#define CONFIG_ENV_SIZE			0x1000
> +#define CONFIG_SYS_MMC_ENV_DEV		0   /* USDHC2 */
> +#define CONFIG_MMCROOT			"/dev/mmcblk1p2"  /*
> USDHC2 */ +
> +/* Size of malloc() pool */
> +#define CONFIG_SYS_MALLOC_LEN		SZ_32M
> +
> +#define CONFIG_SYS_SDRAM_BASE           0x40000000
> +#define PHYS_SDRAM                      0x40000000
> +#define PHYS_SDRAM_SIZE			0x80000000 /* 2GB DDR
> */ +
> +#define CONFIG_SYS_MEMTEST_START    PHYS_SDRAM
> +#define CONFIG_SYS_MEMTEST_END      (CONFIG_SYS_MEMTEST_START +
> (PHYS_SDRAM_SIZE >> 1)) +
> +#define CONFIG_BAUDRATE			115200
> +
> +#define CONFIG_MXC_UART_BASE		UART2_BASE_ADDR
> +
> +/* Monitor Command Prompt */
> +#undef CONFIG_SYS_PROMPT
> +#define CONFIG_SYS_PROMPT		"u-boot=> "
> +#define CONFIG_SYS_PROMPT_HUSH_PS2	"> "
> +#define CONFIG_SYS_CBSIZE		2048
> +#define CONFIG_SYS_MAXARGS		64
> +#define CONFIG_SYS_BARGSIZE		CONFIG_SYS_CBSIZE
> +#define CONFIG_SYS_PBSIZE		(CONFIG_SYS_CBSIZE + \
> +					sizeof(CONFIG_SYS_PROMPT) +
> 16) +
> +#define CONFIG_IMX_BOOTAUX

Has the i.MX8 the use case for IMX_BOOTAUX - if not please remove it.

> +
> +/* USDHC */
> +#define CONFIG_CMD_MMC
> +#define CONFIG_FSL_ESDHC
> +#define CONFIG_FSL_USDHC
> +
> +#define CONFIG_SYS_FSL_USDHC_NUM	2
> +#define CONFIG_SYS_FSL_ESDHC_ADDR	0

Some of the above are in Kconfig.

> +
> +#define CONFIG_SUPPORT_EMMC_BOOT	/* eMMC specific */
> +#define CONFIG_SYS_MMC_IMG_LOAD_PART	1
> +
> +#define CONFIG_CMD_FUSE
> +
> +#define CONFIG_SYS_I2C_MXC_I2C1		/* enable I2C bus 1 */
> +#define CONFIG_SYS_I2C_MXC_I2C2		/* enable I2C bus 2 */
> +#define CONFIG_SYS_I2C_MXC_I2C3		/* enable I2C bus 3 */

> +#define CONFIG_SYS_I2C_SPEED		100000

Those #defines (I2C related) are already supported in Kconfig. Please
use them.


Please review above defines and move to Kconfig.

> +
> +#define CONFIG_OF_SYSTEM_SETUP
> +#endif




Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20190710/119ddc24/attachment.sig>

  reply	other threads:[~2019-07-10  8:34 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-08  1:38 [U-Boot] [PATCH V2 00/51] Support i.MX8MM/N Peng Fan
2019-07-08  1:38 ` [U-Boot] [PATCH V2 01/51] linux: compat: guard PAGE_SIZE Peng Fan
2019-07-08  1:38 ` [U-Boot] [PATCH V2 02/51] dm: clk: ignore default settings when node not valid Peng Fan
2019-07-08  1:38 ` [U-Boot] [PATCH V2 03/51] pinctrl: imx: use devfdt_get_addr_size_index Peng Fan
2019-07-08  1:38 ` [U-Boot] [PATCH V2 04/51] i2c: mxc: add CONFIG_CLK support Peng Fan
2019-07-10  8:03   ` Lukasz Majewski
2019-07-10  8:19     ` Peng Fan
2019-07-10 14:10   ` Schrempf Frieder
2019-07-11  6:43     ` Peng Fan
2019-07-08  1:38 ` [U-Boot] [PATCH V2 05/51] tools: imx8m_image: align spl bin image size Peng Fan
2019-07-08  1:38 ` [U-Boot] [PATCH V2 06/51] ddr: imx8m: fix ddr firmware location when enable SPL OF Peng Fan
2019-07-08  1:38 ` [U-Boot] [PATCH V2 07/51] tools: imx8mimage: fix HDMI/FIT parsing Peng Fan
2019-07-08  1:38 ` [U-Boot] [PATCH V2 08/51] imx8m: add image cfg for i.MX8MM lpddr4 Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 09/51] imx: add IMX8MQ kconfig entry Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 10/51] imx: add IMX8MM " Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 11/51] imx: imx8mm: add clock bindings header Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 12/51] imx: add i.MX8MM cpu type Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 13/51] imx: spl: add spl_board_boot_device for i.MX8MM Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 14/51] imx8m: update imx-regs " Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 15/51] imx: add get_cpu_rev support " Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 16/51] imx8m: rename clock to clock_imx8mq Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 17/51] imx8m: restructure clock.h Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 18/51] imx8m: add clk support for i.MX8MM Peng Fan
2019-07-08  9:07   ` Lukasz Majewski
2019-07-08  9:32     ` Peng Fan
2019-07-08 10:13       ` Lukasz Majewski
2019-07-10  0:49     ` Peng Fan
2019-07-10  7:22       ` Lukasz Majewski
2019-07-10  8:22         ` Peng Fan
2019-07-10  8:47           ` Lukasz Majewski
2019-07-08  1:39 ` [U-Boot] [PATCH V2 19/51] imx8m: soc: probe clk before relocation Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 20/51] imx8m: add pin header for i.MX8MM Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 21/51] imx: add i.MX8MM PE property Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 22/51] imx8m: Fix MMU table issue for OPTEE memory Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 23/51] imx8m: set BYPASS ID SWAP to avoid AXI bus errors Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 24/51] imx8m: Configure trustzone region 0 for non-secure access Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 25/51] imx8m: soc: enable SCTR clock before timer init Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 26/51] serial: Kconfig: make MXC_UART usable for MX7 and IMX8M Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 27/51] clk: imx: add Kconfig entry for i.MX8MM Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 28/51] clk: imx: add i.MX8MM clk driver Peng Fan
2019-07-10 14:22   ` Schrempf Frieder
2019-07-08  1:39 ` [U-Boot] [PATCH V2 29/51] imx: add i.MX8MM EVK board support Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 30/51] ddr: imx8m: Fix ddr4 driver build issue Peng Fan
2019-07-08  1:39 ` [U-Boot] [PATCH V2 31/51] imx8mq: Update the ddrc QoS setting for B1 chip Peng Fan
2019-07-08  1:40 ` [U-Boot] [PATCH V2 32/51] driver: ddr: Refine the ddr init driver on imx8m Peng Fan
2019-07-08  1:40 ` [U-Boot] [PATCH V2 33/51] ddr: imx8m: Fix the ddr init hang on imx8mq Peng Fan
2019-07-08  1:40 ` [U-Boot] [PATCH V2 34/51] imx: add i.MX8MN kconfig entry Peng Fan
2019-07-08  1:40 ` [U-Boot] [PATCH V2 35/51] imx8mn: support get_cpu_rev Peng Fan
2019-07-08  1:40 ` [U-Boot] [PATCH V2 36/51] imx8m: add clk support for i.MX8MN Peng Fan
2019-07-08  1:40 ` [U-Boot] [PATCH V2 37/51] imx8mn: set BYPASS ID SWAP to avoid AXI bus errors Peng Fan
2019-07-08  1:40 ` [U-Boot] [PATCH V2 38/51] imx: add i.MX8MN PE property Peng Fan
2019-07-08  1:40 ` [U-Boot] [PATCH V2 39/51] imx8mn: add pin header Peng Fan
2019-07-08  1:40 ` [U-Boot] [PATCH V2 40/51] imx: spl: use spl_board_boot_device for i.MX8MN Peng Fan
2019-07-08  1:40 ` [U-Boot] [PATCH V2 41/51] spl: pass args to board_return_to_bootrom Peng Fan
2019-07-10  6:23   ` Kever Yang
2019-07-10  8:09   ` Philipp Tomsich
2019-07-08  1:40 ` [U-Boot] [PATCH V2 42/51] imx: add rom api support Peng Fan
2019-07-08  1:40 ` [U-Boot] [PATCH V2 43/51] imx: cpu: restrict get_boot_device Peng Fan
2019-07-08  1:40 ` [U-Boot] [PATCH V2 44/51] imx8mn: add get_boot_device Peng Fan
2019-07-08  1:40 ` [U-Boot] [PATCH V2 45/51] tools: imx8mimage: add ROM VERSION Peng Fan
2019-07-08  1:40 ` [U-Boot] [PATCH V2 46/51] pinctrl: imx8m: support i.MX8MN Peng Fan
2019-07-08  1:40 ` [U-Boot] [PATCH V2 47/51] tools: imx8m_image: support ddr4 firmware Peng Fan
2019-07-08  1:40 ` [U-Boot] [PATCH V2 48/51] clk: imx: add i.MX8MN clk support Peng Fan
2019-07-08  1:40 ` [U-Boot] [PATCH V2 49/51] imx8m: add i.MX8MN ddr4 image cfg file Peng Fan
2019-07-08  1:40 ` [U-Boot] [PATCH V2 50/51] imx: add dtsi for i.MX8MN Peng Fan
2019-07-10  8:08   ` Lukasz Majewski
2019-07-10  8:09     ` Peng Fan
2019-07-10  8:44       ` Lukasz Majewski
2019-07-10  8:50         ` Peng Fan
2019-07-08  1:40 ` [U-Boot] [PATCH V2 51/51] imx: add i.MX8MN DDR4 board support Peng Fan
2019-07-10  8:34   ` Lukasz Majewski [this message]
2019-07-10 10:05     ` Peng Fan
2019-07-10 12:18       ` Lukasz Majewski
2019-07-08  8:47 ` [U-Boot] [PATCH V2 00/51] Support i.MX8MM/N Schrempf Frieder
2019-07-08  8:49   ` Peng Fan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190710103424.518237bc@jawa \
    --to=lukma@denx.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.