xref: /rk3399_rockchip-uboot/arch/powerpc/cpu/mpc8xx/immap.c (revision ba3da7348ac9aaa1cc0a9ccbc8b3c9367d87ca4b)
1debd1f3cSChristophe Leroy /*
2debd1f3cSChristophe Leroy  * (C) Copyright 2000-2003
3debd1f3cSChristophe Leroy  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4debd1f3cSChristophe Leroy  *
5debd1f3cSChristophe Leroy  * SPDX-License-Identifier:	GPL-2.0+
6debd1f3cSChristophe Leroy  */
7debd1f3cSChristophe Leroy 
8debd1f3cSChristophe Leroy /*
9debd1f3cSChristophe Leroy  * MPC8xx Internal Memory Map Functions
10debd1f3cSChristophe Leroy  */
11debd1f3cSChristophe Leroy 
12debd1f3cSChristophe Leroy #include <common.h>
13debd1f3cSChristophe Leroy #include <command.h>
14debd1f3cSChristophe Leroy 
15debd1f3cSChristophe Leroy #include <asm/8xx_immap.h>
16debd1f3cSChristophe Leroy #include <commproc.h>
17debd1f3cSChristophe Leroy #include <asm/iopin_8xx.h>
18*ba3da734SChristophe Leroy #include <asm/io.h>
19debd1f3cSChristophe Leroy 
20debd1f3cSChristophe Leroy DECLARE_GLOBAL_DATA_PTR;
21debd1f3cSChristophe Leroy 
22debd1f3cSChristophe Leroy int
23debd1f3cSChristophe Leroy do_siuinfo (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
24debd1f3cSChristophe Leroy {
25*ba3da734SChristophe Leroy 	immap_t __iomem *immap = (immap_t __iomem *)CONFIG_SYS_IMMR;
26*ba3da734SChristophe Leroy 	sysconf8xx_t __iomem *sc = &immap->im_siu_conf;
27debd1f3cSChristophe Leroy 
28*ba3da734SChristophe Leroy 	printf("SIUMCR= %08x SYPCR = %08x\n",
29*ba3da734SChristophe Leroy 	       in_be32(&sc->sc_siumcr), in_be32(&sc->sc_sypcr));
30*ba3da734SChristophe Leroy 	printf("SWT   = %08x\n", in_be32(&sc->sc_swt));
31*ba3da734SChristophe Leroy 	printf("SIPEND= %08x SIMASK= %08x\n",
32*ba3da734SChristophe Leroy 	       in_be32(&sc->sc_sipend), in_be32(&sc->sc_simask));
33*ba3da734SChristophe Leroy 	printf("SIEL  = %08x SIVEC = %08x\n",
34*ba3da734SChristophe Leroy 	       in_be32(&sc->sc_siel), in_be32(&sc->sc_sivec));
35*ba3da734SChristophe Leroy 	printf("TESR  = %08x SDCR  = %08x\n",
36*ba3da734SChristophe Leroy 	       in_be32(&sc->sc_tesr), in_be32(&sc->sc_sdcr));
37debd1f3cSChristophe Leroy 	return 0;
38debd1f3cSChristophe Leroy }
39debd1f3cSChristophe Leroy 
40debd1f3cSChristophe Leroy int
41debd1f3cSChristophe Leroy do_memcinfo (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
42debd1f3cSChristophe Leroy {
43*ba3da734SChristophe Leroy 	immap_t __iomem *immap = (immap_t __iomem *)CONFIG_SYS_IMMR;
44*ba3da734SChristophe Leroy 	memctl8xx_t __iomem *memctl = &immap->im_memctl;
45debd1f3cSChristophe Leroy 	int nbanks = 8;
46*ba3da734SChristophe Leroy 	uint __iomem *p = &memctl->memc_br0;
47debd1f3cSChristophe Leroy 	int i;
48debd1f3cSChristophe Leroy 
49*ba3da734SChristophe Leroy 	for (i = 0; i < nbanks; i++, p += 2)
50*ba3da734SChristophe Leroy 		printf("BR%-2d  = %08x OR%-2d  = %08x\n",
51*ba3da734SChristophe Leroy 		       i, in_be32(p), i, in_be32(p + 1));
52debd1f3cSChristophe Leroy 
53*ba3da734SChristophe Leroy 	printf("MAR   = %08x", in_be32(&memctl->memc_mar));
54*ba3da734SChristophe Leroy 	printf(" MCR   = %08x\n", in_be32(&memctl->memc_mcr));
55debd1f3cSChristophe Leroy 	printf("MAMR  = %08x MBMR  = %08x",
56*ba3da734SChristophe Leroy 	       in_be32(&memctl->memc_mamr), in_be32(&memctl->memc_mbmr));
57*ba3da734SChristophe Leroy 	printf("\nMSTAT =     %04x\n", in_be16(&memctl->memc_mstat));
58debd1f3cSChristophe Leroy 	printf("MPTPR =     %04x MDR   = %08x\n",
59*ba3da734SChristophe Leroy 	       in_be16(&memctl->memc_mptpr), in_be32(&memctl->memc_mdr));
60debd1f3cSChristophe Leroy 	return 0;
61debd1f3cSChristophe Leroy }
62debd1f3cSChristophe Leroy 
63debd1f3cSChristophe Leroy int
64debd1f3cSChristophe Leroy do_carinfo (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
65debd1f3cSChristophe Leroy {
66*ba3da734SChristophe Leroy 	immap_t __iomem *immap = (immap_t __iomem *)CONFIG_SYS_IMMR;
67*ba3da734SChristophe Leroy 	car8xx_t __iomem *car = &immap->im_clkrst;
68debd1f3cSChristophe Leroy 
69*ba3da734SChristophe Leroy 	printf("SCCR  = %08x\n", in_be32(&car->car_sccr));
70*ba3da734SChristophe Leroy 	printf("PLPRCR= %08x\n", in_be32(&car->car_plprcr));
71*ba3da734SChristophe Leroy 	printf("RSR   = %08x\n", in_be32(&car->car_rsr));
72debd1f3cSChristophe Leroy 	return 0;
73debd1f3cSChristophe Leroy }
74debd1f3cSChristophe Leroy 
75debd1f3cSChristophe Leroy static int counter;
76debd1f3cSChristophe Leroy 
77debd1f3cSChristophe Leroy static void
78debd1f3cSChristophe Leroy header(void)
79debd1f3cSChristophe Leroy {
80debd1f3cSChristophe Leroy 	char *data = "\
81debd1f3cSChristophe Leroy        --------------------------------        --------------------------------\
82debd1f3cSChristophe Leroy        00000000001111111111222222222233        00000000001111111111222222222233\
83debd1f3cSChristophe Leroy        01234567890123456789012345678901        01234567890123456789012345678901\
84debd1f3cSChristophe Leroy        --------------------------------        --------------------------------\
85debd1f3cSChristophe Leroy     ";
86debd1f3cSChristophe Leroy 	int i;
87debd1f3cSChristophe Leroy 
88debd1f3cSChristophe Leroy 	if (counter % 2)
89debd1f3cSChristophe Leroy 		putc('\n');
90debd1f3cSChristophe Leroy 	counter = 0;
91debd1f3cSChristophe Leroy 
92debd1f3cSChristophe Leroy 	for (i = 0; i < 4; i++, data += 79)
93debd1f3cSChristophe Leroy 		printf("%.79s\n", data);
94debd1f3cSChristophe Leroy }
95debd1f3cSChristophe Leroy 
96debd1f3cSChristophe Leroy static void binary (char *label, uint value, int nbits)
97debd1f3cSChristophe Leroy {
98debd1f3cSChristophe Leroy 	uint mask = 1 << (nbits - 1);
99debd1f3cSChristophe Leroy 	int i, second = (counter++ % 2);
100debd1f3cSChristophe Leroy 
101debd1f3cSChristophe Leroy 	if (second)
102debd1f3cSChristophe Leroy 		putc (' ');
103debd1f3cSChristophe Leroy 	puts (label);
104debd1f3cSChristophe Leroy 	for (i = 32 + 1; i != nbits; i--)
105debd1f3cSChristophe Leroy 		putc (' ');
106debd1f3cSChristophe Leroy 
107debd1f3cSChristophe Leroy 	while (mask != 0) {
108debd1f3cSChristophe Leroy 		if (value & mask)
109debd1f3cSChristophe Leroy 			putc ('1');
110debd1f3cSChristophe Leroy 		else
111debd1f3cSChristophe Leroy 			putc ('0');
112debd1f3cSChristophe Leroy 		mask >>= 1;
113debd1f3cSChristophe Leroy 	}
114debd1f3cSChristophe Leroy 
115debd1f3cSChristophe Leroy 	if (second)
116debd1f3cSChristophe Leroy 		putc ('\n');
117debd1f3cSChristophe Leroy }
118debd1f3cSChristophe Leroy 
119debd1f3cSChristophe Leroy #define PA_NBITS	16
120debd1f3cSChristophe Leroy #define PA_NB_ODR	 8
121debd1f3cSChristophe Leroy #define PB_NBITS	18
122debd1f3cSChristophe Leroy #define PB_NB_ODR	16
123debd1f3cSChristophe Leroy #define PC_NBITS	12
124debd1f3cSChristophe Leroy #define PD_NBITS	13
125debd1f3cSChristophe Leroy 
126debd1f3cSChristophe Leroy int
127debd1f3cSChristophe Leroy do_iopinfo (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
128debd1f3cSChristophe Leroy {
129*ba3da734SChristophe Leroy 	immap_t __iomem *immap = (immap_t __iomem *)CONFIG_SYS_IMMR;
130*ba3da734SChristophe Leroy 	iop8xx_t __iomem *iop = &immap->im_ioport;
131*ba3da734SChristophe Leroy 	ushort __iomem *l, *r;
132*ba3da734SChristophe Leroy 	uint __iomem *R;
133debd1f3cSChristophe Leroy 
134debd1f3cSChristophe Leroy 	counter = 0;
135debd1f3cSChristophe Leroy 	header ();
136debd1f3cSChristophe Leroy 
137debd1f3cSChristophe Leroy 	/*
138debd1f3cSChristophe Leroy 	 * Ports A & B
139debd1f3cSChristophe Leroy 	 */
140debd1f3cSChristophe Leroy 
141debd1f3cSChristophe Leroy 	l = &iop->iop_padir;
142debd1f3cSChristophe Leroy 	R = &immap->im_cpm.cp_pbdir;
143*ba3da734SChristophe Leroy 	binary("PA_DIR", in_be16(l++), PA_NBITS);
144*ba3da734SChristophe Leroy 	binary("PB_DIR", in_be32(R++), PB_NBITS);
145*ba3da734SChristophe Leroy 	binary("PA_PAR", in_be16(l++), PA_NBITS);
146*ba3da734SChristophe Leroy 	binary("PB_PAR", in_be32(R++), PB_NBITS);
147*ba3da734SChristophe Leroy 	binary("PA_ODR", in_be16(l++), PA_NB_ODR);
148*ba3da734SChristophe Leroy 	binary("PB_ODR", in_be32(R++), PB_NB_ODR);
149*ba3da734SChristophe Leroy 	binary("PA_DAT", in_be16(l++), PA_NBITS);
150*ba3da734SChristophe Leroy 	binary("PB_DAT", in_be32(R++), PB_NBITS);
151debd1f3cSChristophe Leroy 
152debd1f3cSChristophe Leroy 	header ();
153debd1f3cSChristophe Leroy 
154debd1f3cSChristophe Leroy 	/*
155debd1f3cSChristophe Leroy 	 * Ports C & D
156debd1f3cSChristophe Leroy 	 */
157debd1f3cSChristophe Leroy 
158debd1f3cSChristophe Leroy 	l = &iop->iop_pcdir;
159debd1f3cSChristophe Leroy 	r = &iop->iop_pddir;
160*ba3da734SChristophe Leroy 	binary("PC_DIR", in_be16(l++), PC_NBITS);
161*ba3da734SChristophe Leroy 	binary("PD_DIR", in_be16(r++), PD_NBITS);
162*ba3da734SChristophe Leroy 	binary("PC_PAR", in_be16(l++), PC_NBITS);
163*ba3da734SChristophe Leroy 	binary("PD_PAR", in_be16(r++), PD_NBITS);
164*ba3da734SChristophe Leroy 	binary("PC_SO ", in_be16(l++), PC_NBITS);
165debd1f3cSChristophe Leroy 	binary("      ", 0, 0);
166debd1f3cSChristophe Leroy 	r++;
167*ba3da734SChristophe Leroy 	binary("PC_DAT", in_be16(l++), PC_NBITS);
168*ba3da734SChristophe Leroy 	binary("PD_DAT", in_be16(r++), PD_NBITS);
169*ba3da734SChristophe Leroy 	binary("PC_INT", in_be16(l++), PC_NBITS);
170debd1f3cSChristophe Leroy 
171debd1f3cSChristophe Leroy 	header ();
172debd1f3cSChristophe Leroy 	return 0;
173debd1f3cSChristophe Leroy }
174debd1f3cSChristophe Leroy 
175debd1f3cSChristophe Leroy /*
176debd1f3cSChristophe Leroy  * set the io pins
177debd1f3cSChristophe Leroy  * this needs a clean up for smaller tighter code
178debd1f3cSChristophe Leroy  * use *uint and set the address based on cmd + port
179debd1f3cSChristophe Leroy  */
180debd1f3cSChristophe Leroy int
181debd1f3cSChristophe Leroy do_iopset (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
182debd1f3cSChristophe Leroy {
183debd1f3cSChristophe Leroy 	uint rcode = 0;
184debd1f3cSChristophe Leroy 	iopin_t iopin;
185debd1f3cSChristophe Leroy 	static uint port = 0;
186debd1f3cSChristophe Leroy 	static uint pin = 0;
187debd1f3cSChristophe Leroy 	static uint value = 0;
188debd1f3cSChristophe Leroy 	static enum {
189debd1f3cSChristophe Leroy 		DIR,
190debd1f3cSChristophe Leroy 		PAR,
191debd1f3cSChristophe Leroy 		SOR,
192debd1f3cSChristophe Leroy 		ODR,
193debd1f3cSChristophe Leroy 		DAT,
194debd1f3cSChristophe Leroy 		INT
195debd1f3cSChristophe Leroy 	} cmd = DAT;
196debd1f3cSChristophe Leroy 
197debd1f3cSChristophe Leroy 	if (argc != 5) {
198debd1f3cSChristophe Leroy 		puts ("iopset PORT PIN CMD VALUE\n");
199debd1f3cSChristophe Leroy 		return 1;
200debd1f3cSChristophe Leroy 	}
201debd1f3cSChristophe Leroy 	port = argv[1][0] - 'A';
202debd1f3cSChristophe Leroy 	if (port > 3)
203debd1f3cSChristophe Leroy 		port -= 0x20;
204debd1f3cSChristophe Leroy 	if (port > 3)
205debd1f3cSChristophe Leroy 		rcode = 1;
206debd1f3cSChristophe Leroy 	pin = simple_strtol (argv[2], NULL, 10);
207debd1f3cSChristophe Leroy 	if (pin > 31)
208debd1f3cSChristophe Leroy 		rcode = 1;
209debd1f3cSChristophe Leroy 
210debd1f3cSChristophe Leroy 
211debd1f3cSChristophe Leroy 	switch (argv[3][0]) {
212debd1f3cSChristophe Leroy 	case 'd':
213debd1f3cSChristophe Leroy 		if (argv[3][1] == 'a')
214debd1f3cSChristophe Leroy 			cmd = DAT;
215debd1f3cSChristophe Leroy 		else if (argv[3][1] == 'i')
216debd1f3cSChristophe Leroy 			cmd = DIR;
217debd1f3cSChristophe Leroy 		else
218debd1f3cSChristophe Leroy 			rcode = 1;
219debd1f3cSChristophe Leroy 		break;
220debd1f3cSChristophe Leroy 	case 'p':
221debd1f3cSChristophe Leroy 		cmd = PAR;
222debd1f3cSChristophe Leroy 		break;
223debd1f3cSChristophe Leroy 	case 'o':
224debd1f3cSChristophe Leroy 		cmd = ODR;
225debd1f3cSChristophe Leroy 		break;
226debd1f3cSChristophe Leroy 	case 's':
227debd1f3cSChristophe Leroy 		cmd = SOR;
228debd1f3cSChristophe Leroy 		break;
229debd1f3cSChristophe Leroy 	case 'i':
230debd1f3cSChristophe Leroy 		cmd = INT;
231debd1f3cSChristophe Leroy 		break;
232debd1f3cSChristophe Leroy 	default:
233debd1f3cSChristophe Leroy 		printf ("iopset: unknown command %s\n", argv[3]);
234debd1f3cSChristophe Leroy 		rcode = 1;
235debd1f3cSChristophe Leroy 	}
236debd1f3cSChristophe Leroy 	if (argv[4][0] == '1')
237debd1f3cSChristophe Leroy 		value = 1;
238debd1f3cSChristophe Leroy 	else if (argv[4][0] == '0')
239debd1f3cSChristophe Leroy 		value = 0;
240debd1f3cSChristophe Leroy 	else
241debd1f3cSChristophe Leroy 		rcode = 1;
242debd1f3cSChristophe Leroy 	if (rcode == 0) {
243debd1f3cSChristophe Leroy 		iopin.port = port;
244debd1f3cSChristophe Leroy 		iopin.pin = pin;
245debd1f3cSChristophe Leroy 		iopin.flag = 0;
246debd1f3cSChristophe Leroy 		switch (cmd) {
247debd1f3cSChristophe Leroy 		case DIR:
248debd1f3cSChristophe Leroy 			if (value)
249debd1f3cSChristophe Leroy 				iopin_set_out (&iopin);
250debd1f3cSChristophe Leroy 			else
251debd1f3cSChristophe Leroy 				iopin_set_in (&iopin);
252debd1f3cSChristophe Leroy 			break;
253debd1f3cSChristophe Leroy 		case PAR:
254debd1f3cSChristophe Leroy 			if (value)
255debd1f3cSChristophe Leroy 				iopin_set_ded (&iopin);
256debd1f3cSChristophe Leroy 			else
257debd1f3cSChristophe Leroy 				iopin_set_gen (&iopin);
258debd1f3cSChristophe Leroy 			break;
259debd1f3cSChristophe Leroy 		case SOR:
260debd1f3cSChristophe Leroy 			if (value)
261debd1f3cSChristophe Leroy 				iopin_set_opt2 (&iopin);
262debd1f3cSChristophe Leroy 			else
263debd1f3cSChristophe Leroy 				iopin_set_opt1 (&iopin);
264debd1f3cSChristophe Leroy 			break;
265debd1f3cSChristophe Leroy 		case ODR:
266debd1f3cSChristophe Leroy 			if (value)
267debd1f3cSChristophe Leroy 				iopin_set_odr (&iopin);
268debd1f3cSChristophe Leroy 			else
269debd1f3cSChristophe Leroy 				iopin_set_act (&iopin);
270debd1f3cSChristophe Leroy 			break;
271debd1f3cSChristophe Leroy 		case DAT:
272debd1f3cSChristophe Leroy 			if (value)
273debd1f3cSChristophe Leroy 				iopin_set_high (&iopin);
274debd1f3cSChristophe Leroy 			else
275debd1f3cSChristophe Leroy 				iopin_set_low (&iopin);
276debd1f3cSChristophe Leroy 			break;
277debd1f3cSChristophe Leroy 		case INT:
278debd1f3cSChristophe Leroy 			if (value)
279debd1f3cSChristophe Leroy 				iopin_set_falledge (&iopin);
280debd1f3cSChristophe Leroy 			else
281debd1f3cSChristophe Leroy 				iopin_set_anyedge (&iopin);
282debd1f3cSChristophe Leroy 			break;
283debd1f3cSChristophe Leroy 		}
284debd1f3cSChristophe Leroy 
285debd1f3cSChristophe Leroy 	}
286debd1f3cSChristophe Leroy 	return rcode;
287debd1f3cSChristophe Leroy }
288debd1f3cSChristophe Leroy 
289debd1f3cSChristophe Leroy static void prbrg (int n, uint val)
290debd1f3cSChristophe Leroy {
291debd1f3cSChristophe Leroy 	uint extc = (val >> 14) & 3;
292debd1f3cSChristophe Leroy 	uint cd = (val & CPM_BRG_CD_MASK) >> 1;
293debd1f3cSChristophe Leroy 	uint div16 = (val & CPM_BRG_DIV16) != 0;
294debd1f3cSChristophe Leroy 
295debd1f3cSChristophe Leroy 	ulong clock = gd->cpu_clk;
296debd1f3cSChristophe Leroy 
297debd1f3cSChristophe Leroy 	printf ("BRG%d:", n);
298debd1f3cSChristophe Leroy 
299debd1f3cSChristophe Leroy 	if (val & CPM_BRG_RST)
300debd1f3cSChristophe Leroy 		puts (" RESET");
301debd1f3cSChristophe Leroy 	else
302debd1f3cSChristophe Leroy 		puts ("      ");
303debd1f3cSChristophe Leroy 
304debd1f3cSChristophe Leroy 	if (val & CPM_BRG_EN)
305debd1f3cSChristophe Leroy 		puts ("  ENABLED");
306debd1f3cSChristophe Leroy 	else
307debd1f3cSChristophe Leroy 		puts (" DISABLED");
308debd1f3cSChristophe Leroy 
309debd1f3cSChristophe Leroy 	printf (" EXTC=%d", extc);
310debd1f3cSChristophe Leroy 
311debd1f3cSChristophe Leroy 	if (val & CPM_BRG_ATB)
312debd1f3cSChristophe Leroy 		puts (" ATB");
313debd1f3cSChristophe Leroy 	else
314debd1f3cSChristophe Leroy 		puts ("    ");
315debd1f3cSChristophe Leroy 
316debd1f3cSChristophe Leroy 	printf (" DIVIDER=%4d", cd);
317debd1f3cSChristophe Leroy 	if (extc == 0 && cd != 0) {
318debd1f3cSChristophe Leroy 		uint baudrate;
319debd1f3cSChristophe Leroy 
320debd1f3cSChristophe Leroy 		if (div16)
321debd1f3cSChristophe Leroy 			baudrate = (clock / 16) / (cd + 1);
322debd1f3cSChristophe Leroy 		else
323debd1f3cSChristophe Leroy 			baudrate = clock / (cd + 1);
324debd1f3cSChristophe Leroy 
325debd1f3cSChristophe Leroy 		printf ("=%6d bps", baudrate);
326debd1f3cSChristophe Leroy 	} else {
327debd1f3cSChristophe Leroy 		puts ("           ");
328debd1f3cSChristophe Leroy 	}
329debd1f3cSChristophe Leroy 
330debd1f3cSChristophe Leroy 	if (val & CPM_BRG_DIV16)
331debd1f3cSChristophe Leroy 		puts (" DIV16");
332debd1f3cSChristophe Leroy 	else
333debd1f3cSChristophe Leroy 		puts ("      ");
334debd1f3cSChristophe Leroy 
335debd1f3cSChristophe Leroy 	putc ('\n');
336debd1f3cSChristophe Leroy }
337debd1f3cSChristophe Leroy 
338debd1f3cSChristophe Leroy int
339debd1f3cSChristophe Leroy do_brginfo (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
340debd1f3cSChristophe Leroy {
341*ba3da734SChristophe Leroy 	immap_t __iomem *immap = (immap_t __iomem *)CONFIG_SYS_IMMR;
342*ba3da734SChristophe Leroy 	cpm8xx_t __iomem *cp = &immap->im_cpm;
343*ba3da734SChristophe Leroy 	uint __iomem *p = &cp->cp_brgc1;
344debd1f3cSChristophe Leroy 	int i = 1;
345debd1f3cSChristophe Leroy 
346debd1f3cSChristophe Leroy 	while (i <= 4)
347*ba3da734SChristophe Leroy 		prbrg(i++, in_be32(p++));
348debd1f3cSChristophe Leroy 
349debd1f3cSChristophe Leroy 	return 0;
350debd1f3cSChristophe Leroy }
351debd1f3cSChristophe Leroy 
352debd1f3cSChristophe Leroy /***************************************************/
353debd1f3cSChristophe Leroy 
354debd1f3cSChristophe Leroy U_BOOT_CMD(
355debd1f3cSChristophe Leroy 	siuinfo,	1,	1,	do_siuinfo,
356debd1f3cSChristophe Leroy 	"print System Interface Unit (SIU) registers",
357debd1f3cSChristophe Leroy 	""
358debd1f3cSChristophe Leroy );
359debd1f3cSChristophe Leroy 
360debd1f3cSChristophe Leroy U_BOOT_CMD(
361debd1f3cSChristophe Leroy 	memcinfo,	1,	1,	do_memcinfo,
362debd1f3cSChristophe Leroy 	"print Memory Controller registers",
363debd1f3cSChristophe Leroy 	""
364debd1f3cSChristophe Leroy );
365debd1f3cSChristophe Leroy 
366debd1f3cSChristophe Leroy U_BOOT_CMD(
367debd1f3cSChristophe Leroy 	carinfo,	1,	1,	do_carinfo,
368debd1f3cSChristophe Leroy 	"print Clocks and Reset registers",
369debd1f3cSChristophe Leroy 	""
370debd1f3cSChristophe Leroy );
371debd1f3cSChristophe Leroy 
372debd1f3cSChristophe Leroy U_BOOT_CMD(
373debd1f3cSChristophe Leroy 	iopinfo,	1,	1,	do_iopinfo,
374debd1f3cSChristophe Leroy 	"print I/O Port registers",
375debd1f3cSChristophe Leroy 	""
376debd1f3cSChristophe Leroy );
377debd1f3cSChristophe Leroy 
378debd1f3cSChristophe Leroy U_BOOT_CMD(
379debd1f3cSChristophe Leroy 	iopset,	5,	0,	do_iopset,
380debd1f3cSChristophe Leroy 	"set I/O Port registers",
381debd1f3cSChristophe Leroy 	"PORT PIN CMD VALUE\nPORT: A-D, PIN: 0-31, CMD: [dat|dir|odr|sor], VALUE: 0|1"
382debd1f3cSChristophe Leroy );
383debd1f3cSChristophe Leroy 
384debd1f3cSChristophe Leroy U_BOOT_CMD(
385debd1f3cSChristophe Leroy 	brginfo,	1,	1,	do_brginfo,
386debd1f3cSChristophe Leroy 	"print Baud Rate Generator (BRG) registers",
387debd1f3cSChristophe Leroy 	""
388debd1f3cSChristophe Leroy );
389