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