All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jagan Teki <jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
To: Simon Glass <sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>,
	Philipp Tomsich
	<philipp.tomsich-SN7IsUiht6C/RdPyistoZJqQE7yCjDx5@public.gmane.org>,
	Kever Yang <kever.yang-TNX95d0MmH7DzftRWevZcw@public.gmane.org>,
	YouMin Chen <cym-TNX95d0MmH7DzftRWevZcw@public.gmane.org>,
	u-boot-0aAXYlwwYIKGBzrmiIFOJg@public.gmane.org
Cc: linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	gajjar04akash-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
	linux-amarula-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org,
	Jagan Teki
	<jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>,
	Manivannan Sadhasivam
	<manivannan.sadhasivam-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Subject: [PATCH v3 43/57] ram: rk3399: Add LPPDR4 mr detection
Date: Tue, 16 Jul 2019 17:27:31 +0530	[thread overview]
Message-ID: <20190716115745.12585-44-jagan@amarulasolutions.com> (raw)
In-Reply-To: <20190716115745.12585-1-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>

Like data training in other sdram types, mr detection need
to taken care for lpddr4 with looped rank and associated
channel to make sure the proper configuration held.

Once the mr detection successful for active and configured
rank with channel number, the same can later reused during
actual LPDDR4 initialization.

So, add code to support for it.

Signed-off-by: Jagan Teki <jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
Signed-off-by: YouMin Chen <cym-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
---
 drivers/ram/rockchip/sdram_rk3399.c | 226 ++++++++++++++++++++++++++++
 1 file changed, 226 insertions(+)

diff --git a/drivers/ram/rockchip/sdram_rk3399.c b/drivers/ram/rockchip/sdram_rk3399.c
index da01f08732..623685e3c5 100644
--- a/drivers/ram/rockchip/sdram_rk3399.c
+++ b/drivers/ram/rockchip/sdram_rk3399.c
@@ -1470,6 +1470,7 @@ static void dram_all_config(struct dram_info *dram,
 	clrsetbits_le32(&dram->cru->glb_rst_con, 0x3, 0x3);
 }
 
+#if !defined(CONFIG_RAM_RK3399_LPDDR4)
 static int default_data_training(struct dram_info *dram, u32 channel, u8 rank,
 				 struct rk3399_sdram_params *params)
 {
@@ -1486,6 +1487,7 @@ static int default_data_training(struct dram_info *dram, u32 channel, u8 rank,
 
 	return data_training(dram, channel, params, training_flag);
 }
+#endif
 
 static int switch_to_phy_index1(struct dram_info *dram,
 				const struct rk3399_sdram_params *params)
@@ -1532,6 +1534,226 @@ static int switch_to_phy_index1(struct dram_info *dram,
 	return 0;
 }
 
+#if defined(CONFIG_RAM_RK3399_LPDDR4)
+static u32 get_ddr_stride(struct rk3399_pmusgrf_regs *pmusgrf)
+{
+	return ((readl(&pmusgrf->soc_con4) >> 10) & 0x1F);
+}
+
+static void set_ddr_stride(struct rk3399_pmusgrf_regs *pmusgrf, u32 stride)
+{
+	rk_clrsetreg(&pmusgrf->soc_con4, 0x1f << 10, stride << 10);
+}
+
+static void set_cap_relate_config(const struct chan_info *chan,
+				  struct rk3399_sdram_params *params,
+				  unsigned int channel)
+{
+	u32 *denali_ctl = chan->pctl->denali_ctl;
+	u32 tmp;
+	struct rk3399_msch_timings *noc_timing;
+
+	if (params->base.dramtype == LPDDR3) {
+		tmp = (8 << params->ch[channel].cap_info.bw) /
+			(8 << params->ch[channel].cap_info.dbw);
+
+		/**
+		 * memdata_ratio
+		 * 1 -> 0, 2 -> 1, 4 -> 2
+		 */
+		clrsetbits_le32(&denali_ctl[197], 0x7,
+				(tmp >> 1));
+		clrsetbits_le32(&denali_ctl[198], 0x7 << 8,
+				(tmp >> 1) << 8);
+	}
+
+	noc_timing = &params->ch[channel].noc_timings;
+
+	/*
+	 * noc timing bw relate timing is 32 bit, and real bw is 16bit
+	 * actually noc reg is setting at function dram_all_config
+	 */
+	if (params->ch[channel].cap_info.bw == 16 &&
+	    noc_timing->ddrmode.b.mwrsize == 2) {
+		if (noc_timing->ddrmode.b.burstsize)
+			noc_timing->ddrmode.b.burstsize -= 1;
+		noc_timing->ddrmode.b.mwrsize -= 1;
+		noc_timing->ddrtimingc0.b.burstpenalty *= 2;
+		noc_timing->ddrtimingc0.b.wrtomwr *= 2;
+	}
+}
+
+static u32 calculate_ddrconfig(struct rk3399_sdram_params *params, u32 channel)
+{
+	unsigned int cs0_row = params->ch[channel].cap_info.cs0_row;
+	unsigned int col = params->ch[channel].cap_info.col;
+	unsigned int bw = params->ch[channel].cap_info.bw;
+	u16  ddr_cfg_2_rbc[] = {
+		/*
+		 * [6]	  highest bit col
+		 * [5:3]  max row(14+n)
+		 * [2]    insertion row
+		 * [1:0]  col(9+n),col, data bus 32bit
+		 *
+		 * highbitcol, max_row, insertion_row,  col
+		 */
+		((0 << 6) | (2 << 3) | (0 << 2) | 0), /* 0 */
+		((0 << 6) | (2 << 3) | (0 << 2) | 1), /* 1 */
+		((0 << 6) | (1 << 3) | (0 << 2) | 2), /* 2 */
+		((0 << 6) | (0 << 3) | (0 << 2) | 3), /* 3 */
+		((0 << 6) | (2 << 3) | (1 << 2) | 1), /* 4 */
+		((0 << 6) | (1 << 3) | (1 << 2) | 2), /* 5 */
+		((1 << 6) | (0 << 3) | (0 << 2) | 2), /* 6 */
+		((1 << 6) | (1 << 3) | (0 << 2) | 2), /* 7 */
+	};
+	u32 i;
+
+	col -= (bw == 2) ? 0 : 1;
+	col -= 9;
+
+	for (i = 0; i < 4; i++) {
+		if ((col == (ddr_cfg_2_rbc[i] & 0x3)) &&
+		    (cs0_row <= (((ddr_cfg_2_rbc[i] >> 3) & 0x7) + 14)))
+			break;
+	}
+
+	if (i >= 4)
+		i = -EINVAL;
+
+	return i;
+}
+
+/**
+ * read mr_num mode register
+ * rank = 1: cs0
+ * rank = 2: cs1
+ */
+static int read_mr(struct rk3399_ddr_pctl_regs *ddr_pctl_regs, u32 rank,
+		   u32 mr_num, u32 *buf)
+{
+	s32 timeout = 100;
+
+	writel(((1 << 16) | (((rank == 2) ? 1 : 0) << 8) | mr_num) << 8,
+	       &ddr_pctl_regs->denali_ctl[118]);
+
+	while (0 == (readl(&ddr_pctl_regs->denali_ctl[203]) &
+			((1 << 21) | (1 << 12)))) {
+		udelay(1);
+
+		if (timeout <= 0) {
+			printf("%s: pctl timeout!\n", __func__);
+			return -ETIMEDOUT;
+		}
+
+		timeout--;
+	}
+
+	if (!(readl(&ddr_pctl_regs->denali_ctl[203]) & (1 << 12))) {
+		*buf = readl(&ddr_pctl_regs->denali_ctl[119]) & 0xFF;
+	} else {
+		printf("%s: read mr failed with 0x%x status\n", __func__,
+		       readl(&ddr_pctl_regs->denali_ctl[17]) & 0x3);
+		*buf = 0;
+	}
+
+	setbits_le32(&ddr_pctl_regs->denali_ctl[205], (1 << 21) | (1 << 12));
+
+	return 0;
+}
+
+static int lpddr4_mr_detect(struct dram_info *dram, u32 channel, u8 rank,
+			    struct rk3399_sdram_params *params)
+{
+	u64 cs0_cap;
+	u32 stride;
+	u32 cs = 0, col = 0, bk = 0, bw = 0, row_3_4 = 0;
+	u32 cs0_row = 0, cs1_row = 0, ddrconfig = 0;
+	u32 mr5, mr12, mr14;
+	struct chan_info *chan = &dram->chan[channel];
+	struct rk3399_ddr_pctl_regs *ddr_pctl_regs = chan->pctl;
+	void __iomem *addr = NULL;
+	int ret = 0;
+	u32 val;
+
+	stride = get_ddr_stride(dram->pmusgrf);
+
+	if (params->ch[channel].cap_info.col == 0) {
+		ret = -EPERM;
+		goto end;
+	}
+
+	cs = params->ch[channel].cap_info.rank;
+	col = params->ch[channel].cap_info.col;
+	bk = params->ch[channel].cap_info.bk;
+	bw = params->ch[channel].cap_info.bw;
+	row_3_4 = params->ch[channel].cap_info.row_3_4;
+	cs0_row = params->ch[channel].cap_info.cs0_row;
+	cs1_row = params->ch[channel].cap_info.cs1_row;
+	ddrconfig = params->ch[channel].cap_info.ddrconfig;
+
+	/* 2GB */
+	params->ch[channel].cap_info.rank = 2;
+	params->ch[channel].cap_info.col = 10;
+	params->ch[channel].cap_info.bk = 3;
+	params->ch[channel].cap_info.bw = 2;
+	params->ch[channel].cap_info.row_3_4 = 0;
+	params->ch[channel].cap_info.cs0_row = 15;
+	params->ch[channel].cap_info.cs1_row = 15;
+	params->ch[channel].cap_info.ddrconfig = 1;
+
+	set_memory_map(chan, channel, params);
+	params->ch[channel].cap_info.ddrconfig =
+			calculate_ddrconfig(params, channel);
+	set_ddrconfig(chan, params, channel,
+		      params->ch[channel].cap_info.ddrconfig);
+	set_cap_relate_config(chan, params, channel);
+
+	cs0_cap = (1 << (params->ch[channel].cap_info.bw
+			+ params->ch[channel].cap_info.col
+			+ params->ch[channel].cap_info.bk
+			+ params->ch[channel].cap_info.cs0_row));
+
+	if (params->ch[channel].cap_info.row_3_4)
+		cs0_cap = cs0_cap * 3 / 4;
+
+	if (channel == 0)
+		set_ddr_stride(dram->pmusgrf, 0x17);
+	else
+		set_ddr_stride(dram->pmusgrf, 0x18);
+
+	/* read and write data to DRAM, avoid be optimized by compiler. */
+	if (rank == 1)
+		addr = (void __iomem *)0x100;
+	else if (rank == 2)
+		addr = (void __iomem *)(cs0_cap + 0x100);
+
+	val = readl(addr);
+	writel(val + 1, addr);
+
+	read_mr(ddr_pctl_regs, rank, 5, &mr5);
+	read_mr(ddr_pctl_regs, rank, 12, &mr12);
+	read_mr(ddr_pctl_regs, rank, 14, &mr14);
+
+	if (mr5 == 0 || mr12 != 0x4d || mr14 != 0x4d) {
+		ret = -EINVAL;
+		goto end;
+	}
+end:
+	params->ch[channel].cap_info.rank = cs;
+	params->ch[channel].cap_info.col = col;
+	params->ch[channel].cap_info.bk = bk;
+	params->ch[channel].cap_info.bw = bw;
+	params->ch[channel].cap_info.row_3_4 = row_3_4;
+	params->ch[channel].cap_info.cs0_row = cs0_row;
+	params->ch[channel].cap_info.cs1_row = cs1_row;
+	params->ch[channel].cap_info.ddrconfig = ddrconfig;
+
+	set_ddr_stride(dram->pmusgrf, stride);
+
+	return ret;
+}
+#endif /* CONFIG_RAM_RK3399_LPDDR4 */
+
 static unsigned char calculate_stride(struct rk3399_sdram_params *params)
 {
 	unsigned int stride = params->base.stride;
@@ -1762,7 +1984,11 @@ static int conv_of_platdata(struct udevice *dev)
 #endif
 
 static const struct sdram_rk3399_ops rk3399_ops = {
+#if !defined(CONFIG_RAM_RK3399_LPDDR4)
 	.data_training = default_data_training,
+#else
+	.data_training = lpddr4_mr_detect,
+#endif
 };
 
 static int rk3399_dmc_init(struct udevice *dev)
-- 
2.18.0.321.gffc6fa0e3

WARNING: multiple messages have this Message-ID (diff)
From: Jagan Teki <jagan@amarulasolutions.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v3 43/57] ram: rk3399: Add LPPDR4 mr detection
Date: Tue, 16 Jul 2019 17:27:31 +0530	[thread overview]
Message-ID: <20190716115745.12585-44-jagan@amarulasolutions.com> (raw)
In-Reply-To: <20190716115745.12585-1-jagan@amarulasolutions.com>

Like data training in other sdram types, mr detection need
to taken care for lpddr4 with looped rank and associated
channel to make sure the proper configuration held.

Once the mr detection successful for active and configured
rank with channel number, the same can later reused during
actual LPDDR4 initialization.

So, add code to support for it.

Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
Signed-off-by: YouMin Chen <cym@rock-chips.com>
---
 drivers/ram/rockchip/sdram_rk3399.c | 226 ++++++++++++++++++++++++++++
 1 file changed, 226 insertions(+)

diff --git a/drivers/ram/rockchip/sdram_rk3399.c b/drivers/ram/rockchip/sdram_rk3399.c
index da01f08732..623685e3c5 100644
--- a/drivers/ram/rockchip/sdram_rk3399.c
+++ b/drivers/ram/rockchip/sdram_rk3399.c
@@ -1470,6 +1470,7 @@ static void dram_all_config(struct dram_info *dram,
 	clrsetbits_le32(&dram->cru->glb_rst_con, 0x3, 0x3);
 }
 
+#if !defined(CONFIG_RAM_RK3399_LPDDR4)
 static int default_data_training(struct dram_info *dram, u32 channel, u8 rank,
 				 struct rk3399_sdram_params *params)
 {
@@ -1486,6 +1487,7 @@ static int default_data_training(struct dram_info *dram, u32 channel, u8 rank,
 
 	return data_training(dram, channel, params, training_flag);
 }
+#endif
 
 static int switch_to_phy_index1(struct dram_info *dram,
 				const struct rk3399_sdram_params *params)
@@ -1532,6 +1534,226 @@ static int switch_to_phy_index1(struct dram_info *dram,
 	return 0;
 }
 
+#if defined(CONFIG_RAM_RK3399_LPDDR4)
+static u32 get_ddr_stride(struct rk3399_pmusgrf_regs *pmusgrf)
+{
+	return ((readl(&pmusgrf->soc_con4) >> 10) & 0x1F);
+}
+
+static void set_ddr_stride(struct rk3399_pmusgrf_regs *pmusgrf, u32 stride)
+{
+	rk_clrsetreg(&pmusgrf->soc_con4, 0x1f << 10, stride << 10);
+}
+
+static void set_cap_relate_config(const struct chan_info *chan,
+				  struct rk3399_sdram_params *params,
+				  unsigned int channel)
+{
+	u32 *denali_ctl = chan->pctl->denali_ctl;
+	u32 tmp;
+	struct rk3399_msch_timings *noc_timing;
+
+	if (params->base.dramtype == LPDDR3) {
+		tmp = (8 << params->ch[channel].cap_info.bw) /
+			(8 << params->ch[channel].cap_info.dbw);
+
+		/**
+		 * memdata_ratio
+		 * 1 -> 0, 2 -> 1, 4 -> 2
+		 */
+		clrsetbits_le32(&denali_ctl[197], 0x7,
+				(tmp >> 1));
+		clrsetbits_le32(&denali_ctl[198], 0x7 << 8,
+				(tmp >> 1) << 8);
+	}
+
+	noc_timing = &params->ch[channel].noc_timings;
+
+	/*
+	 * noc timing bw relate timing is 32 bit, and real bw is 16bit
+	 * actually noc reg is setting at function dram_all_config
+	 */
+	if (params->ch[channel].cap_info.bw == 16 &&
+	    noc_timing->ddrmode.b.mwrsize == 2) {
+		if (noc_timing->ddrmode.b.burstsize)
+			noc_timing->ddrmode.b.burstsize -= 1;
+		noc_timing->ddrmode.b.mwrsize -= 1;
+		noc_timing->ddrtimingc0.b.burstpenalty *= 2;
+		noc_timing->ddrtimingc0.b.wrtomwr *= 2;
+	}
+}
+
+static u32 calculate_ddrconfig(struct rk3399_sdram_params *params, u32 channel)
+{
+	unsigned int cs0_row = params->ch[channel].cap_info.cs0_row;
+	unsigned int col = params->ch[channel].cap_info.col;
+	unsigned int bw = params->ch[channel].cap_info.bw;
+	u16  ddr_cfg_2_rbc[] = {
+		/*
+		 * [6]	  highest bit col
+		 * [5:3]  max row(14+n)
+		 * [2]    insertion row
+		 * [1:0]  col(9+n),col, data bus 32bit
+		 *
+		 * highbitcol, max_row, insertion_row,  col
+		 */
+		((0 << 6) | (2 << 3) | (0 << 2) | 0), /* 0 */
+		((0 << 6) | (2 << 3) | (0 << 2) | 1), /* 1 */
+		((0 << 6) | (1 << 3) | (0 << 2) | 2), /* 2 */
+		((0 << 6) | (0 << 3) | (0 << 2) | 3), /* 3 */
+		((0 << 6) | (2 << 3) | (1 << 2) | 1), /* 4 */
+		((0 << 6) | (1 << 3) | (1 << 2) | 2), /* 5 */
+		((1 << 6) | (0 << 3) | (0 << 2) | 2), /* 6 */
+		((1 << 6) | (1 << 3) | (0 << 2) | 2), /* 7 */
+	};
+	u32 i;
+
+	col -= (bw == 2) ? 0 : 1;
+	col -= 9;
+
+	for (i = 0; i < 4; i++) {
+		if ((col == (ddr_cfg_2_rbc[i] & 0x3)) &&
+		    (cs0_row <= (((ddr_cfg_2_rbc[i] >> 3) & 0x7) + 14)))
+			break;
+	}
+
+	if (i >= 4)
+		i = -EINVAL;
+
+	return i;
+}
+
+/**
+ * read mr_num mode register
+ * rank = 1: cs0
+ * rank = 2: cs1
+ */
+static int read_mr(struct rk3399_ddr_pctl_regs *ddr_pctl_regs, u32 rank,
+		   u32 mr_num, u32 *buf)
+{
+	s32 timeout = 100;
+
+	writel(((1 << 16) | (((rank == 2) ? 1 : 0) << 8) | mr_num) << 8,
+	       &ddr_pctl_regs->denali_ctl[118]);
+
+	while (0 == (readl(&ddr_pctl_regs->denali_ctl[203]) &
+			((1 << 21) | (1 << 12)))) {
+		udelay(1);
+
+		if (timeout <= 0) {
+			printf("%s: pctl timeout!\n", __func__);
+			return -ETIMEDOUT;
+		}
+
+		timeout--;
+	}
+
+	if (!(readl(&ddr_pctl_regs->denali_ctl[203]) & (1 << 12))) {
+		*buf = readl(&ddr_pctl_regs->denali_ctl[119]) & 0xFF;
+	} else {
+		printf("%s: read mr failed with 0x%x status\n", __func__,
+		       readl(&ddr_pctl_regs->denali_ctl[17]) & 0x3);
+		*buf = 0;
+	}
+
+	setbits_le32(&ddr_pctl_regs->denali_ctl[205], (1 << 21) | (1 << 12));
+
+	return 0;
+}
+
+static int lpddr4_mr_detect(struct dram_info *dram, u32 channel, u8 rank,
+			    struct rk3399_sdram_params *params)
+{
+	u64 cs0_cap;
+	u32 stride;
+	u32 cs = 0, col = 0, bk = 0, bw = 0, row_3_4 = 0;
+	u32 cs0_row = 0, cs1_row = 0, ddrconfig = 0;
+	u32 mr5, mr12, mr14;
+	struct chan_info *chan = &dram->chan[channel];
+	struct rk3399_ddr_pctl_regs *ddr_pctl_regs = chan->pctl;
+	void __iomem *addr = NULL;
+	int ret = 0;
+	u32 val;
+
+	stride = get_ddr_stride(dram->pmusgrf);
+
+	if (params->ch[channel].cap_info.col == 0) {
+		ret = -EPERM;
+		goto end;
+	}
+
+	cs = params->ch[channel].cap_info.rank;
+	col = params->ch[channel].cap_info.col;
+	bk = params->ch[channel].cap_info.bk;
+	bw = params->ch[channel].cap_info.bw;
+	row_3_4 = params->ch[channel].cap_info.row_3_4;
+	cs0_row = params->ch[channel].cap_info.cs0_row;
+	cs1_row = params->ch[channel].cap_info.cs1_row;
+	ddrconfig = params->ch[channel].cap_info.ddrconfig;
+
+	/* 2GB */
+	params->ch[channel].cap_info.rank = 2;
+	params->ch[channel].cap_info.col = 10;
+	params->ch[channel].cap_info.bk = 3;
+	params->ch[channel].cap_info.bw = 2;
+	params->ch[channel].cap_info.row_3_4 = 0;
+	params->ch[channel].cap_info.cs0_row = 15;
+	params->ch[channel].cap_info.cs1_row = 15;
+	params->ch[channel].cap_info.ddrconfig = 1;
+
+	set_memory_map(chan, channel, params);
+	params->ch[channel].cap_info.ddrconfig =
+			calculate_ddrconfig(params, channel);
+	set_ddrconfig(chan, params, channel,
+		      params->ch[channel].cap_info.ddrconfig);
+	set_cap_relate_config(chan, params, channel);
+
+	cs0_cap = (1 << (params->ch[channel].cap_info.bw
+			+ params->ch[channel].cap_info.col
+			+ params->ch[channel].cap_info.bk
+			+ params->ch[channel].cap_info.cs0_row));
+
+	if (params->ch[channel].cap_info.row_3_4)
+		cs0_cap = cs0_cap * 3 / 4;
+
+	if (channel == 0)
+		set_ddr_stride(dram->pmusgrf, 0x17);
+	else
+		set_ddr_stride(dram->pmusgrf, 0x18);
+
+	/* read and write data to DRAM, avoid be optimized by compiler. */
+	if (rank == 1)
+		addr = (void __iomem *)0x100;
+	else if (rank == 2)
+		addr = (void __iomem *)(cs0_cap + 0x100);
+
+	val = readl(addr);
+	writel(val + 1, addr);
+
+	read_mr(ddr_pctl_regs, rank, 5, &mr5);
+	read_mr(ddr_pctl_regs, rank, 12, &mr12);
+	read_mr(ddr_pctl_regs, rank, 14, &mr14);
+
+	if (mr5 == 0 || mr12 != 0x4d || mr14 != 0x4d) {
+		ret = -EINVAL;
+		goto end;
+	}
+end:
+	params->ch[channel].cap_info.rank = cs;
+	params->ch[channel].cap_info.col = col;
+	params->ch[channel].cap_info.bk = bk;
+	params->ch[channel].cap_info.bw = bw;
+	params->ch[channel].cap_info.row_3_4 = row_3_4;
+	params->ch[channel].cap_info.cs0_row = cs0_row;
+	params->ch[channel].cap_info.cs1_row = cs1_row;
+	params->ch[channel].cap_info.ddrconfig = ddrconfig;
+
+	set_ddr_stride(dram->pmusgrf, stride);
+
+	return ret;
+}
+#endif /* CONFIG_RAM_RK3399_LPDDR4 */
+
 static unsigned char calculate_stride(struct rk3399_sdram_params *params)
 {
 	unsigned int stride = params->base.stride;
@@ -1762,7 +1984,11 @@ static int conv_of_platdata(struct udevice *dev)
 #endif
 
 static const struct sdram_rk3399_ops rk3399_ops = {
+#if !defined(CONFIG_RAM_RK3399_LPDDR4)
 	.data_training = default_data_training,
+#else
+	.data_training = lpddr4_mr_detect,
+#endif
 };
 
 static int rk3399_dmc_init(struct udevice *dev)
-- 
2.18.0.321.gffc6fa0e3

  parent reply	other threads:[~2019-07-16 11:57 UTC|newest]

Thread overview: 243+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-16 11:56 [PATCH v3 00/57] ram: rk3399: Add LPDDR4 support Jagan Teki
2019-07-16 11:56 ` [U-Boot] " Jagan Teki
2019-07-16 11:56 ` [PATCH v3 01/57] ram: rk3399: Add ddrtype enc macro Jagan Teki
2019-07-16 11:56   ` [U-Boot] " Jagan Teki
2019-07-16 12:57   ` Kever Yang
2019-07-16 12:57     ` [U-Boot] " Kever Yang
2019-07-16 11:56 ` [PATCH v3 05/57] ram: rk3399: Add rank " Jagan Teki
2019-07-16 11:56   ` [U-Boot] " Jagan Teki
     [not found]   ` <20190716115745.12585-6-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 12:58     ` Kever Yang
2019-07-16 12:58       ` [U-Boot] " Kever Yang
2019-07-16 11:57 ` [PATCH v3 12/57] ram: rk3399: Rename sys_reg with sys_reg2 Jagan Teki
2019-07-16 11:57   ` [U-Boot] " Jagan Teki
     [not found]   ` <20190716115745.12585-13-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:03     ` Kever Yang
2019-07-16 13:03       ` [U-Boot] " Kever Yang
     [not found] ` <20190716115745.12585-1-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 11:56   ` [PATCH v3 02/57] ram: rk3399: Add channel number encoder macro Jagan Teki
2019-07-16 11:56     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-3-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 12:58       ` Kever Yang
2019-07-16 12:58         ` [U-Boot] " Kever Yang
2019-07-16 11:56   ` [PATCH v3 03/57] ram: rk3399: Add row_3_4 enc macro Jagan Teki
2019-07-16 11:56     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-4-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 12:58       ` Kever Yang
2019-07-16 12:58         ` [U-Boot] " Kever Yang
2019-07-16 11:56   ` [PATCH v3 04/57] ram: rk3399: Add chipinfo macro Jagan Teki
2019-07-16 11:56     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-5-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 12:58       ` Kever Yang
2019-07-16 12:58         ` [U-Boot] " Kever Yang
2019-07-16 11:56   ` [PATCH v3 06/57] ram: rk3399: Add column enc macro Jagan Teki
2019-07-16 11:56     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-7-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 12:59       ` Kever Yang
2019-07-16 12:59         ` [U-Boot] " Kever Yang
2019-07-16 11:56   ` [PATCH v3 07/57] ram: rk3399: Add bk " Jagan Teki
2019-07-16 11:56     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-8-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:00       ` Kever Yang
2019-07-16 13:00         ` [U-Boot] " Kever Yang
2019-07-16 11:56   ` [PATCH v3 08/57] ram: rk3399: Add dbw " Jagan Teki
2019-07-16 11:56     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-9-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:00       ` Kever Yang
2019-07-16 13:00         ` [U-Boot] " Kever Yang
2019-07-16 11:56   ` [PATCH v3 09/57] ram: rk3399: Add cs0_rw macro Jagan Teki
2019-07-16 11:56     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-10-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:00       ` Kever Yang
2019-07-16 13:00         ` [U-Boot] " Kever Yang
2019-07-16 11:56   ` [PATCH v3 10/57] ram: rk3399: Add cs1_rw macro Jagan Teki
2019-07-16 11:56     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-11-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:03       ` Kever Yang
2019-07-16 13:03         ` [U-Boot] " Kever Yang
2019-07-16 11:56   ` [PATCH v3 11/57] ram: rk3399: Add bw enc macro Jagan Teki
2019-07-16 11:56     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-12-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:03       ` Kever Yang
2019-07-16 13:03         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 13/57] ram: rk3399: Update cs0_row to use sys_reg3 Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-14-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:03       ` Kever Yang
2019-07-16 13:03         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 14/57] ram: rk3399: Update cs1_row " Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-15-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:03       ` Kever Yang
2019-07-16 13:03         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 15/57] ram: rk3399: Add cs1_col enc macro Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-16-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:02       ` Kever Yang
2019-07-16 13:02         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 16/57] ram: rk3399: Add ddr version " Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-17-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:02       ` Kever Yang
2019-07-16 13:02         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 17/57] ram: rk3399: Add ddrtimingC0 Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-18-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:02       ` Kever Yang
2019-07-16 13:02         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 18/57] ram: rk3399: Add DdrMode Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-19-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:02       ` Kever Yang
2019-07-16 13:02         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 19/57] ram: rk3399: Configure phy IO in ds odt Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-20-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:04       ` Kever Yang
2019-07-16 13:04         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 20/57] ram: rockchip: Kconfig: Add RK3399 LPDDR4 entry Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-21-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:10       ` Kever Yang
2019-07-16 13:10         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 21/57] ram: rk3399: Add lpddr4 rank mask for ca training Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-22-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:11       ` Kever Yang
2019-07-16 13:11         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 22/57] ram: rk3399: Add lpddr4 rank mask for wdql training Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-23-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:11       ` Kever Yang
2019-07-16 13:11         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 23/57] ram: rk3399: Move mode_sel assignment Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-24-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:12       ` Kever Yang
2019-07-16 13:12         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 24/57] ram: rk3399: Don't wait for PLL lock in lpddr4 Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-25-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:12       ` Kever Yang
2019-07-16 13:12         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 25/57] ram: rk3399: Avoid two channel ZQ Cal Start at the same time Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-26-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:12       ` Kever Yang
2019-07-16 13:12         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 26/57] ram: rk3399: Configure PHY_898, PHY_919 for lpddr4 Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-27-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:12       ` Kever Yang
2019-07-16 13:12         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 27/57] ram: rk3399: Configure BOOSTP_EN, BOOSTN_EN " Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-28-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:12       ` Kever Yang
2019-07-16 13:12         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 28/57] ram: rk3399: Configure SLEWP_EN, SLEWN_EN " Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-29-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:13       ` Kever Yang
2019-07-16 13:13         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 29/57] ram: rk3399: Configure PHY RX_CM_INPUT " Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-30-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:13       ` Kever Yang
2019-07-16 13:13         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 30/57] ram: rk3399: Map chipselect " Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-31-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:13       ` Kever Yang
2019-07-16 13:13         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 31/57] ram: rk3399: Configure tsel write ca " Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-32-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:14       ` Kever Yang
2019-07-16 13:14         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 32/57] ram: rk3399: Don't disable dfi dram clk for lpddr4, rank 1 Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-33-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:14       ` Kever Yang
2019-07-16 13:14         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 33/57] ram: rk3399: Add IO settings Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-34-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:14       ` Kever Yang
2019-07-16 13:14         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 34/57] ram: sdram: Configure lpddr4 tsel rd, wr based on " Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-35-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:15       ` Kever Yang
2019-07-16 13:15         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 35/57] ram: rk3399: Add tsel control clock drive Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-36-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:15       ` Kever Yang
2019-07-16 13:15         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 36/57] ram: rk3399: Configure soc odt support Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-37-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:15       ` Kever Yang
2019-07-16 13:15         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 37/57] ram: rk3399: Get lpddr4 tsel_rd_en from io settings Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-38-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:15       ` Kever Yang
2019-07-16 13:15         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 38/57] ram: rk3399: Update lpddr4 vref based on " Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-39-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:16       ` Kever Yang
2019-07-16 13:16         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 39/57] ram: rk3399: Update lpddr4 mode_sel " Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-40-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:16       ` Kever Yang
2019-07-16 13:16         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 40/57] ram: rk3399: Update lpddr4 vref_mode_ac Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-41-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:17       ` Kever Yang
2019-07-16 13:17         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 41/57] ram: rk3399: Simplify data training first argument Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-42-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:17       ` Kever Yang
2019-07-16 13:17         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 42/57] ram: rk3399: Handle data training via ops Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-43-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:18       ` Kever Yang
2019-07-16 13:18         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` Jagan Teki [this message]
2019-07-16 11:57     ` [U-Boot] [PATCH v3 43/57] ram: rk3399: Add LPPDR4 mr detection Jagan Teki
     [not found]     ` <20190716115745.12585-44-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:18       ` Kever Yang
2019-07-16 13:18         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 44/57] arm: include: rockchip: Add rk3399 pmu file Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-45-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:18       ` Kever Yang
2019-07-16 13:18         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 45/57] rockchip: rk3399: syscon: Add pmu support Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-46-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:19       ` Kever Yang
2019-07-16 13:19         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 46/57] rockchip: dts: rk3399: Add u-boot, dm-pre-reloc for pmu Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-47-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:19       ` Kever Yang
2019-07-16 13:19         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 47/57] clk: rockchip: rk3399: Set 50MHz ddr clock Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-48-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:19       ` Kever Yang
2019-07-16 13:19         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 48/57] clk: rockchip: rk3399: Set 400MHz " Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-49-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:19       ` Kever Yang
2019-07-16 13:19         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 49/57] ram: rk3399: Add LPPDDR4-400 timings inc Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-50-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:20       ` Kever Yang
2019-07-16 13:20         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 50/57] ram: rk3399: Add LPPDDR4-800 " Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-51-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:20       ` Kever Yang
2019-07-16 13:20         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 51/57] ram: rk3399: Add set_rate sdram rk3399 ops Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-52-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:20       ` Kever Yang
2019-07-16 13:20         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 52/57] ram: rk3399: Add lpddr4 set rate support Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-53-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:21       ` Kever Yang
2019-07-16 13:21         ` [U-Boot] " Kever Yang
2019-07-20  3:13     ` Kever Yang
2019-07-16 11:57   ` [PATCH v3 53/57] configs: rockpro64: Enable LPDDR4 support Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-54-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:21       ` Kever Yang
2019-07-16 13:21         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 54/57] configs: rock-pi-4: " Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-55-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:21       ` Kever Yang
2019-07-16 13:21         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 55/57] rockchip: dts: rk3399: Add LPDDR4-100 timings Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-56-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:21       ` Kever Yang
2019-07-16 13:21         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 56/57] rockchip: dts: rk3399: rockpro64: Use LPDDR4-100 dtsi Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-57-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:22       ` Kever Yang
2019-07-16 13:22         ` [U-Boot] " Kever Yang
2019-07-16 11:57   ` [PATCH v3 57/57] rockchip: dts: rk3399: rock-pi-4: " Jagan Teki
2019-07-16 11:57     ` [U-Boot] " Jagan Teki
     [not found]     ` <20190716115745.12585-58-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org>
2019-07-16 13:22       ` Kever Yang
2019-07-16 13:22         ` [U-Boot] " Kever Yang
2019-07-16 13:10   ` [PATCH v3 00/57] ram: rk3399: Add LPDDR4 support Kever Yang
2019-07-16 13:10     ` [U-Boot] " Kever Yang
2019-10-06  1:05 ` Qu Wenruo
2019-10-06  1:05   ` [U-Boot] " Qu Wenruo
     [not found]   ` <310a4823-ce36-6152-2886-2bb6fcc0e328-KK0ffGbhmjU@public.gmane.org>
2019-10-06  1:28     ` Manivannan Sadhasivam
2019-10-06  1:28       ` Manivannan Sadhasivam
2019-10-06  1:30   ` Qu Wenruo
2019-10-06  1:30     ` [U-Boot] " Qu Wenruo
2019-10-08  0:31     ` Kever Yang
2019-10-08  0:31       ` [U-Boot] " Kever Yang
2019-10-12 10:37       ` Qu Wenruo
2019-10-12 10:37         ` [U-Boot] " Qu Wenruo

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=20190716115745.12585-44-jagan@amarulasolutions.com \
    --to=jagan-dyjbcgdgk7pe9whmmfpqlfatqe2ktcn/@public.gmane.org \
    --cc=cym-TNX95d0MmH7DzftRWevZcw@public.gmane.org \
    --cc=gajjar04akash-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=kever.yang-TNX95d0MmH7DzftRWevZcw@public.gmane.org \
    --cc=linux-amarula-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org \
    --cc=linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=manivannan.sadhasivam-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
    --cc=philipp.tomsich-SN7IsUiht6C/RdPyistoZJqQE7yCjDx5@public.gmane.org \
    --cc=sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
    --cc=u-boot-0aAXYlwwYIKGBzrmiIFOJg@public.gmane.org \
    /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.