uboot/arch/powerpc/cpu/ppc4xx/reginfo.c
<<
>>
Prefs
   1/*
   2 *(C) Copyright 2005-2009 Netstal Maschinen AG
   3 *    Bruno Hars (Bruno.Hars@netstal.com)
   4 *    Niklaus Giger (Niklaus.Giger@netstal.com)
   5 *
   6 *    This source code is free software; you can redistribute it
   7 *    and/or modify it in source code form under the terms of the GNU
   8 *    General Public License as published by the Free Software
   9 *    Foundation; either version 2 of the License, or (at your option)
  10 *    any later version.
  11 *
  12 *    This program is distributed in the hope that it will be useful,
  13 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15 *    GNU General Public License for more details.
  16 *
  17 *    You should have received a copy of the GNU General Public License
  18 *    along with this program; if not, write to the Free Software
  19 *    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
  20 */
  21
  22/*
  23 * reginfo.c - register dump of HW-configuratin register for PPC4xx based board
  24 */
  25
  26#include <common.h>
  27#include <command.h>
  28#include <asm/processor.h>
  29#include <asm/io.h>
  30#include <asm/ppc4xx-uic.h>
  31#include <ppc4xx_enet.h>
  32
  33enum REGISTER_TYPE {
  34        IDCR1,  /* Indirectly Accessed DCR via SDRAM0_CFGADDR/SDRAM0_CFGDATA */
  35        IDCR2,  /* Indirectly Accessed DCR via EBC0_CFGADDR/EBC0_CFGDATA */
  36        IDCR3,  /* Indirectly Accessed DCR via EBM0_CFGADDR/EBM0_CFGDATA */
  37        IDCR4,  /* Indirectly Accessed DCR via PPM0_CFGADDR/PPM0_CFGDATA */
  38        IDCR5,  /* Indirectly Accessed DCR via CPR0_CFGADDR/CPR0_CFGDATA */
  39        IDCR6,  /* Indirectly Accessed DCR via SDR0_CFGADDR/SDR0_CFGDATA */
  40        MM      /* Directly Accessed MMIO Register */
  41};
  42
  43struct cpu_register {
  44        char *name;
  45        enum REGISTER_TYPE type;
  46        u32 address;
  47};
  48
  49/*
  50 * PPC440EPx registers ordered for output
  51 * name           type    addr            size
  52 * -------------------------------------------
  53 */
  54
  55const struct cpu_register ppc4xx_reg[] = {
  56        {"PB0CR",               IDCR2,  PB0CR},
  57        {"PB0AP",               IDCR2,  PB0AP},
  58        {"PB1CR",               IDCR2,  PB1CR},
  59        {"PB1AP",               IDCR2,  PB1AP},
  60        {"PB2CR",               IDCR2,  PB2CR},
  61        {"PB2AP",               IDCR2,  PB2AP},
  62        {"PB3CR",               IDCR2,  PB3CR},
  63        {"PB3AP",               IDCR2,  PB3AP},
  64
  65        {"PB4CR",               IDCR2,  PB4CR},
  66        {"PB4AP",               IDCR2,  PB4AP},
  67#if !defined(CONFIG_405EP)
  68        {"PB5CR",               IDCR2,  PB5CR},
  69        {"PB5AP",               IDCR2,  PB5AP},
  70        {"PB6CR",               IDCR2,  PB6CR},
  71        {"PB6AP",               IDCR2,  PB6AP},
  72        {"PB7CR",               IDCR2,  PB7CR},
  73        {"PB7AP",               IDCR2,  PB7AP},
  74#endif
  75
  76        {"PBEAR",               IDCR2,  PBEAR},
  77#if defined(CONFIG_405EP) || defined (CONFIG_405GP)
  78        {"PBESR0",              IDCR2,  PBESR0},
  79        {"PBESR1",              IDCR2,  PBESR1},
  80#endif
  81        {"EBC0_CFG",            IDCR2,  EBC0_CFG},
  82
  83#ifdef CONFIG_405GP
  84        {"SDRAM0_BESR0",        IDCR1,  SDRAM0_BESR0},
  85        {"SDRAM0_BESRS0",       IDCR1,  SDRAM0_BESRS0},
  86        {"SDRAM0_BESR1",        IDCR1,  SDRAM0_BESR1},
  87        {"SDRAM0_BESRS1",       IDCR1,  SDRAM0_BESRS1},
  88        {"SDRAM0_BEAR",         IDCR1,  SDRAM0_BEAR},
  89        {"SDRAM0_CFG",          IDCR1,  SDRAM0_CFG},
  90        {"SDRAM0_RTR",          IDCR1,  SDRAM0_RTR},
  91        {"SDRAM0_PMIT",         IDCR1,  SDRAM0_PMIT},
  92
  93        {"SDRAM0_B0CR",         IDCR1,  SDRAM0_B0CR},
  94        {"SDRAM0_B1CR",         IDCR1,  SDRAM0_B1CR},
  95        {"SDRAM0_B2CR",         IDCR1,  SDRAM0_B2CR},
  96        {"SDRAM0_B3CR",         IDCR1,  SDRAM0_B1CR},
  97        {"SDRAM0_TR",           IDCR1,  SDRAM0_TR},
  98        {"SDRAM0_ECCCFG",       IDCR1,  SDRAM0_B1CR},
  99        {"SDRAM0_ECCESR",       IDCR1,  SDRAM0_ECCESR},
 100
 101
 102#endif
 103
 104#ifdef CONFIG_440EPX
 105        {"SDR0_SDSTP0",         IDCR6,  SDR0_SDSTP0},
 106        {"SDR0_SDSTP1",         IDCR6,  SDR0_SDSTP1},
 107        {"SDR0_SDSTP2",         IDCR6,  SDR0_SDSTP2},
 108        {"SDR0_SDSTP3",         IDCR6,  SDR0_SDSTP3},
 109        {"SDR0_CUST0",          IDCR6,  SDR0_CUST0},
 110        {"SDR0_CUST1",          IDCR6,  SDR0_CUST1},
 111        {"SDR0_EBC0",           IDCR6,  SDR0_EBC0},
 112        {"SDR0_AMP0",           IDCR6,  SD0_AMP0},
 113        {"SDR0_AMP1",           IDCR6,  SD0_AMP1},
 114        {"SDR0_CP440",          IDCR6,  SDR0_CP440},
 115        {"SDR0_CRYP0",          IDCR6,  SDR0_CRYP0},
 116        {"SDR0_DDRCFG",         IDCR6,  SDR0_DDRCFG},
 117        {"SDR0_EMAC0RXST",      IDCR6,  SDR0_EMAC0RXST},
 118        {"SDR0_EMAC0TXST",      IDCR6,  SDR0_EMAC0TXST},
 119        {"SDR0_MFR",            IDCR6,  SDR0_MFR},
 120        {"SDR0_PCI0",           IDCR6,  SDR0_PCI0},
 121        {"SDR0_PFC0",           IDCR6,  SDR0_PFC0},
 122        {"SDR0_PFC1",           IDCR6,  SDR0_PFC1},
 123        {"SDR0_PFC2",           IDCR6,  SDR0_PFC2},
 124        {"SDR0_PFC4",           IDCR6,  SDR0_PFC4},
 125        {"SDR0_UART0",          IDCR6,  SDR0_UART0},
 126        {"SDR0_UART1",          IDCR6,  SDR0_UART1},
 127        {"SDR0_UART2",          IDCR6,  SDR0_UART2},
 128        {"SDR0_UART3",          IDCR6,  SDR0_UART3},
 129        {"DDR0_02",             IDCR1,  DDR0_02},
 130        {"DDR0_00",             IDCR1,  DDR0_00},
 131        {"DDR0_01",             IDCR1,  DDR0_01},
 132        {"DDR0_03",             IDCR1,  DDR0_03},
 133        {"DDR0_04",             IDCR1,  DDR0_04},
 134        {"DDR0_05",             IDCR1,  DDR0_05},
 135        {"DDR0_06",             IDCR1,  DDR0_06},
 136        {"DDR0_07",             IDCR1,  DDR0_07},
 137        {"DDR0_08",             IDCR1,  DDR0_08},
 138        {"DDR0_09",             IDCR1,  DDR0_09},
 139        {"DDR0_10",             IDCR1,  DDR0_10},
 140        {"DDR0_11",             IDCR1,  DDR0_11},
 141        {"DDR0_12",             IDCR1,  DDR0_12},
 142        {"DDR0_14",             IDCR1,  DDR0_14},
 143        {"DDR0_17",             IDCR1,  DDR0_17},
 144        {"DDR0_18",             IDCR1,  DDR0_18},
 145        {"DDR0_19",             IDCR1,  DDR0_19},
 146        {"DDR0_20",             IDCR1,  DDR0_20},
 147        {"DDR0_21",             IDCR1,  DDR0_21},
 148        {"DDR0_22",             IDCR1,  DDR0_22},
 149        {"DDR0_23",             IDCR1,  DDR0_23},
 150        {"DDR0_24",             IDCR1,  DDR0_24},
 151        {"DDR0_25",             IDCR1,  DDR0_25},
 152        {"DDR0_26",             IDCR1,  DDR0_26},
 153        {"DDR0_27",             IDCR1,  DDR0_27},
 154        {"DDR0_28",             IDCR1,  DDR0_28},
 155        {"DDR0_31",             IDCR1,  DDR0_31},
 156        {"DDR0_32",             IDCR1,  DDR0_32},
 157        {"DDR0_33",             IDCR1,  DDR0_33},
 158        {"DDR0_34",             IDCR1,  DDR0_34},
 159        {"DDR0_35",             IDCR1,  DDR0_35},
 160        {"DDR0_36",             IDCR1,  DDR0_36},
 161        {"DDR0_37",             IDCR1,  DDR0_37},
 162        {"DDR0_38",             IDCR1,  DDR0_38},
 163        {"DDR0_39",             IDCR1,  DDR0_39},
 164        {"DDR0_40",             IDCR1,  DDR0_40},
 165        {"DDR0_41",             IDCR1,  DDR0_41},
 166        {"DDR0_42",             IDCR1,  DDR0_42},
 167        {"DDR0_43",             IDCR1,  DDR0_43},
 168        {"DDR0_44",             IDCR1,  DDR0_44},
 169        {"CPR0_ICFG",           IDCR5,  CPR0_ICFG},
 170        {"CPR0_MALD",           IDCR5,  CPR0_MALD},
 171        {"CPR0_OPBD00",         IDCR5,  CPR0_OPBD0},
 172        {"CPR0_PERD0",          IDCR5,  CPR0_PERD},
 173        {"CPR0_PLLC0",          IDCR5,  CPR0_PLLC},
 174        {"CPR0_PLLD0",          IDCR5,  CPR0_PLLD},
 175        {"CPR0_PRIMAD0",        IDCR5,  CPR0_PRIMAD0},
 176        {"CPR0_PRIMBD0",        IDCR5,  CPR0_PRIMBD0},
 177        {"CPR0_SPCID",          IDCR5,  CPR0_SPCID},
 178        {"SPI0_MODE",           MM,     SPI0_MODE},
 179        {"IIC0_CLKDIV",         MM,     PCIL0_PMM1MA},
 180        {"PCIL0_PMM0MA",        MM,     PCIL0_PMM0MA},
 181        {"PCIL0_PMM1MA",        MM,     PCIL0_PMM1MA},
 182        {"PCIL0_PTM1LA",        MM,     PCIL0_PMM1MA},
 183        {"PCIL0_PTM1MS",        MM,     PCIL0_PTM1MS},
 184        {"PCIL0_PTM2LA",        MM,     PCIL0_PMM1MA},
 185        {"PCIL0_PTM2MS",        MM,     PCIL0_PTM2MS},
 186        {"ZMII0_FER",           MM,     ZMII0_FER},
 187        {"ZMII0_SSR",           MM,     ZMII0_SSR},
 188        {"EMAC0_IPGVR",         MM,     EMAC0_IPGVR},
 189        {"EMAC0_MR1",           MM,     EMAC0_MR1},
 190        {"EMAC0_PTR",           MM,     EMAC0_PTR},
 191        {"EMAC0_RWMR",          MM,     EMAC0_RWMR},
 192        {"EMAC0_STACR",         MM,     EMAC0_STACR},
 193        {"EMAC0_TMR0",          MM,     EMAC0_TMR0},
 194        {"EMAC0_TMR1",          MM,     EMAC0_TMR1},
 195        {"EMAC0_TRTR",          MM,     EMAC0_TRTR},
 196        {"EMAC1_MR1",           MM,     EMAC1_MR1},
 197        {"GPIO0_OR",            MM,     GPIO0_OR},
 198        {"GPIO1_OR",            MM,     GPIO1_OR},
 199        {"GPIO0_TCR",           MM,     GPIO0_TCR},
 200        {"GPIO1_TCR",           MM,     GPIO1_TCR},
 201        {"GPIO0_ODR",           MM,     GPIO0_ODR},
 202        {"GPIO1_ODR",           MM,     GPIO1_ODR},
 203        {"GPIO0_OSRL",          MM,     GPIO0_OSRL},
 204        {"GPIO0_OSRH",          MM,     GPIO0_OSRH},
 205        {"GPIO1_OSRL",          MM,     GPIO1_OSRL},
 206        {"GPIO1_OSRH",          MM,     GPIO1_OSRH},
 207        {"GPIO0_TSRL",          MM,     GPIO0_TSRL},
 208        {"GPIO0_TSRH",          MM,     GPIO0_TSRH},
 209        {"GPIO1_TSRL",          MM,     GPIO1_TSRL},
 210        {"GPIO1_TSRH",          MM,     GPIO1_TSRH},
 211        {"GPIO0_IR",            MM,     GPIO0_IR},
 212        {"GPIO1_IR",            MM,     GPIO1_IR},
 213        {"GPIO0_ISR1L",         MM,     GPIO0_ISR1L},
 214        {"GPIO0_ISR1H",         MM,     GPIO0_ISR1H},
 215        {"GPIO1_ISR1L",         MM,     GPIO1_ISR1L},
 216        {"GPIO1_ISR1H",         MM,     GPIO1_ISR1H},
 217        {"GPIO0_ISR2L",         MM,     GPIO0_ISR2L},
 218        {"GPIO0_ISR2H",         MM,     GPIO0_ISR2H},
 219        {"GPIO1_ISR2L",         MM,     GPIO1_ISR2L},
 220        {"GPIO1_ISR2H",         MM,     GPIO1_ISR2H},
 221        {"GPIO0_ISR3L",         MM,     GPIO0_ISR3L},
 222        {"GPIO0_ISR3H",         MM,     GPIO0_ISR3H},
 223        {"GPIO1_ISR3L",         MM,     GPIO1_ISR3L},
 224        {"GPIO1_ISR3H",         MM,     GPIO1_ISR3H},
 225        {"SDR0_USB2PHY0CR",     IDCR6,  SDR0_USB2PHY0CR},
 226        {"SDR0_USB2H0CR",       IDCR6,  SDR0_USB2H0CR},
 227        {"SDR0_USB2D0CR",       IDCR6,  SDR0_USB2D0CR},
 228#endif
 229};
 230
 231/*
 232 * CPU Register dump of PPC4xx HW configuration registers
 233 * Output: first all DCR-registers, then in order of struct ppc4xx_reg
 234 */
 235#define PRINT_DCR(dcr)  printf("0x%08x %-16s: 0x%08x\n", dcr,#dcr, mfdcr(dcr));
 236
 237void ppc4xx_reginfo(void)
 238{
 239        unsigned int i;
 240        unsigned int n;
 241        u32 value;
 242        enum REGISTER_TYPE type;
 243#if defined (CONFIG_405EP)
 244        printf("Dump PPC405EP HW configuration registers\n\n");
 245#elif CONFIG_405GP
 246        printf ("Dump 405GP HW configuration registers\n\n");
 247#elif CONFIG_440EPX
 248        printf("Dump PPC440EPx HW configuration registers\n\n");
 249#endif
 250        printf("MSR: 0x%08x\n", mfmsr());
 251
 252        printf ("\nUniversal Interrupt Controller Regs\n");
 253        PRINT_DCR(UIC0SR);
 254        PRINT_DCR(UIC0ER);
 255        PRINT_DCR(UIC0CR);
 256        PRINT_DCR(UIC0PR);
 257        PRINT_DCR(UIC0TR);
 258        PRINT_DCR(UIC0MSR);
 259        PRINT_DCR(UIC0VR);
 260        PRINT_DCR(UIC0VCR);
 261
 262#if (UIC_MAX > 1)
 263        PRINT_DCR(UIC2SR);
 264        PRINT_DCR(UIC2ER);
 265        PRINT_DCR(UIC2CR);
 266        PRINT_DCR(UIC2PR);
 267        PRINT_DCR(UIC2TR);
 268        PRINT_DCR(UIC2MSR);
 269        PRINT_DCR(UIC2VR);
 270        PRINT_DCR(UIC2VCR);
 271#endif
 272
 273#if (UIC_MAX > 2)
 274        PRINT_DCR(UIC2SR);
 275        PRINT_DCR(UIC2ER);
 276        PRINT_DCR(UIC2CR);
 277        PRINT_DCR(UIC2PR);
 278        PRINT_DCR(UIC2TR);
 279        PRINT_DCR(UIC2MSR);
 280        PRINT_DCR(UIC2VR);
 281        PRINT_DCR(UIC2VCR);
 282#endif
 283
 284#if (UIC_MAX > 3)
 285        PRINT_DCR(UIC3SR);
 286        PRINT_DCR(UIC3ER);
 287        PRINT_DCR(UIC3CR);
 288        PRINT_DCR(UIC3PR);
 289        PRINT_DCR(UIC3TR);
 290        PRINT_DCR(UIC3MSR);
 291        PRINT_DCR(UIC3VR);
 292        PRINT_DCR(UIC3VCR);
 293#endif
 294
 295#if defined (CONFIG_405EP) || defined (CONFIG_405GP)
 296        printf ("\n\nDMA Channels\n");
 297        PRINT_DCR(DMASR);
 298        PRINT_DCR(DMASGC);
 299        PRINT_DCR(DMAADR);
 300
 301        PRINT_DCR(DMACR0);
 302        PRINT_DCR(DMACT0);
 303        PRINT_DCR(DMADA0);
 304        PRINT_DCR(DMASA0);
 305        PRINT_DCR(DMASB0);
 306
 307        PRINT_DCR(DMACR1);
 308        PRINT_DCR(DMACT1);
 309        PRINT_DCR(DMADA1);
 310        PRINT_DCR(DMASA1);
 311        PRINT_DCR(DMASB1);
 312
 313        PRINT_DCR(DMACR2);
 314        PRINT_DCR(DMACT2);
 315        PRINT_DCR(DMADA2);
 316        PRINT_DCR(DMASA2);
 317        PRINT_DCR(DMASB2);
 318
 319        PRINT_DCR(DMACR3);
 320        PRINT_DCR(DMACT3);
 321        PRINT_DCR(DMADA3);
 322        PRINT_DCR(DMASA3);
 323        PRINT_DCR(DMASB3);
 324#endif
 325
 326        printf ("\n\nVarious HW-Configuration registers\n");
 327#if defined (CONFIG_440EPX)
 328        PRINT_DCR(MAL0_CFG);
 329        PRINT_DCR(CPM0_ER);
 330        PRINT_DCR(CPM1_ER);
 331        PRINT_DCR(PLB4A0_ACR);
 332        PRINT_DCR(PLB4A1_ACR);
 333        PRINT_DCR(PLB3A0_ACR);
 334        PRINT_DCR(OPB2PLB40_BCTRL);
 335        PRINT_DCR(P4P3BO0_CFG);
 336#endif
 337        n = sizeof(ppc4xx_reg) / sizeof(ppc4xx_reg[0]);
 338        for (i = 0; i < n; i++) {
 339                value = 0;
 340                type = ppc4xx_reg[i].type;
 341                switch (type) {
 342                case IDCR1:     /* Indirect via SDRAM0_CFGADDR/DDR0_CFGDATA */
 343                        mtdcr(SDRAM0_CFGADDR, ppc4xx_reg[i].address);
 344                        value = mfdcr(SDRAM0_CFGDATA);
 345                        break;
 346                case IDCR2:     /* Indirect via EBC0_CFGADDR/EBC0_CFGDATA */
 347                        mtdcr(EBC0_CFGADDR, ppc4xx_reg[i].address);
 348                        value = mfdcr(EBC0_CFGDATA);
 349                        break;
 350                case IDCR5:     /* Indirect via CPR0_CFGADDR/CPR0_CFGDATA */
 351                        mtdcr(CPR0_CFGADDR, ppc4xx_reg[i].address);
 352                        value = mfdcr(CPR0_CFGDATA);
 353                        break;
 354                case IDCR6:     /* Indirect via SDR0_CFGADDR/SDR0_CFGDATA */
 355                        mtdcr(SDR0_CFGADDR, ppc4xx_reg[i].address);
 356                        value = mfdcr(SDR0_CFGDATA);
 357                        break;
 358                case MM:        /* Directly Accessed MMIO Register */
 359                        value = in_be32((const volatile unsigned __iomem *)
 360                                ppc4xx_reg[i].address);
 361                        break;
 362                default:
 363                        printf("\nERROR: struct entry %d: unknown register"
 364                                "type\n", i);
 365                        break;
 366                }
 367                printf("0x%08x %-16s: 0x%08x\n",ppc4xx_reg[i].address,
 368                        ppc4xx_reg[i].name, value);
 369        }
 370}
 371