diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/include/cpu/amd/sc520.h | 311 |
1 files changed, 311 insertions, 0 deletions
diff --git a/src/include/cpu/amd/sc520.h b/src/include/cpu/amd/sc520.h new file mode 100644 index 0000000000..b0fa5680b7 --- /dev/null +++ b/src/include/cpu/amd/sc520.h @@ -0,0 +1,311 @@ +/* handy dandy stuff for the sc520 MMCR */ +/* default location of the MMCR */ +#define MMCR 0xfffef000 + +/* the PAR register struct definition, the location in memory, + * and a handy pointer for you to use + */ + +struct parreg { + unsigned long reg[16]; +}; + +#define PARREG (struct parreg *)0xfffef088 +//static volatile struct parreg *par = PARREG; + + +#define MMCRPIC (struct mmcrpic *) 0xfffefd00 +//static volatile struct mmcrpic *pic = MMCRPIC; + +#define M_GINT_MODE 1 +#define M_S1_MODE 2 +#define M_S2_MODE 4 + + +/* here is the real mmcr struct */ + +struct memregs { + /* make these shorts, we are lsb and the hardware seems to like it + * better + */ + unsigned short drcctl; + unsigned short drctmctl; + unsigned short drccfg; + unsigned char pad1[2]; + unsigned char drcbendadr[4]; + unsigned char pad2[4]; + unsigned char eccctl; + unsigned char eccsta; + unsigned char eccckbpos; + unsigned char ecccktest; + unsigned long eccsbadd; + unsigned long eccmbadd; + unsigned char pad3[18]; +}; +struct dbctl { + unsigned char dbctl; + unsigned char pad4[15]; +}; + +struct romregs { + unsigned char bootcs; + unsigned char pad5[3]; + unsigned char romcs1; + unsigned char pad6[1]; + unsigned char romcs2; + unsigned char pad7[6]; +}; + + +struct hostbridge { + unsigned short ctl; + unsigned short tgtirqctl; + unsigned short tgtirqsta; + unsigned short mstirqctl; + unsigned short mstirqsta; + unsigned char pad8[2]; + unsigned long mstintadd; +}; + +struct sysarb { + unsigned char ctl; + unsigned char sta; + unsigned char menb; + unsigned long prictl; + unsigned char pad9[8]; +}; + +struct sysmap { + unsigned char adddecctl; + unsigned char pada[1]; + unsigned short wpvsta; + unsigned char padb[4]; + unsigned long par[16]; + unsigned char padc[0xb38]; +}; + +struct gpctl { + unsigned char gpecho; + unsigned char gpcsdw; + unsigned char gpcsqual; + unsigned char padd[5]; + unsigned char gpcsrt; + unsigned char gpcspw; + unsigned char gpcsoff; + unsigned char gprdw; + unsigned char gprdoff; + unsigned char gpwrw; + unsigned char gpwroff; + unsigned char gpalew; + unsigned char gpaleoff; + unsigned char pade[15]; +}; + +struct pio { + unsigned short pfs15_0; + unsigned short pfs31_16; + unsigned char cspfs; + unsigned char padf[1]; + unsigned char clksel; + unsigned char padg[1]; + unsigned short dsctl; + unsigned short dir15_0; + unsigned short dir31_16; + unsigned short padh; + unsigned short data15_0; + unsigned short data31_16; + unsigned short set15_0; + unsigned short set31_16; + unsigned short clr15_0; + unsigned short clr31_16; + unsigned char padi[0x24]; +}; + +struct swtmr { + unsigned short swtmrmilli; + unsigned short swtmrmicro; + unsigned char swtmrcfg; + unsigned char padj[0xb]; +}; + +struct gptmr { + unsigned short ctl; + unsigned short cnt; + unsigned short maxcmpa, maxcmpb; +}; + +struct gptimers { + unsigned char status; + unsigned char pad; + struct gptmr timer[2]; + /* yes, they REALLY DID make timer 2 different. */ + /* yikes */ + unsigned short ctl2; + unsigned short cnt2; + unsigned char paddumb[8]; + unsigned short maxcmpa2; + + unsigned char pada[0x20]; +}; + +struct watchdog { + unsigned short ctl; + unsigned short cntll; + unsigned short cntlh; + unsigned char pad[10]; +}; + +struct uart { + unsigned char ctl, sta, fcrshad, pad; +}; + +struct uarts { + struct uart uart[2]; + unsigned char pad[8]; +}; + +struct ssi { + unsigned char ctl, xmit, cmd, sta, rcv; + unsigned char pad[0x2b]; +}; + + +/* interrupt control registers */ +/* defined this way for portability. Shame we can't just use plan 9 c. */ +struct pic { + unsigned char pcicr; + unsigned char pad1; + unsigned char mpicmode; + unsigned char sl1picmode; + unsigned char sl2picmode; + unsigned char pad2[3]; + unsigned char swint16_1; + unsigned char pad3; + unsigned char swint22_17; + unsigned char pad4[5]; + unsigned short intpinpol; + unsigned char pad5[2]; + unsigned char pichostmap; + unsigned char pad6[3]; + unsigned char eccmap; + unsigned char pad7[1]; + unsigned char gptmr0map; + unsigned char gptmr1map; + unsigned char gptmr2map; + unsigned char pad8[3]; + unsigned char pit0map; + unsigned char pit1map; + unsigned char pit2map; + unsigned char pad9[5]; + unsigned char uart1map; + unsigned char uart2map; + unsigned char pad99[6]; + unsigned char pciintamap; + unsigned char pciintbmap; + unsigned char pciintcmap; + unsigned char pciintdmap; + unsigned char pad10[12]; + unsigned char dmabcintmap; + unsigned char ssimap; + unsigned char wdtmap; + unsigned char rtcmap; + unsigned char wpvmap; + unsigned char icemap; + unsigned char ferrmap; + unsigned char pad11[9]; + unsigned char gp0imap; + unsigned char gp1imap; + unsigned char gp2imap; + unsigned char gp3imap; + unsigned char gp4imap; + unsigned char gp5imap; + unsigned char gp6imap; + unsigned char gp7imap; + unsigned char gp8imap; + unsigned char gp9imap; + unsigned char gp10imap; + unsigned char padend[0x14]; +}; + +struct reset { + unsigned char sysinfo; + unsigned char pad1; + unsigned char rescfg; + unsigned char pad2; + unsigned char ressta; + unsigned char pad3[0xb]; +}; + +struct dmacontrol { + unsigned char ctl; + unsigned char mmio; + unsigned short extchanmapa; + unsigned short extchanmapb; + unsigned char extpg0; + unsigned char extpg1; + unsigned char extpg2; + unsigned char extpg3; + unsigned char extpg5; + unsigned char extpg6; + unsigned char extpg7; + unsigned char pad[3]; + unsigned char exttc3; + unsigned char exttc5; + unsigned char exttc6; + unsigned char exttc7; + unsigned char pad1[4]; + unsigned char bcctl; + unsigned char bcsta; + unsigned char bsintenb; + unsigned char bcval; + unsigned char pad2[4]; + unsigned short nxtaddl3; + unsigned short nxtaddh3; + unsigned short nxtaddl5; + unsigned short nxtaddh5; + unsigned short nxtaddl6; + unsigned short nxtaddh6; + unsigned short nxtaddl7; + unsigned short nxtaddh7; + unsigned short nxtttcl3; + unsigned char nxtttch3; + unsigned char pad3; + unsigned short nxtttcl5; + unsigned char nxtttch5; + unsigned char pad5; + unsigned short nxtttcl6; + unsigned char nxtttch6; + unsigned char pad6; + unsigned short nxtttcl7; + unsigned char nxtttch7; + unsigned char pad7; +}; + + + + +struct mmcr { + unsigned short revid; + unsigned char cpucontrol; + unsigned char pad1[11]; + struct memregs memregs; + struct dbctl dbctl; + struct romregs romregs; + struct hostbridge hostbridge; + struct sysarb sysarb; + struct sysmap sysmap; + struct gpctl gpctl; + struct pio pio; + struct swtmr swtmr; + struct gptimers gptimers; + struct watchdog watchdog; + struct uarts uarts; + struct ssi ssi; + struct pic pic; + struct reset reset; + struct dmacontrol dmacontrol; + unsigned char padend[0x23d]; +}; + + +#define MMCRDEFAULT (struct mmcr *) 0xfffef000 |