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