diff options
Diffstat (limited to 'board/toradex/verdin-imx8mp/spl.c')
-rw-r--r-- | board/toradex/verdin-imx8mp/spl.c | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/board/toradex/verdin-imx8mp/spl.c b/board/toradex/verdin-imx8mp/spl.c index 6f1931ffac..b901038e90 100644 --- a/board/toradex/verdin-imx8mp/spl.c +++ b/board/toradex/verdin-imx8mp/spl.c @@ -17,10 +17,11 @@ #include <asm/mach-imx/iomux-v3.h> #include <asm/mach-imx/mxc_i2c.h> #include <asm/arch/ddr.h> +#include <dm/device.h> +#include <dm/uclass.h> #include <power/pmic.h> #include <power/pca9450.h> - -extern struct dram_timing_info dram_timing2; +#include "lpddr4_timing.h" DECLARE_GLOBAL_DATA_PTR; @@ -32,17 +33,32 @@ int spl_board_boot_device(enum boot_device boot_dev_spl) void spl_dram_init(void) { /* - * try configuring for quad die, dual rank aka 8 GB falling back to - * dual die, single rank aka 1 GB (untested), 2 GB or 4 GB if it fails + * Try configuring for dual rank memory falling back to single rank */ - if (ddr_init(&dram_timing)) { - printf("Quad die, dual rank failed, attempting dual die, single rank configuration.\n"); - ddr_init(&dram_timing2); + if (!ddr_init(&dram_timing)) { + printf("DDR configured as dual rank\n"); + return; + } + + lpddr4_single_rank_training_patch(); + if (!ddr_init(&dram_timing)) { + printf("DDR configured as single rank\n"); + return; } + printf("DDR configuration failed\n"); } void spl_board_init(void) { + if (IS_ENABLED(CONFIG_FSL_CAAM)) { + struct udevice *dev; + int ret; + + ret = uclass_get_device_by_driver(UCLASS_MISC, DM_DRIVER_GET(caam_jr), &dev); + if (ret) + printf("Failed to initialize caam_jr: %d\n", ret); + } + /* * Set GIC clock to 500Mhz for OD VDD_SOC. Kernel driver does * not allow to change it. Should set the clock after PMIC |