summaryrefslogtreecommitdiff
path: root/arch/arm/mach-imx
diff options
context:
space:
mode:
authorJuan Gutierrez <juan.gutierrez@nxp.com>2017-01-31 10:32:19 -0600
committerJason Liu <jason.hui.liu@nxp.com>2019-02-12 10:25:47 +0800
commit39564133ecb45392f00a7c4849aa81f2f0261095 (patch)
treecd79c6a5806bd24038da1ebc88e6f7315ce79944 /arch/arm/mach-imx
parentdda4f222934be33807b84b0f4db7897f231cb7a6 (diff)
MXSCM-243-1 arm: imx: get the mmdc 2ch-mode api for lpddr2
To configure the suspend settings for lpddr2 systems is necessary to know if mmdc is operating on 1ch-mode or 2ch-mode. Here, the imx_get_lpddr2_2ch_mode api is introduced to get this info when needed and decide accordingly. Signed-off-by: Juan Gutierrez <juan.gutierrez@nxp.com>
Diffstat (limited to 'arch/arm/mach-imx')
-rw-r--r--arch/arm/mach-imx/common.h2
-rw-r--r--arch/arm/mach-imx/mmdc.c11
-rw-r--r--arch/arm/mach-imx/mxc.h3
3 files changed, 16 insertions, 0 deletions
diff --git a/arch/arm/mach-imx/common.h b/arch/arm/mach-imx/common.h
index 224273315fda..154cd0b286e8 100644
--- a/arch/arm/mach-imx/common.h
+++ b/arch/arm/mach-imx/common.h
@@ -169,8 +169,10 @@ void imx6_enet_mac_init(const char *enet_compat, const char *ocotp_compat);
int imx7ulp_set_lpm(enum imx7ulp_cpu_pwr_mode mode);
#ifdef CONFIG_HAVE_IMX_MMDC
int imx_mmdc_get_ddr_type(void);
+int imx_mmdc_get_lpddr2_2ch_mode(void);
#else
static inline int imx_mmdc_get_ddr_type(void) { return 0; }
+static inline int imx_mmdc_get_lpddr2_2ch_mode(void) { return 0; }
#endif
#ifdef CONFIG_HAVE_IMX_DDRC
int imx_ddrc_get_ddr_type(void);
diff --git a/arch/arm/mach-imx/mmdc.c b/arch/arm/mach-imx/mmdc.c
index 78262899a590..e73a6d56758d 100644
--- a/arch/arm/mach-imx/mmdc.c
+++ b/arch/arm/mach-imx/mmdc.c
@@ -31,6 +31,8 @@
#define MMDC_MDMISC 0x18
#define BM_MMDC_MDMISC_DDR_TYPE 0x18
#define BP_MMDC_MDMISC_DDR_TYPE 0x3
+#define BM_MMDC_MDMISC_LPDDR2_2CH 0x4
+#define BP_MMDC_MDMISC_LPDDR2_2CH 0x2
#define TOTAL_CYCLES 0x0
#define BUSY_CYCLES 0x1
@@ -64,6 +66,7 @@
#define to_mmdc_pmu(p) container_of(p, struct mmdc_pmu, pmu)
static int ddr_type;
+static int lpddr2_2ch_mode;
struct fsl_mmdc_devtype_data {
unsigned int flags;
@@ -557,6 +560,9 @@ static int imx_mmdc_probe(struct platform_device *pdev)
val = readl_relaxed(reg);
ddr_type = (val & BM_MMDC_MDMISC_DDR_TYPE) >>
BP_MMDC_MDMISC_DDR_TYPE;
+ /* Get lpddr2 2ch-mode */
+ lpddr2_2ch_mode = (val & BM_MMDC_MDMISC_LPDDR2_2CH) >>
+ BP_MMDC_MDMISC_LPDDR2_2CH;
reg = mmdc_base + MMDC_MAPSR;
@@ -583,6 +589,11 @@ int imx_mmdc_get_ddr_type(void)
return ddr_type;
}
+int imx_mmdc_get_lpddr2_2ch_mode(void)
+{
+ return lpddr2_2ch_mode;
+}
+
static struct platform_driver imx_mmdc_driver = {
.driver = {
.name = "imx-mmdc",
diff --git a/arch/arm/mach-imx/mxc.h b/arch/arm/mach-imx/mxc.h
index 5dcda87d9308..f162e82d3ca1 100644
--- a/arch/arm/mach-imx/mxc.h
+++ b/arch/arm/mach-imx/mxc.h
@@ -49,6 +49,9 @@
#define IMX_DDR_TYPE_LPDDR3 2
#define IMX_MMDC_DDR_TYPE_LPDDR3 3
+#define IMX_LPDDR2_1CH_MODE 0
+#define IMX_LPDDR2_2CH_MODE 1
+
#ifndef __ASSEMBLY__
extern unsigned int __mxc_cpu_type;