diff options
Diffstat (limited to 'arch/arm/boards/nxp-imx8mn-evk')
-rw-r--r-- | arch/arm/boards/nxp-imx8mn-evk/board.c | 24 | ||||
-rw-r--r-- | arch/arm/boards/nxp-imx8mn-evk/ddr4-timing.c | 530 | ||||
-rw-r--r-- | arch/arm/boards/nxp-imx8mn-evk/flash-header-imx8mn-evk.imxcfg | 3 | ||||
-rw-r--r-- | arch/arm/boards/nxp-imx8mn-evk/lowlevel.c | 172 | ||||
-rw-r--r-- | arch/arm/boards/nxp-imx8mn-evk/lpddr4-timing.c | 406 |
5 files changed, 71 insertions, 1064 deletions
diff --git a/arch/arm/boards/nxp-imx8mn-evk/board.c b/arch/arm/boards/nxp-imx8mn-evk/board.c index 3c478d5f70..3e90ba284c 100644 --- a/arch/arm/boards/nxp-imx8mn-evk/board.c +++ b/arch/arm/boards/nxp-imx8mn-evk/board.c @@ -5,10 +5,11 @@ #include <bootsource.h> #include <common.h> +#include <deep-probe.h> #include <init.h> #include <linux/phy.h> #include <linux/sizes.h> -#include <mach/bbu.h> +#include <mach/imx/bbu.h> #include <envfs.h> #define PHY_ID_AR8031 0x004dd074 @@ -30,14 +31,11 @@ static int ar8031_phy_fixup(struct phy_device *phydev) return 0; } -static int nxp_imx8mn_evk_init(void) +static int imx8mn_evk_probe(struct device *dev) { int emmc_bbu_flag = 0; int sd_bbu_flag = 0; - if (!of_machine_is_compatible("fsl,imx8mn-evk")) - return 0; - if (bootsource_get() == BOOTSOURCE_MMC) { if (bootsource_get_instance() == 2) { of_device_enable_path("/chosen/environment-emmc"); @@ -53,10 +51,24 @@ static int nxp_imx8mn_evk_init(void) imx8m_bbu_internal_mmc_register_handler("SD", "/dev/mmc1.barebox", sd_bbu_flag); imx8m_bbu_internal_mmcboot_register_handler("eMMC", "/dev/mmc2", emmc_bbu_flag); + imx8m_bbu_internal_flexspi_nor_register_handler("QSPI", "/dev/m25p0.barebox", 0); phy_register_fixup_for_uid(PHY_ID_AR8031, AR_PHY_ID_MASK, ar8031_phy_fixup); return 0; } -coredevice_initcall(nxp_imx8mn_evk_init); + +static const struct of_device_id imx8mn_evk_of_match[] = { + { .compatible = "fsl,imx8mn-evk" }, + { .compatible = "fsl,imx8mn-ddr4-evk" }, + { /* sentinel */ }, +}; +BAREBOX_DEEP_PROBE_ENABLE(imx8mn_evk_of_match); + +static struct driver imx8mn_evkboard_driver = { + .name = "board-imx8mn-evk", + .probe = imx8mn_evk_probe, + .of_compatible = DRV_OF_COMPAT(imx8mn_evk_of_match), +}; +coredevice_platform_driver(imx8mn_evkboard_driver); diff --git a/arch/arm/boards/nxp-imx8mn-evk/ddr4-timing.c b/arch/arm/boards/nxp-imx8mn-evk/ddr4-timing.c index 7ce371384e..626d7e1c08 100644 --- a/arch/arm/boards/nxp-imx8mn-evk/ddr4-timing.c +++ b/arch/arm/boards/nxp-imx8mn-evk/ddr4-timing.c @@ -210,533 +210,6 @@ static struct dram_cfg_param ddr_ddrphy_cfg[] = { { 0x2002c, 0x0 }, }; -/* ddr phy trained csr */ -static 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 */ static struct dram_cfg_param ddr_fsp0_cfg[] = { { 0xd0000, 0x0 }, @@ -1040,15 +513,12 @@ static struct dram_fsp_msg ddr_dram_fsp_msg[] = { /* ddr timing config params */ struct dram_timing_info imx8mn_evk_ddr4_timing = { - .dram_type = DRAM_TYPE_DDR4, .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, 1066, }, diff --git a/arch/arm/boards/nxp-imx8mn-evk/flash-header-imx8mn-evk.imxcfg b/arch/arm/boards/nxp-imx8mn-evk/flash-header-imx8mn-evk.imxcfg index 27a2138e43..f47ea08266 100644 --- a/arch/arm/boards/nxp-imx8mn-evk/flash-header-imx8mn-evk.imxcfg +++ b/arch/arm/boards/nxp-imx8mn-evk/flash-header-imx8mn-evk.imxcfg @@ -5,3 +5,6 @@ soc imx8mn loadaddr 0x912000 max_load_size 0x3f000 ivtofs 0x0 + +#include <mach/imx/flexspi-imx8mp-cfg.h> +#include <mach/imx/habv4-imx8-gencsf.h> diff --git a/arch/arm/boards/nxp-imx8mn-evk/lowlevel.c b/arch/arm/boards/nxp-imx8mn-evk/lowlevel.c index de53213ebc..a1a501b1d9 100644 --- a/arch/arm/boards/nxp-imx8mn-evk/lowlevel.c +++ b/arch/arm/boards/nxp-imx8mn-evk/lowlevel.c @@ -1,29 +1,30 @@ // SPDX-License-Identifier: GPL-2.0 #include <io.h> +#include <image-metadata.h> #include <common.h> #include <debug_ll.h> +#include <mach/imx/debug_ll.h> #include <firmware.h> #include <asm/mmu.h> #include <asm/cache.h> #include <asm/sections.h> #include <asm/barebox-arm.h> #include <asm/barebox-arm-head.h> -#include <i2c/i2c-early.h> +#include <pbl/i2c.h> +#include <pbl/pmic.h> #include <linux/sizes.h> -#include <mach/atf.h> -#include <mach/xload.h> -#include <mach/esdctl.h> -#include <mach/generic.h> -#include <mach/imx8mn-regs.h> -#include <mach/iomux-mx8mn.h> -#include <mach/imx8m-ccm-regs.h> +#include <mach/imx/atf.h> +#include <mach/imx/xload.h> +#include <mach/imx/esdctl.h> +#include <mach/imx/generic.h> +#include <mach/imx/imx8mn-regs.h> +#include <mach/imx/iomux-mx8mn.h> +#include <mach/imx/imx8m-ccm-regs.h> #include <mfd/pca9450.h> #include <mfd/bd71837.h> #include <soc/imx8m/ddr.h> -extern char __dtb_z_imx8mn_evk_start[]; - static void setup_uart(void) { void __iomem *uart = IOMEM(MX8M_UART2_BASE_ADDR); @@ -38,108 +39,50 @@ static void setup_uart(void) putc_ll('>'); } -static void pmic_reg_write(void *i2c, int addr, int reg, uint8_t val) -{ - int ret; - u8 buf[32]; - struct i2c_msg msgs[] = { - { - .addr = addr, - .buf = buf, - }, - }; - - buf[0] = reg; - buf[1] = val; - - msgs[0].len = 2; - - ret = i2c_fsl_xfer(i2c, msgs, ARRAY_SIZE(msgs)); - if (ret != 1) - pr_err("Failed to write to pmic@%x: %d\n", addr, ret); -} - -static int power_init_board_pca9450(void *i2c, int addr) -{ - u8 buf[1]; - struct i2c_msg msgs[] = { - { - .addr = addr, - .buf = buf, - .flags = I2C_M_RD, - .len = 1, - }, - }; - - if (i2c_fsl_xfer(i2c, msgs, 1) != 1) - return -ENODEV; - +static struct pmic_config pca9450_cfg[] = { /* BUCKxOUT_DVS0/1 control BUCK123 output */ - pmic_reg_write(i2c, addr, PCA9450_BUCK123_DVS, 0x29); - + { PCA9450_BUCK123_DVS, 0x29 }, /* * increase VDD_SOC to typical value 0.95V before first * DRAM access, set DVS1 to 0.85v for suspend. * Enable DVS control through PMIC_STBY_REQ and * set B1_ENMODE=1 (ON by PMIC_ON_REQ=H) */ - pmic_reg_write(i2c, addr, PCA9450_BUCK1OUT_DVS0, 0x1C); - + { PCA9450_BUCK1OUT_DVS0, 0x1C }, /* Set DVS1 to 0.85v for suspend */ /* Enable DVS control through PMIC_STBY_REQ and set B1_ENMODE=1 (ON by PMIC_ON_REQ=H) */ - pmic_reg_write(i2c, addr, PCA9450_BUCK1OUT_DVS1, 0x14); - pmic_reg_write(i2c, addr, PCA9450_BUCK1CTRL, 0x59); - + { PCA9450_BUCK1OUT_DVS1, 0x14 }, + { PCA9450_BUCK1CTRL, 0x59 }, /* set VDD_SNVS_0V8 from default 0.85V */ - pmic_reg_write(i2c, addr, PCA9450_LDO2CTRL, 0xC0); - + { PCA9450_LDO2CTRL, 0xC0 }, /* enable LDO4 to 1.2v */ - pmic_reg_write(i2c, addr, PCA9450_LDO4CTRL, 0x44); - + { PCA9450_LDO4CTRL, 0x44 }, /* set WDOG_B_CFG to cold reset */ - pmic_reg_write(i2c, addr, PCA9450_RESET_CTRL, 0xA1); + { PCA9450_RESET_CTRL, 0xA1 }, +}; - return 0; -} - -static int power_init_board_bd71837(void *i2c, int addr) -{ +static struct pmic_config bd71837_cfg[] = { /* decrease RESET key long push time from the default 10s to 10ms */ - pmic_reg_write(i2c, addr, BD718XX_PWRONCONFIG1, 0x0); - + { BD718XX_PWRONCONFIG1, 0x0 }, /* unlock the PMIC regs */ - pmic_reg_write(i2c, addr, BD718XX_REGLOCK, 0x1); - + { BD718XX_REGLOCK, 0x1 }, /* Set VDD_ARM to typical value 0.85v for 1.2Ghz */ - pmic_reg_write(i2c, addr, BD718XX_BUCK2_VOLT_RUN, 0xf); - + { BD718XX_BUCK2_VOLT_RUN, 0xf }, /* Set VDD_SOC/VDD_DRAM to typical value 0.85v for nominal mode */ - pmic_reg_write(i2c, addr, BD718XX_BUCK1_VOLT_RUN, 0xf); - + { BD718XX_BUCK1_VOLT_RUN, 0xf }, /* Set VDD_SOC 0.85v for suspend */ - pmic_reg_write(i2c, addr, BD718XX_BUCK1_VOLT_SUSP, 0xf); - - /* increase NVCC_DRAM_1V2 to 1.2v for DDR4 - * */ - pmic_reg_write(i2c, addr, BD718XX_4TH_NODVS_BUCK_CTRL, 0x28); - + { BD718XX_BUCK1_VOLT_SUSP, 0xf }, + /* increase NVCC_DRAM_1V2 to 1.2v for DDR4 */ + { BD718XX_4TH_NODVS_BUCK_CTRL, 0x28 }, /* lock the PMIC regs */ - pmic_reg_write(i2c, addr, BD718XX_REGLOCK, 0x11); - - return 0; -} + { BD718XX_REGLOCK, 0x11 }, +}; extern struct dram_timing_info imx8mn_evk_ddr4_timing, imx8mn_evk_lpddr4_timing; static void start_atf(void) { - struct dram_timing_info *dram_timing = &imx8mn_evk_lpddr4_timing; - size_t bl31_size; - const u8 *bl31; - enum bootsource src; - void *i2c; - int instance; - int ret; + struct pbl_i2c *i2c; /* * If we are in EL3 we are running for the first time and need to @@ -149,48 +92,24 @@ static void start_atf(void) if (current_el() != 3) return; + imx8mn_early_clock_init(); + imx8mn_setup_pad(IMX8MN_PAD_I2C1_SCL__I2C1_SCL); imx8mn_setup_pad(IMX8MN_PAD_I2C1_SDA__I2C1_SDA); - imx8mn_early_clock_init(); imx8m_ccgr_clock_enable(IMX8M_CCM_CCGR_I2C1); i2c = imx8m_i2c_early_init(IOMEM(MX8MN_I2C1_BASE_ADDR)); - ret = power_init_board_pca9450(i2c, 0x25); - if (ret) { - power_init_board_bd71837(i2c, 0x4b); - dram_timing = &imx8mn_evk_ddr4_timing; + if (i2c_dev_probe(i2c, 0x25, true) == 0) { + pmic_configure(i2c, 0x25, pca9450_cfg, ARRAY_SIZE(pca9450_cfg)); + imx8mn_ddr_init(&imx8mn_evk_lpddr4_timing, DRAM_TYPE_LPDDR4); + } else { + pmic_configure(i2c, 0x4b, bd71837_cfg, ARRAY_SIZE(bd71837_cfg)); + imx8mn_ddr_init(&imx8mn_evk_ddr4_timing, DRAM_TYPE_DDR4); } - imx8mn_ddr_init(dram_timing); - - imx8mn_get_boot_source(&src, &instance); - switch (src) { - case BOOTSOURCE_MMC: - imx8mn_esdhc_load_image(instance, false); - break; - default: - printf("Unhandled bootsource BOOTSOURCE_%d\n", src); - hang(); - } - - /* - * On completion the TF-A will jump to MX8M_ATF_BL33_BASE_ADDR - * in EL2. Copy the image there, but replace the PBL part of - * that image with ourselves. On a high assurance boot only the - * currently running code is validated and contains the checksum - * for the piggy data, so we need to ensure that we are running - * the same code in DRAM. - */ - memcpy((void *)MX8M_ATF_BL33_BASE_ADDR, - __image_start, barebox_pbl_size); - - get_builtin_firmware(imx8mn_bl31_bin, &bl31, &bl31_size); - - imx8mn_atf_load_bl31(bl31, bl31_size); - - /* not reached */ + imx8mn_load_and_start_image_via_tfa(); } /* @@ -211,14 +130,23 @@ static void start_atf(void) */ static __noreturn noinline void nxp_imx8mn_evk_start(void) { + extern char __dtb_z_imx8mn_evk_start[], __dtb_z_imx8mn_ddr4_evk_start[]; + void *fdt; + setup_uart(); start_atf(); + /* Check if we configured DDR4 in EL3 */ + if (readl(MX8M_DDRC_CTL_BASE_ADDR) & BIT(4)) + fdt = __dtb_z_imx8mn_ddr4_evk_start; + else + fdt = __dtb_z_imx8mn_evk_start; + /* * Standard entry we hit once we initialized both DDR and ATF */ - imx8mn_barebox_entry(__dtb_z_imx8mn_evk_start); + imx8mn_barebox_entry(fdt); } ENTRY_FUNCTION(start_nxp_imx8mn_evk, r0, r1, r2) diff --git a/arch/arm/boards/nxp-imx8mn-evk/lpddr4-timing.c b/arch/arm/boards/nxp-imx8mn-evk/lpddr4-timing.c index c53bcc705d..902c607a82 100644 --- a/arch/arm/boards/nxp-imx8mn-evk/lpddr4-timing.c +++ b/arch/arm/boards/nxp-imx8mn-evk/lpddr4-timing.c @@ -278,409 +278,6 @@ static struct dram_cfg_param ddr_ddrphy_cfg[] = { {0x000d0000, 0x00000001}, }; -/* ddr phy trained csr */ -static 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}, - {0x011080, 0x0}, - {0x111080, 0x0}, - {0x211080, 0x0}, - {0x011180, 0x0}, - {0x111180, 0x0}, - {0x211180, 0x0}, - {0x010081, 0x0}, - {0x110081, 0x0}, - {0x210081, 0x0}, - {0x010181, 0x0}, - {0x110181, 0x0}, - {0x210181, 0x0}, - {0x011081, 0x0}, - {0x111081, 0x0}, - {0x211081, 0x0}, - {0x011181, 0x0}, - {0x111181, 0x0}, - {0x211181, 0x0}, - {0x0100d0, 0x0}, - {0x1100d0, 0x0}, - {0x2100d0, 0x0}, - {0x0101d0, 0x0}, - {0x1101d0, 0x0}, - {0x2101d0, 0x0}, - {0x0110d0, 0x0}, - {0x1110d0, 0x0}, - {0x2110d0, 0x0}, - {0x0111d0, 0x0}, - {0x1111d0, 0x0}, - {0x2111d0, 0x0}, - {0x0100d1, 0x0}, - {0x1100d1, 0x0}, - {0x2100d1, 0x0}, - {0x0101d1, 0x0}, - {0x1101d1, 0x0}, - {0x2101d1, 0x0}, - {0x0110d1, 0x0}, - {0x1110d1, 0x0}, - {0x2110d1, 0x0}, - {0x0111d1, 0x0}, - {0x1111d1, 0x0}, - {0x2111d1, 0x0}, - {0x010068, 0x0}, - {0x010168, 0x0}, - {0x010268, 0x0}, - {0x010368, 0x0}, - {0x010468, 0x0}, - {0x010568, 0x0}, - {0x010668, 0x0}, - {0x010768, 0x0}, - {0x010868, 0x0}, - {0x011068, 0x0}, - {0x011168, 0x0}, - {0x011268, 0x0}, - {0x011368, 0x0}, - {0x011468, 0x0}, - {0x011568, 0x0}, - {0x011668, 0x0}, - {0x011768, 0x0}, - {0x011868, 0x0}, - {0x010069, 0x0}, - {0x010169, 0x0}, - {0x010269, 0x0}, - {0x010369, 0x0}, - {0x010469, 0x0}, - {0x010569, 0x0}, - {0x010669, 0x0}, - {0x010769, 0x0}, - {0x010869, 0x0}, - {0x011069, 0x0}, - {0x011169, 0x0}, - {0x011269, 0x0}, - {0x011369, 0x0}, - {0x011469, 0x0}, - {0x011569, 0x0}, - {0x011669, 0x0}, - {0x011769, 0x0}, - {0x011869, 0x0}, - {0x01008c, 0x0}, - {0x11008c, 0x0}, - {0x21008c, 0x0}, - {0x01018c, 0x0}, - {0x11018c, 0x0}, - {0x21018c, 0x0}, - {0x01108c, 0x0}, - {0x11108c, 0x0}, - {0x21108c, 0x0}, - {0x01118c, 0x0}, - {0x11118c, 0x0}, - {0x21118c, 0x0}, - {0x01008d, 0x0}, - {0x11008d, 0x0}, - {0x21008d, 0x0}, - {0x01018d, 0x0}, - {0x11018d, 0x0}, - {0x21018d, 0x0}, - {0x01108d, 0x0}, - {0x11108d, 0x0}, - {0x21108d, 0x0}, - {0x01118d, 0x0}, - {0x11118d, 0x0}, - {0x21118d, 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}, - {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}, - {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}, - {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}, - {0x010020, 0x0}, - {0x110020, 0x0}, - {0x210020, 0x0}, - {0x011020, 0x0}, - {0x111020, 0x0}, - {0x211020, 0x0}, - {0x020072, 0x0}, - {0x020073, 0x0}, - {0x020074, 0x0}, - {0x0100aa, 0x0}, - {0x0110aa, 0x0}, - {0x020010, 0x0}, - {0x120010, 0x0}, - {0x220010, 0x0}, - {0x020011, 0x0}, - {0x120011, 0x0}, - {0x220011, 0x0}, - {0x0100ae, 0x0}, - {0x1100ae, 0x0}, - {0x2100ae, 0x0}, - {0x0100af, 0x0}, - {0x1100af, 0x0}, - {0x2100af, 0x0}, - {0x0110ae, 0x0}, - {0x1110ae, 0x0}, - {0x2110ae, 0x0}, - {0x0110af, 0x0}, - {0x1110af, 0x0}, - {0x2110af, 0x0}, - {0x020020, 0x0}, - {0x120020, 0x0}, - {0x220020, 0x0}, - {0x0100a0, 0x0}, - {0x0100a1, 0x0}, - {0x0100a2, 0x0}, - {0x0100a3, 0x0}, - {0x0100a4, 0x0}, - {0x0100a5, 0x0}, - {0x0100a6, 0x0}, - {0x0100a7, 0x0}, - {0x0110a0, 0x0}, - {0x0110a1, 0x0}, - {0x0110a2, 0x0}, - {0x0110a3, 0x0}, - {0x0110a4, 0x0}, - {0x0110a5, 0x0}, - {0x0110a6, 0x0}, - {0x0110a7, 0x0}, - {0x02007c, 0x0}, - {0x12007c, 0x0}, - {0x22007c, 0x0}, - {0x02007d, 0x0}, - {0x12007d, 0x0}, - {0x22007d, 0x0}, - {0x0400fd, 0x0}, - {0x0400c0, 0x0}, - {0x090201, 0x0}, - {0x190201, 0x0}, - {0x290201, 0x0}, - {0x090202, 0x0}, - {0x190202, 0x0}, - {0x290202, 0x0}, - {0x090203, 0x0}, - {0x190203, 0x0}, - {0x290203, 0x0}, - {0x090204, 0x0}, - {0x190204, 0x0}, - {0x290204, 0x0}, - {0x090205, 0x0}, - {0x190205, 0x0}, - {0x290205, 0x0}, - {0x090206, 0x0}, - {0x190206, 0x0}, - {0x290206, 0x0}, - {0x090207, 0x0}, - {0x190207, 0x0}, - {0x290207, 0x0}, - {0x090208, 0x0}, - {0x190208, 0x0}, - {0x290208, 0x0}, - {0x010062, 0x0}, - {0x010162, 0x0}, - {0x010262, 0x0}, - {0x010362, 0x0}, - {0x010462, 0x0}, - {0x010562, 0x0}, - {0x010662, 0x0}, - {0x010762, 0x0}, - {0x010862, 0x0}, - {0x011062, 0x0}, - {0x011162, 0x0}, - {0x011262, 0x0}, - {0x011362, 0x0}, - {0x011462, 0x0}, - {0x011562, 0x0}, - {0x011662, 0x0}, - {0x011762, 0x0}, - {0x011862, 0x0}, - {0x020077, 0x0}, - {0x010001, 0x0}, - {0x011001, 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 */ static struct dram_cfg_param ddr_fsp0_cfg[] = { {0x000d0000, 0x00000000}, @@ -1576,15 +1173,12 @@ static struct dram_fsp_msg ddr_dram_fsp_msg[] = { /* ddr timing config params */ struct dram_timing_info imx8mn_evk_lpddr4_timing = { - .dram_type = DRAM_TYPE_LPDDR4, .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 = { 3200, 400, 100, }, |