/*System MMR Declaration*/
#define SYS_BASE           0x01C14000
#define DIEID0             *(unsigned int*)(SYS_BASE + 0x008)
#define DIEID1             *(unsigned int*)(SYS_BASE + 0x00C)
#define DIEID2             *(unsigned int*)(SYS_BASE + 0x010)
#define DIEID3             *(unsigned int*)(SYS_BASE + 0x014)
#define DEVID0             *(unsigned int*)(SYS_BASE + 0x018)
#define DEVID1             *(unsigned int*)(SYS_BASE + 0x01C)
#define BOOT               *(unsigned int*)(SYS_BASE + 0x020)
#define CHIPREV            *(unsigned int*)(SYS_BASE + 0x024)
#define FEATURE            *(unsigned int*)(SYS_BASE + 0x028)
#define L2ROMDIV           *(unsigned int*)(SYS_BASE + 0x02C)
#define DEVX               ((DIEID0>>0) & 0xFFF)
#define DEVY               ((DIEID0>>12) & 0xFFF)
#define WAFER              ((DIEID0>>24) & 0x3F)
#define LOT                ((DIEID1>>0) & 0xFFFFFF)
#define FAB1               ((DIEID1>>24) & 0x1F)
#define FAB2               ((DIEID1>>29) & 0x7)
#define SIREV              ((DIEID3>>0) & 0x1F)
#define REPAIR             ((DIEID3>>5) & 0x1)
#define MAKE               ((DIEID3>>6) & 0x7FF)
#define CHKSUM             ((DIEID3>>17) & 0x3FFF)
#define KEY_BASE           0x01C12000
#define KEY_STAT           *(unsigned int*)(KEY_BASE + 0x004)
#define KEY_CHKSUM         *(unsigned int*)(KEY_BASE + 0x008)
#define FUSE_CODE          ((KEY_STAT>>8) & 0x1F)
#define DSP_ROM1           *(unsigned int*)(0x11700008)
#define DSP_ROM2           *(unsigned int*)(0x1170000C)
#define ARM_ROM1           *(unsigned int*)(0xFFFD0008)
#define ARM_ROM2           *(unsigned int*)(0xFFFD000C)

hotmenu GetDevInfo()
{
    int j;
    char k = 65;

    GEL_TextOut("***********************************************\n","Output",1,1,1);
    GEL_TextOut("DEVID0 = %x\n","Output",1,1,1,DEVID0);
    GEL_TextOut("DEVID1 = %x\n","Output",1,1,1,DEVID1);
    GEL_TextOut("BOOT = %x\n","Output",1,1,1,BOOT);
    GEL_TextOut("CHIPREV = %x\n","Output",1,1,1,CHIPREV);
    GEL_TextOut("FEATURE = %x\n","Output",1,1,1,FEATURE);
    GEL_TextOut("L2ROMDIV = %x\n","Output",1,1,1,L2ROMDIV);
    GEL_TextOut("DIEID2 = %x\n","Output",1,1,1,DIEID2);
    GEL_TextOut("FAB1-FAB0-LOT-WFR-X-Y = %d-%d-%d-%d-%d-%d\n","Output",1,1,1,FAB1,FAB2,LOT,WAFER,DEVX,DEVY);
    GEL_TextOut("SIREV,REPAIR,MAKE,CHKSUM = %d,%d,%d,%d\n","Output",1,1,1,SIREV,REPAIR,MAKE,CHKSUM);
    GEL_TextOut("-----\n","Output",1,1,1);
    GEL_TextOut("KEY STAT = %x\n","Output",1,1,1,KEY_STAT);
    GEL_TextOut("KEY CHKSUM = %x\n","Output",1,1,1,KEY_CHKSUM);
    GEL_TextOut("FUSE CODE = ","Output",1,1,1);
    for(j=4;j>=0;j--) {
      GEL_TextOut("%d","Output",1,1,1,((FUSE_CODE>>j) & 0x1));
    }
    GEL_TextOut("\n","Output",1,1,1);
    GEL_TextOut("-----\n","Output",1,1,1);
    GEL_TextOut("DSP_ROM1 = %x\n","Output",1,1,1,DSP_ROM1);
    GEL_TextOut("DSP_ROM2 = %x\n","Output",1,1,1,DSP_ROM2);
    GEL_TextOut("ARM_ROM1 = %x\n","Output",1,1,1,ARM_ROM1);
    GEL_TextOut("ARM_ROM2 = %x\n","Output",1,1,1,ARM_ROM2);
    GEL_TextOut("-----\n","Output",1,1,1);
    GEL_TextOut("DIEID0 = %x\n","Output",1,1,1,DIEID0);
    GEL_TextOut("DIEID1 = %x\n","Output",1,1,1,DIEID1);
    GEL_TextOut("DIEID2 = %x\n","Output",1,1,1,DIEID2);
    GEL_TextOut("DIEID3 = %x\n","Output",1,1,1,DIEID3);
    GEL_TextOut("***********************************************\n","Output",1,1,1);
}
