1 // SPDX-License-Identifier: BSD-2-Clause
2 /*
3  * Copyright 2017-2021 NXP
4  *
5  * Peng Fan <peng.fan@nxp.com>
6  */
7 
8 #include <arm.h>
9 #include <io.h>
10 #include <imx.h>
11 #include <mm/core_mmu.h>
12 #include <mm/core_memprot.h>
13 #include <mmdc.h>
14 #include <platform_config.h>
15 #include <stdint.h>
16 
imx_get_ddr_type(void)17 int imx_get_ddr_type(void)
18 {
19 	uint32_t val = 0;
20 	uint32_t off = 0;
21 	bool is_mx7 = soc_is_imx7ds();
22 	vaddr_t mmdc_base = 0;
23 
24 	if (is_mx7)
25 		off = DDRC_MSTR;
26 	else
27 		off = MMDC_MDMISC;
28 
29 	mmdc_base = core_mmu_get_va(MMDC_P0_BASE, MEM_AREA_IO_SEC,
30 				    off + sizeof(uint32_t));
31 	val = io_read32(mmdc_base + off);
32 
33 	if (is_mx7) {
34 		if (val & MSTR_DDR3)
35 			return IMX_DDR_TYPE_DDR3;
36 		else if (val & MSTR_LPDDR2)
37 			return IMX_DDR_TYPE_LPDDR2;
38 		else if (val & MSTR_LPDDR3)
39 			return IMX_DDR_TYPE_LPDDR3;
40 		else
41 			return -1;
42 	}
43 
44 	return (val & MDMISC_DDR_TYPE_MASK) >> MDMISC_DDR_TYPE_SHIFT;
45 }
46