xref: /rk3399_rockchip-uboot/arch/arm/mach-uniphier/dram/cmd_ddrmphy.c (revision aac477eca88dd81b18b48573ababee5112d571f3)
1c9552895SMasahiro Yamada /*
2*513cfaccSMasahiro Yamada  * Copyright (C) 2015-2017 Socionext Inc.
3*513cfaccSMasahiro Yamada  *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
4c9552895SMasahiro Yamada  *
5c9552895SMasahiro Yamada  * SPDX-License-Identifier:	GPL-2.0+
6c9552895SMasahiro Yamada  */
7c9552895SMasahiro Yamada 
8c9552895SMasahiro Yamada #include <common.h>
9c9552895SMasahiro Yamada #include <linux/io.h>
10*513cfaccSMasahiro Yamada #include <linux/sizes.h>
11c9552895SMasahiro Yamada 
12*513cfaccSMasahiro Yamada #include "../soc-info.h"
13c9552895SMasahiro Yamada #include "ddrmphy-regs.h"
14c9552895SMasahiro Yamada 
15c9552895SMasahiro Yamada /* Select either decimal or hexadecimal */
16c9552895SMasahiro Yamada #if 1
17c9552895SMasahiro Yamada #define PRINTF_FORMAT "%2d"
18c9552895SMasahiro Yamada #else
19c9552895SMasahiro Yamada #define PRINTF_FORMAT "%02x"
20c9552895SMasahiro Yamada #endif
21c9552895SMasahiro Yamada /* field separator */
22c9552895SMasahiro Yamada #define FS "   "
23c9552895SMasahiro Yamada 
24*513cfaccSMasahiro Yamada #define ptr_to_uint(p)	((unsigned int)(unsigned long)(p))
25*513cfaccSMasahiro Yamada 
26*513cfaccSMasahiro Yamada #define UNIPHIER_MAX_NR_DDRMPHY		3
27*513cfaccSMasahiro Yamada 
28*513cfaccSMasahiro Yamada struct uniphier_ddrmphy_param {
29*513cfaccSMasahiro Yamada 	unsigned int soc_id;
30*513cfaccSMasahiro Yamada 	unsigned int nr_phy;
31*513cfaccSMasahiro Yamada 	struct {
32*513cfaccSMasahiro Yamada 		resource_size_t base;
33*513cfaccSMasahiro Yamada 		unsigned int nr_zq;
34*513cfaccSMasahiro Yamada 		unsigned int nr_dx;
35*513cfaccSMasahiro Yamada 	} phy[UNIPHIER_MAX_NR_DDRMPHY];
36*513cfaccSMasahiro Yamada };
37*513cfaccSMasahiro Yamada 
38*513cfaccSMasahiro Yamada static const struct uniphier_ddrmphy_param uniphier_ddrmphy_param[] = {
39c9552895SMasahiro Yamada 	{
40*513cfaccSMasahiro Yamada 		.soc_id = UNIPHIER_PXS2_ID,
41*513cfaccSMasahiro Yamada 		.nr_phy = 3,
42*513cfaccSMasahiro Yamada 		.phy = {
43*513cfaccSMasahiro Yamada 			{ .base = 0x5b830000, .nr_zq = 3, .nr_dx = 4, },
44*513cfaccSMasahiro Yamada 			{ .base = 0x5ba30000, .nr_zq = 3, .nr_dx = 4, },
45*513cfaccSMasahiro Yamada 			{ .base = 0x5bc30000, .nr_zq = 2, .nr_dx = 2, },
46*513cfaccSMasahiro Yamada 		},
47*513cfaccSMasahiro Yamada 	},
48c9552895SMasahiro Yamada 	{
49*513cfaccSMasahiro Yamada 		.soc_id = UNIPHIER_LD6B_ID,
50*513cfaccSMasahiro Yamada 		.nr_phy = 3,
51*513cfaccSMasahiro Yamada 		.phy = {
52*513cfaccSMasahiro Yamada 			{ .base = 0x5b830000, .nr_zq = 3, .nr_dx = 4, },
53*513cfaccSMasahiro Yamada 			{ .base = 0x5ba30000, .nr_zq = 3, .nr_dx = 4, },
54*513cfaccSMasahiro Yamada 			{ .base = 0x5bc30000, .nr_zq = 2, .nr_dx = 2, },
55*513cfaccSMasahiro Yamada 		},
56*513cfaccSMasahiro Yamada 	},
57*513cfaccSMasahiro Yamada };
UNIPHIER_DEFINE_SOCDATA_FUNC(uniphier_get_ddrmphy_param,uniphier_ddrmphy_param)58*513cfaccSMasahiro Yamada UNIPHIER_DEFINE_SOCDATA_FUNC(uniphier_get_ddrmphy_param, uniphier_ddrmphy_param)
59c9552895SMasahiro Yamada 
60c9552895SMasahiro Yamada static void print_bdl(void __iomem *reg, int n)
61c9552895SMasahiro Yamada {
62c9552895SMasahiro Yamada 	u32 val = readl(reg);
63c9552895SMasahiro Yamada 	int i;
64c9552895SMasahiro Yamada 
65c9552895SMasahiro Yamada 	for (i = 0; i < n; i++)
66c9552895SMasahiro Yamada 		printf(FS PRINTF_FORMAT, (val >> i * 8) & 0x1f);
67c9552895SMasahiro Yamada }
68c9552895SMasahiro Yamada 
dump_loop(const struct uniphier_ddrmphy_param * param,void (* callback)(void __iomem *))69*513cfaccSMasahiro Yamada static void dump_loop(const struct uniphier_ddrmphy_param *param,
70*513cfaccSMasahiro Yamada 		      void (*callback)(void __iomem *))
71c9552895SMasahiro Yamada {
72*513cfaccSMasahiro Yamada 	void __iomem *phy_base, *dx_base;
73*513cfaccSMasahiro Yamada 	int phy, dx;
74c9552895SMasahiro Yamada 
75*513cfaccSMasahiro Yamada 	for (phy = 0; phy < param->nr_phy; phy++) {
76*513cfaccSMasahiro Yamada 		phy_base = ioremap(param->phy[phy].base, SZ_4K);
77*513cfaccSMasahiro Yamada 		dx_base = phy_base + MPHY_DX_BASE;
78c9552895SMasahiro Yamada 
79*513cfaccSMasahiro Yamada 		for (dx = 0; dx < param->phy[phy].nr_dx; dx++) {
80*513cfaccSMasahiro Yamada 			printf("PHY%dDX%d:", phy, dx);
81c9552895SMasahiro Yamada 			(*callback)(dx_base);
82fada9eafSMasahiro Yamada 			dx_base += MPHY_DX_STRIDE;
83c9552895SMasahiro Yamada 			printf("\n");
84c9552895SMasahiro Yamada 		}
85*513cfaccSMasahiro Yamada 
86*513cfaccSMasahiro Yamada 		iounmap(phy_base);
87c9552895SMasahiro Yamada 	}
88c9552895SMasahiro Yamada }
89c9552895SMasahiro Yamada 
zq_dump(const struct uniphier_ddrmphy_param * param)90*513cfaccSMasahiro Yamada static void zq_dump(const struct uniphier_ddrmphy_param *param)
91c9552895SMasahiro Yamada {
92*513cfaccSMasahiro Yamada 	void __iomem *phy_base, *zq_base;
93*513cfaccSMasahiro Yamada 	u32 val;
94*513cfaccSMasahiro Yamada 	int phy, zq, i;
95c9552895SMasahiro Yamada 
96c9552895SMasahiro Yamada 	printf("\n--- Impedance Data ---\n");
97c9552895SMasahiro Yamada 	printf("           ZPD  ZPU  OPD  OPU  ZDV  ODV\n");
98c9552895SMasahiro Yamada 
99*513cfaccSMasahiro Yamada 	for (phy = 0; phy < param->nr_phy; phy++) {
100*513cfaccSMasahiro Yamada 		phy_base = ioremap(param->phy[phy].base, SZ_4K);
101*513cfaccSMasahiro Yamada 		zq_base = phy_base + MPHY_ZQ_BASE;
102c9552895SMasahiro Yamada 
103*513cfaccSMasahiro Yamada 		for (zq = 0; zq < param->phy[phy].nr_zq; zq++) {
104*513cfaccSMasahiro Yamada 			printf("PHY%dZQ%d:", phy, zq);
105c9552895SMasahiro Yamada 
106*513cfaccSMasahiro Yamada 			val = readl(zq_base + MPHY_ZQ_DR);
107c9552895SMasahiro Yamada 			for (i = 0; i < 4; i++) {
108*513cfaccSMasahiro Yamada 				printf(FS PRINTF_FORMAT, val & 0x7f);
109*513cfaccSMasahiro Yamada 				val >>= 7;
110c9552895SMasahiro Yamada 			}
111c9552895SMasahiro Yamada 
112*513cfaccSMasahiro Yamada 			val = readl(zq_base + MPHY_ZQ_PR);
113c9552895SMasahiro Yamada 			for (i = 0; i < 2; i++) {
114*513cfaccSMasahiro Yamada 				printf(FS PRINTF_FORMAT, val & 0xf);
115*513cfaccSMasahiro Yamada 				val >>= 4;
116c9552895SMasahiro Yamada 			}
117c9552895SMasahiro Yamada 
118fada9eafSMasahiro Yamada 			zq_base += MPHY_ZQ_STRIDE;
119c9552895SMasahiro Yamada 			printf("\n");
120c9552895SMasahiro Yamada 		}
121*513cfaccSMasahiro Yamada 
122*513cfaccSMasahiro Yamada 		iounmap(phy_base);
123c9552895SMasahiro Yamada 	}
124c9552895SMasahiro Yamada }
125c9552895SMasahiro Yamada 
__wbdl_dump(void __iomem * dx_base)126c9552895SMasahiro Yamada static void __wbdl_dump(void __iomem *dx_base)
127c9552895SMasahiro Yamada {
128fada9eafSMasahiro Yamada 	print_bdl(dx_base + MPHY_DX_BDLR0, 4);
129fada9eafSMasahiro Yamada 	print_bdl(dx_base + MPHY_DX_BDLR1, 4);
130fada9eafSMasahiro Yamada 	print_bdl(dx_base + MPHY_DX_BDLR2, 2);
131c9552895SMasahiro Yamada 
132c9552895SMasahiro Yamada 	printf(FS "(+" PRINTF_FORMAT ")",
133fada9eafSMasahiro Yamada 	       readl(dx_base + MPHY_DX_LCDLR1) & 0xff);
134c9552895SMasahiro Yamada }
135c9552895SMasahiro Yamada 
wbdl_dump(const struct uniphier_ddrmphy_param * param)136*513cfaccSMasahiro Yamada static void wbdl_dump(const struct uniphier_ddrmphy_param *param)
137c9552895SMasahiro Yamada {
138c9552895SMasahiro Yamada 	printf("\n--- Write Bit Delay Line ---\n");
139c9552895SMasahiro Yamada 	printf("           DQ0  DQ1  DQ2  DQ3  DQ4  DQ5  DQ6  DQ7   DM  DQS  (WDQD)\n");
140c9552895SMasahiro Yamada 
141*513cfaccSMasahiro Yamada 	dump_loop(param, &__wbdl_dump);
142c9552895SMasahiro Yamada }
143c9552895SMasahiro Yamada 
__rbdl_dump(void __iomem * dx_base)144c9552895SMasahiro Yamada static void __rbdl_dump(void __iomem *dx_base)
145c9552895SMasahiro Yamada {
146fada9eafSMasahiro Yamada 	print_bdl(dx_base + MPHY_DX_BDLR3, 4);
147fada9eafSMasahiro Yamada 	print_bdl(dx_base + MPHY_DX_BDLR4, 4);
148fada9eafSMasahiro Yamada 	print_bdl(dx_base + MPHY_DX_BDLR5, 1);
149c9552895SMasahiro Yamada 
150c9552895SMasahiro Yamada 	printf(FS "(+" PRINTF_FORMAT ")",
151fada9eafSMasahiro Yamada 	       (readl(dx_base + MPHY_DX_LCDLR1) >> 8) & 0xff);
152c9552895SMasahiro Yamada 
153c9552895SMasahiro Yamada 	printf(FS "(+" PRINTF_FORMAT ")",
154fada9eafSMasahiro Yamada 	       (readl(dx_base + MPHY_DX_LCDLR1) >> 16) & 0xff);
155c9552895SMasahiro Yamada }
156c9552895SMasahiro Yamada 
rbdl_dump(const struct uniphier_ddrmphy_param * param)157*513cfaccSMasahiro Yamada static void rbdl_dump(const struct uniphier_ddrmphy_param *param)
158c9552895SMasahiro Yamada {
159c9552895SMasahiro Yamada 	printf("\n--- Read Bit Delay Line ---\n");
160c9552895SMasahiro Yamada 	printf("           DQ0  DQ1  DQ2  DQ3  DQ4  DQ5  DQ6  DQ7   DM  (RDQSD) (RDQSND)\n");
161c9552895SMasahiro Yamada 
162*513cfaccSMasahiro Yamada 	dump_loop(param, &__rbdl_dump);
163c9552895SMasahiro Yamada }
164c9552895SMasahiro Yamada 
__wld_dump(void __iomem * dx_base)165c9552895SMasahiro Yamada static void __wld_dump(void __iomem *dx_base)
166c9552895SMasahiro Yamada {
167c9552895SMasahiro Yamada 	int rank;
168fada9eafSMasahiro Yamada 	u32 lcdlr0 = readl(dx_base + MPHY_DX_LCDLR0);
169fada9eafSMasahiro Yamada 	u32 gtr = readl(dx_base + MPHY_DX_GTR);
170c9552895SMasahiro Yamada 
171c9552895SMasahiro Yamada 	for (rank = 0; rank < 4; rank++) {
172c9552895SMasahiro Yamada 		u32 wld = (lcdlr0 >> (8 * rank)) & 0xff; /* Delay */
173c9552895SMasahiro Yamada 		u32 wlsl = (gtr >> (12 + 2 * rank)) & 0x3; /* System Latency */
174c9552895SMasahiro Yamada 
175c9552895SMasahiro Yamada 		printf(FS PRINTF_FORMAT "%sT", wld,
176c9552895SMasahiro Yamada 		       wlsl == 0 ? "-1" : wlsl == 1 ? "+0" : "+1");
177c9552895SMasahiro Yamada 	}
178c9552895SMasahiro Yamada }
179c9552895SMasahiro Yamada 
wld_dump(const struct uniphier_ddrmphy_param * param)180*513cfaccSMasahiro Yamada static void wld_dump(const struct uniphier_ddrmphy_param *param)
181c9552895SMasahiro Yamada {
182c9552895SMasahiro Yamada 	printf("\n--- Write Leveling Delay ---\n");
183c9552895SMasahiro Yamada 	printf("           Rank0   Rank1   Rank2   Rank3\n");
184c9552895SMasahiro Yamada 
185*513cfaccSMasahiro Yamada 	dump_loop(param, &__wld_dump);
186c9552895SMasahiro Yamada }
187c9552895SMasahiro Yamada 
__dqsgd_dump(void __iomem * dx_base)188c9552895SMasahiro Yamada static void __dqsgd_dump(void __iomem *dx_base)
189c9552895SMasahiro Yamada {
190c9552895SMasahiro Yamada 	int rank;
191fada9eafSMasahiro Yamada 	u32 lcdlr2 = readl(dx_base + MPHY_DX_LCDLR2);
192fada9eafSMasahiro Yamada 	u32 gtr = readl(dx_base + MPHY_DX_GTR);
193c9552895SMasahiro Yamada 
194c9552895SMasahiro Yamada 	for (rank = 0; rank < 4; rank++) {
195c9552895SMasahiro Yamada 		u32 dqsgd = (lcdlr2 >> (8 * rank)) & 0xff; /* Delay */
196c9552895SMasahiro Yamada 		u32 dgsl = (gtr >> (3 * rank)) & 0x7; /* System Latency */
197c9552895SMasahiro Yamada 
198c9552895SMasahiro Yamada 		printf(FS PRINTF_FORMAT "+%dT", dqsgd, dgsl);
199c9552895SMasahiro Yamada 	}
200c9552895SMasahiro Yamada }
201c9552895SMasahiro Yamada 
dqsgd_dump(const struct uniphier_ddrmphy_param * param)202*513cfaccSMasahiro Yamada static void dqsgd_dump(const struct uniphier_ddrmphy_param *param)
203c9552895SMasahiro Yamada {
204c9552895SMasahiro Yamada 	printf("\n--- DQS Gating Delay ---\n");
205c9552895SMasahiro Yamada 	printf("           Rank0   Rank1   Rank2   Rank3\n");
206c9552895SMasahiro Yamada 
207*513cfaccSMasahiro Yamada 	dump_loop(param, &__dqsgd_dump);
208c9552895SMasahiro Yamada }
209c9552895SMasahiro Yamada 
__mdl_dump(void __iomem * dx_base)210c9552895SMasahiro Yamada static void __mdl_dump(void __iomem *dx_base)
211c9552895SMasahiro Yamada {
212c9552895SMasahiro Yamada 	int i;
213fada9eafSMasahiro Yamada 	u32 mdl = readl(dx_base + MPHY_DX_MDLR);
214c9552895SMasahiro Yamada 
215c9552895SMasahiro Yamada 	for (i = 0; i < 3; i++)
216c9552895SMasahiro Yamada 		printf(FS PRINTF_FORMAT, (mdl >> (8 * i)) & 0xff);
217c9552895SMasahiro Yamada }
218c9552895SMasahiro Yamada 
mdl_dump(const struct uniphier_ddrmphy_param * param)219*513cfaccSMasahiro Yamada static void mdl_dump(const struct uniphier_ddrmphy_param *param)
220c9552895SMasahiro Yamada {
221c9552895SMasahiro Yamada 	printf("\n--- Master Delay Line ---\n");
222c9552895SMasahiro Yamada 	printf("          IPRD TPRD MDLD\n");
223c9552895SMasahiro Yamada 
224*513cfaccSMasahiro Yamada 	dump_loop(param, &__mdl_dump);
225c9552895SMasahiro Yamada }
226c9552895SMasahiro Yamada 
227c9552895SMasahiro Yamada #define REG_DUMP(x)							\
228fada9eafSMasahiro Yamada 	{ int ofst = MPHY_ ## x; void __iomem *reg = phy_base + ofst;	\
229c9552895SMasahiro Yamada 		printf("%3d: %-10s: %p : %08x\n",			\
230fada9eafSMasahiro Yamada 		       ofst >> MPHY_SHIFT, #x, reg, readl(reg)); }
231c9552895SMasahiro Yamada 
232c9552895SMasahiro Yamada #define DX_REG_DUMP(dx, x)						\
233fada9eafSMasahiro Yamada 	{ int ofst = MPHY_DX_BASE + MPHY_DX_STRIDE * (dx) +		\
234fada9eafSMasahiro Yamada 			MPHY_DX_## x;					\
235c9552895SMasahiro Yamada 		void __iomem *reg = phy_base + ofst;			\
236c9552895SMasahiro Yamada 		printf("%3d: DX%d%-7s: %p : %08x\n",			\
237fada9eafSMasahiro Yamada 		       ofst >> MPHY_SHIFT, (dx), #x, reg, readl(reg)); }
238c9552895SMasahiro Yamada 
reg_dump(const struct uniphier_ddrmphy_param * param)239*513cfaccSMasahiro Yamada static void reg_dump(const struct uniphier_ddrmphy_param *param)
240c9552895SMasahiro Yamada {
241c9552895SMasahiro Yamada 	void __iomem *phy_base;
242*513cfaccSMasahiro Yamada 	int phy, dx;
243c9552895SMasahiro Yamada 
244*513cfaccSMasahiro Yamada 	printf("\n--- DDR Multi PHY registers ---\n");
245c9552895SMasahiro Yamada 
246*513cfaccSMasahiro Yamada 	for (phy = 0; phy < param->nr_phy; phy++) {
247*513cfaccSMasahiro Yamada 		phy_base = ioremap(param->phy[phy].base, SZ_4K);
248c9552895SMasahiro Yamada 
249*513cfaccSMasahiro Yamada 		printf("== PHY%d (base: %08x) ==\n", phy,
250*513cfaccSMasahiro Yamada 		       ptr_to_uint(phy_base));
251c9552895SMasahiro Yamada 		printf(" No: Name      : Address  : Data\n");
252c9552895SMasahiro Yamada 
253c9552895SMasahiro Yamada 		REG_DUMP(RIDR);
254c9552895SMasahiro Yamada 		REG_DUMP(PIR);
255c9552895SMasahiro Yamada 		REG_DUMP(PGCR0);
256c9552895SMasahiro Yamada 		REG_DUMP(PGCR1);
257c9552895SMasahiro Yamada 		REG_DUMP(PGCR2);
258c9552895SMasahiro Yamada 		REG_DUMP(PGCR3);
259c9552895SMasahiro Yamada 		REG_DUMP(PGSR0);
260c9552895SMasahiro Yamada 		REG_DUMP(PGSR1);
261c9552895SMasahiro Yamada 		REG_DUMP(PLLCR);
262c9552895SMasahiro Yamada 		REG_DUMP(PTR0);
263c9552895SMasahiro Yamada 		REG_DUMP(PTR1);
264c9552895SMasahiro Yamada 		REG_DUMP(PTR2);
265c9552895SMasahiro Yamada 		REG_DUMP(PTR3);
266c9552895SMasahiro Yamada 		REG_DUMP(PTR4);
267c9552895SMasahiro Yamada 		REG_DUMP(ACMDLR);
268c9552895SMasahiro Yamada 		REG_DUMP(ACBDLR0);
269c9552895SMasahiro Yamada 		REG_DUMP(DXCCR);
270c9552895SMasahiro Yamada 		REG_DUMP(DSGCR);
271c9552895SMasahiro Yamada 		REG_DUMP(DCR);
272c9552895SMasahiro Yamada 		REG_DUMP(DTPR0);
273c9552895SMasahiro Yamada 		REG_DUMP(DTPR1);
274c9552895SMasahiro Yamada 		REG_DUMP(DTPR2);
275c9552895SMasahiro Yamada 		REG_DUMP(DTPR3);
276c9552895SMasahiro Yamada 		REG_DUMP(MR0);
277c9552895SMasahiro Yamada 		REG_DUMP(MR1);
278c9552895SMasahiro Yamada 		REG_DUMP(MR2);
279c9552895SMasahiro Yamada 		REG_DUMP(MR3);
280c9552895SMasahiro Yamada 
281*513cfaccSMasahiro Yamada 		for (dx = 0; dx < param->phy[phy].nr_dx; dx++) {
282c9552895SMasahiro Yamada 			DX_REG_DUMP(dx, GCR0);
283c9552895SMasahiro Yamada 			DX_REG_DUMP(dx, GCR1);
284c9552895SMasahiro Yamada 			DX_REG_DUMP(dx, GCR2);
285c9552895SMasahiro Yamada 			DX_REG_DUMP(dx, GCR3);
286c9552895SMasahiro Yamada 			DX_REG_DUMP(dx, GTR);
287c9552895SMasahiro Yamada 		}
288*513cfaccSMasahiro Yamada 
289*513cfaccSMasahiro Yamada 		iounmap(phy_base);
290c9552895SMasahiro Yamada 	}
291c9552895SMasahiro Yamada }
292c9552895SMasahiro Yamada 
do_ddrm(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])293c9552895SMasahiro Yamada static int do_ddrm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
294c9552895SMasahiro Yamada {
295*513cfaccSMasahiro Yamada 	const struct uniphier_ddrmphy_param *param;
296*513cfaccSMasahiro Yamada 	char *cmd;
297*513cfaccSMasahiro Yamada 
298*513cfaccSMasahiro Yamada 	param = uniphier_get_ddrmphy_param();
299*513cfaccSMasahiro Yamada 	if (!param) {
300*513cfaccSMasahiro Yamada 		printf("unsupported SoC\n");
301*513cfaccSMasahiro Yamada 		return CMD_RET_FAILURE;
302*513cfaccSMasahiro Yamada 	}
303c9552895SMasahiro Yamada 
304c9552895SMasahiro Yamada 	if (argc == 1)
305c9552895SMasahiro Yamada 		cmd = "all";
306*513cfaccSMasahiro Yamada 	else
307*513cfaccSMasahiro Yamada 		cmd = argv[1];
308c9552895SMasahiro Yamada 
309c9552895SMasahiro Yamada 	if (!strcmp(cmd, "zq") || !strcmp(cmd, "all"))
310*513cfaccSMasahiro Yamada 		zq_dump(param);
311c9552895SMasahiro Yamada 
312c9552895SMasahiro Yamada 	if (!strcmp(cmd, "wbdl") || !strcmp(cmd, "all"))
313*513cfaccSMasahiro Yamada 		wbdl_dump(param);
314c9552895SMasahiro Yamada 
315c9552895SMasahiro Yamada 	if (!strcmp(cmd, "rbdl") || !strcmp(cmd, "all"))
316*513cfaccSMasahiro Yamada 		rbdl_dump(param);
317c9552895SMasahiro Yamada 
318c9552895SMasahiro Yamada 	if (!strcmp(cmd, "wld") || !strcmp(cmd, "all"))
319*513cfaccSMasahiro Yamada 		wld_dump(param);
320c9552895SMasahiro Yamada 
321c9552895SMasahiro Yamada 	if (!strcmp(cmd, "dqsgd") || !strcmp(cmd, "all"))
322*513cfaccSMasahiro Yamada 		dqsgd_dump(param);
323c9552895SMasahiro Yamada 
324c9552895SMasahiro Yamada 	if (!strcmp(cmd, "mdl") || !strcmp(cmd, "all"))
325*513cfaccSMasahiro Yamada 		mdl_dump(param);
326c9552895SMasahiro Yamada 
327c9552895SMasahiro Yamada 	if (!strcmp(cmd, "reg") || !strcmp(cmd, "all"))
328*513cfaccSMasahiro Yamada 		reg_dump(param);
329c9552895SMasahiro Yamada 
330*513cfaccSMasahiro Yamada 	return CMD_RET_SUCCESS;
331c9552895SMasahiro Yamada }
332c9552895SMasahiro Yamada 
333c9552895SMasahiro Yamada U_BOOT_CMD(
334c9552895SMasahiro Yamada 	ddrm,	2,	1,	do_ddrm,
335*513cfaccSMasahiro Yamada 	"UniPhier DDR Multi PHY parameters dumper",
336c21fc7e2SMasahiro Yamada 	"- dump all of the following\n"
337c9552895SMasahiro Yamada 	"ddrm zq - dump Impedance Data\n"
338c9552895SMasahiro Yamada 	"ddrm wbdl - dump Write Bit Delay\n"
339c9552895SMasahiro Yamada 	"ddrm rbdl - dump Read Bit Delay\n"
340c9552895SMasahiro Yamada 	"ddrm wld - dump Write Leveling\n"
341c9552895SMasahiro Yamada 	"ddrm dqsgd - dump DQS Gating Delay\n"
342c9552895SMasahiro Yamada 	"ddrm mdl - dump Master Delay Line\n"
343c9552895SMasahiro Yamada 	"ddrm reg - dump registers\n"
344c9552895SMasahiro Yamada );
345