cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

8xx_immap.h (14099B)


      1/*
      2 * MPC8xx Internal Memory Map
      3 * Copyright (c) 1997 Dan Malek (dmalek@jlc.net)
      4 *
      5 * The I/O on the MPC860 is comprised of blocks of special registers
      6 * and the dual port ram for the Communication Processor Module.
      7 * Within this space are functional units such as the SIU, memory
      8 * controller, system timers, and other control functions.  It is
      9 * a combination that I found difficult to separate into logical
     10 * functional files.....but anyone else is welcome to try.  -- Dan
     11 */
     12#ifdef __KERNEL__
     13#ifndef __IMMAP_8XX__
     14#define __IMMAP_8XX__
     15
     16/* System configuration registers.
     17*/
     18typedef	struct sys_conf {
     19	uint	sc_siumcr;
     20	uint	sc_sypcr;
     21	uint	sc_swt;
     22	char	res1[2];
     23	ushort	sc_swsr;
     24	uint	sc_sipend;
     25	uint	sc_simask;
     26	uint	sc_siel;
     27	uint	sc_sivec;
     28	uint	sc_tesr;
     29	char	res2[0xc];
     30	uint	sc_sdcr;
     31	char	res3[0x4c];
     32} sysconf8xx_t;
     33
     34/* PCMCIA configuration registers.
     35*/
     36typedef struct pcmcia_conf {
     37	uint	pcmc_pbr0;
     38	uint	pcmc_por0;
     39	uint	pcmc_pbr1;
     40	uint	pcmc_por1;
     41	uint	pcmc_pbr2;
     42	uint	pcmc_por2;
     43	uint	pcmc_pbr3;
     44	uint	pcmc_por3;
     45	uint	pcmc_pbr4;
     46	uint	pcmc_por4;
     47	uint	pcmc_pbr5;
     48	uint	pcmc_por5;
     49	uint	pcmc_pbr6;
     50	uint	pcmc_por6;
     51	uint	pcmc_pbr7;
     52	uint	pcmc_por7;
     53	char	res1[0x20];
     54	uint	pcmc_pgcra;
     55	uint	pcmc_pgcrb;
     56	uint	pcmc_pscr;
     57	char	res2[4];
     58	uint	pcmc_pipr;
     59	char	res3[4];
     60	uint	pcmc_per;
     61	char	res4[4];
     62} pcmconf8xx_t;
     63
     64/* Memory controller registers.
     65*/
     66typedef struct	mem_ctlr {
     67	uint	memc_br0;
     68	uint	memc_or0;
     69	uint	memc_br1;
     70	uint	memc_or1;
     71	uint	memc_br2;
     72	uint	memc_or2;
     73	uint	memc_br3;
     74	uint	memc_or3;
     75	uint	memc_br4;
     76	uint	memc_or4;
     77	uint	memc_br5;
     78	uint	memc_or5;
     79	uint	memc_br6;
     80	uint	memc_or6;
     81	uint	memc_br7;
     82	uint	memc_or7;
     83	char	res1[0x24];
     84	uint	memc_mar;
     85	uint	memc_mcr;
     86	char	res2[4];
     87	uint	memc_mamr;
     88	uint	memc_mbmr;
     89	ushort	memc_mstat;
     90	ushort	memc_mptpr;
     91	uint	memc_mdr;
     92	char	res3[0x80];
     93} memctl8xx_t;
     94
     95/*-----------------------------------------------------------------------
     96 * BR - Memory Controller: Base Register					16-9
     97 */
     98#define BR_BA_MSK	0xffff8000	/* Base Address Mask			*/
     99#define BR_AT_MSK	0x00007000	/* Address Type Mask			*/
    100#define BR_PS_MSK	0x00000c00	/* Port Size Mask			*/
    101#define BR_PS_32	0x00000000	/* 32 bit port size			*/
    102#define BR_PS_16	0x00000800	/* 16 bit port size			*/
    103#define BR_PS_8		0x00000400	/*  8 bit port size			*/
    104#define BR_PARE		0x00000200	/* Parity Enable			*/
    105#define BR_WP		0x00000100	/* Write Protect			*/
    106#define BR_MS_MSK	0x000000c0	/* Machine Select Mask			*/
    107#define BR_MS_GPCM	0x00000000	/* G.P.C.M. Machine Select		*/
    108#define BR_MS_UPMA	0x00000080	/* U.P.M.A Machine Select		*/
    109#define BR_MS_UPMB	0x000000c0	/* U.P.M.B Machine Select		*/
    110#define BR_V		0x00000001	/* Bank Valid				*/
    111
    112/*-----------------------------------------------------------------------
    113 * OR - Memory Controller: Option Register				16-11
    114 */
    115#define OR_AM_MSK	0xffff8000	/* Address Mask Mask			*/
    116#define OR_ATM_MSK	0x00007000	/* Address Type Mask Mask		*/
    117#define OR_CSNT_SAM	0x00000800	/* Chip Select Negation Time/ Start	*/
    118					/* Address Multiplex			*/
    119#define OR_ACS_MSK	0x00000600	/* Address to Chip Select Setup mask	*/
    120#define OR_ACS_DIV1	0x00000000	/* CS is output at the same time	*/
    121#define OR_ACS_DIV4	0x00000400	/* CS is output 1/4 a clock later	*/
    122#define OR_ACS_DIV2	0x00000600	/* CS is output 1/2 a clock later	*/
    123#define OR_G5LA		0x00000400	/* Output #GPL5 on #GPL_A5		*/
    124#define OR_G5LS		0x00000200	/* Drive #GPL high on falling edge of...*/
    125#define OR_BI		0x00000100	/* Burst inhibit			*/
    126#define OR_SCY_MSK	0x000000f0	/* Cycle Length in Clocks		*/
    127#define OR_SCY_0_CLK	0x00000000	/* 0 clock cycles wait states		*/
    128#define OR_SCY_1_CLK	0x00000010	/* 1 clock cycles wait states		*/
    129#define OR_SCY_2_CLK	0x00000020	/* 2 clock cycles wait states		*/
    130#define OR_SCY_3_CLK	0x00000030	/* 3 clock cycles wait states		*/
    131#define OR_SCY_4_CLK	0x00000040	/* 4 clock cycles wait states		*/
    132#define OR_SCY_5_CLK	0x00000050	/* 5 clock cycles wait states		*/
    133#define OR_SCY_6_CLK	0x00000060	/* 6 clock cycles wait states		*/
    134#define OR_SCY_7_CLK	0x00000070	/* 7 clock cycles wait states		*/
    135#define OR_SCY_8_CLK	0x00000080	/* 8 clock cycles wait states		*/
    136#define OR_SCY_9_CLK	0x00000090	/* 9 clock cycles wait states		*/
    137#define OR_SCY_10_CLK	0x000000a0	/* 10 clock cycles wait states		*/
    138#define OR_SCY_11_CLK	0x000000b0	/* 11 clock cycles wait states		*/
    139#define OR_SCY_12_CLK	0x000000c0	/* 12 clock cycles wait states		*/
    140#define OR_SCY_13_CLK	0x000000d0	/* 13 clock cycles wait states		*/
    141#define OR_SCY_14_CLK	0x000000e0	/* 14 clock cycles wait states		*/
    142#define OR_SCY_15_CLK	0x000000f0	/* 15 clock cycles wait states		*/
    143#define OR_SETA		0x00000008	/* External Transfer Acknowledge	*/
    144#define OR_TRLX		0x00000004	/* Timing Relaxed			*/
    145#define OR_EHTR		0x00000002	/* Extended Hold Time on Read		*/
    146
    147/* System Integration Timers.
    148*/
    149typedef struct	sys_int_timers {
    150	ushort	sit_tbscr;
    151	char	res0[0x02];
    152	uint	sit_tbreff0;
    153	uint	sit_tbreff1;
    154	char	res1[0x14];
    155	ushort	sit_rtcsc;
    156	char	res2[0x02];
    157	uint	sit_rtc;
    158	uint	sit_rtsec;
    159	uint	sit_rtcal;
    160	char	res3[0x10];
    161	ushort	sit_piscr;
    162	char	res4[2];
    163	uint	sit_pitc;
    164	uint	sit_pitr;
    165	char	res5[0x34];
    166} sit8xx_t;
    167
    168#define TBSCR_TBIRQ_MASK	((ushort)0xff00)
    169#define TBSCR_REFA		((ushort)0x0080)
    170#define TBSCR_REFB		((ushort)0x0040)
    171#define TBSCR_REFAE		((ushort)0x0008)
    172#define TBSCR_REFBE		((ushort)0x0004)
    173#define TBSCR_TBF		((ushort)0x0002)
    174#define TBSCR_TBE		((ushort)0x0001)
    175
    176#define RTCSC_RTCIRQ_MASK	((ushort)0xff00)
    177#define RTCSC_SEC		((ushort)0x0080)
    178#define RTCSC_ALR		((ushort)0x0040)
    179#define RTCSC_38K		((ushort)0x0010)
    180#define RTCSC_SIE		((ushort)0x0008)
    181#define RTCSC_ALE		((ushort)0x0004)
    182#define RTCSC_RTF		((ushort)0x0002)
    183#define RTCSC_RTE		((ushort)0x0001)
    184
    185#define PISCR_PIRQ_MASK		((ushort)0xff00)
    186#define PISCR_PS		((ushort)0x0080)
    187#define PISCR_PIE		((ushort)0x0004)
    188#define PISCR_PTF		((ushort)0x0002)
    189#define PISCR_PTE		((ushort)0x0001)
    190
    191/* Clocks and Reset.
    192*/
    193typedef struct clk_and_reset {
    194	uint	car_sccr;
    195	uint	car_plprcr;
    196	uint	car_rsr;
    197	char	res[0x74];        /* Reserved area                  */
    198} car8xx_t;
    199
    200/* System Integration Timers keys.
    201*/
    202typedef struct sitk {
    203	uint	sitk_tbscrk;
    204	uint	sitk_tbreff0k;
    205	uint	sitk_tbreff1k;
    206	uint	sitk_tbk;
    207	char	res1[0x10];
    208	uint	sitk_rtcsck;
    209	uint	sitk_rtck;
    210	uint	sitk_rtseck;
    211	uint	sitk_rtcalk;
    212	char	res2[0x10];
    213	uint	sitk_piscrk;
    214	uint	sitk_pitck;
    215	char	res3[0x38];
    216} sitk8xx_t;
    217
    218/* Clocks and reset keys.
    219*/
    220typedef struct cark {
    221	uint	cark_sccrk;
    222	uint	cark_plprcrk;
    223	uint	cark_rsrk;
    224	char	res[0x474];
    225} cark8xx_t;
    226
    227/* The key to unlock registers maintained by keep-alive power.
    228*/
    229#define KAPWR_KEY	((unsigned int)0x55ccaa33)
    230
    231/* Video interface.  MPC823 Only.
    232*/
    233typedef struct vid823 {
    234	ushort	vid_vccr;
    235	ushort	res1;
    236	u_char	vid_vsr;
    237	u_char	res2;
    238	u_char	vid_vcmr;
    239	u_char	res3;
    240	uint	vid_vbcb;
    241	uint	res4;
    242	uint	vid_vfcr0;
    243	uint	vid_vfaa0;
    244	uint	vid_vfba0;
    245	uint	vid_vfcr1;
    246	uint	vid_vfaa1;
    247	uint	vid_vfba1;
    248	u_char	res5[0x18];
    249} vid823_t;
    250
    251/* LCD interface.  823 Only.
    252*/
    253typedef struct lcd {
    254	uint	lcd_lccr;
    255	uint	lcd_lchcr;
    256	uint	lcd_lcvcr;
    257	char	res1[4];
    258	uint	lcd_lcfaa;
    259	uint	lcd_lcfba;
    260	char	lcd_lcsr;
    261	char	res2[0x7];
    262} lcd823_t;
    263
    264/* I2C
    265*/
    266typedef struct i2c {
    267	u_char	i2c_i2mod;
    268	char	res1[3];
    269	u_char	i2c_i2add;
    270	char	res2[3];
    271	u_char	i2c_i2brg;
    272	char	res3[3];
    273	u_char	i2c_i2com;
    274	char	res4[3];
    275	u_char	i2c_i2cer;
    276	char	res5[3];
    277	u_char	i2c_i2cmr;
    278	char	res6[0x8b];
    279} i2c8xx_t;
    280
    281/* DMA control/status registers.
    282*/
    283typedef struct sdma_csr {
    284	char	res1[4];
    285	uint	sdma_sdar;
    286	u_char	sdma_sdsr;
    287	char	res3[3];
    288	u_char	sdma_sdmr;
    289	char	res4[3];
    290	u_char	sdma_idsr1;
    291	char	res5[3];
    292	u_char	sdma_idmr1;
    293	char	res6[3];
    294	u_char	sdma_idsr2;
    295	char	res7[3];
    296	u_char	sdma_idmr2;
    297	char	res8[0x13];
    298} sdma8xx_t;
    299
    300/* Communication Processor Module Interrupt Controller.
    301*/
    302typedef struct cpm_ic {
    303	ushort	cpic_civr;
    304	char	res[0xe];
    305	uint	cpic_cicr;
    306	uint	cpic_cipr;
    307	uint	cpic_cimr;
    308	uint	cpic_cisr;
    309} cpic8xx_t;
    310
    311/* Input/Output Port control/status registers.
    312*/
    313typedef struct io_port {
    314	ushort	iop_padir;
    315	ushort	iop_papar;
    316	ushort	iop_paodr;
    317	ushort	iop_padat;
    318	char	res1[8];
    319	ushort	iop_pcdir;
    320	ushort	iop_pcpar;
    321	ushort	iop_pcso;
    322	ushort	iop_pcdat;
    323	ushort	iop_pcint;
    324	char	res2[6];
    325	ushort	iop_pddir;
    326	ushort	iop_pdpar;
    327	char	res3[2];
    328	ushort	iop_pddat;
    329	uint	utmode;
    330	char	res4[4];
    331} iop8xx_t;
    332
    333/* Communication Processor Module Timers
    334*/
    335typedef struct cpm_timers {
    336	ushort	cpmt_tgcr;
    337	char	res1[0xe];
    338	ushort	cpmt_tmr1;
    339	ushort	cpmt_tmr2;
    340	ushort	cpmt_trr1;
    341	ushort	cpmt_trr2;
    342	ushort	cpmt_tcr1;
    343	ushort	cpmt_tcr2;
    344	ushort	cpmt_tcn1;
    345	ushort	cpmt_tcn2;
    346	ushort	cpmt_tmr3;
    347	ushort	cpmt_tmr4;
    348	ushort	cpmt_trr3;
    349	ushort	cpmt_trr4;
    350	ushort	cpmt_tcr3;
    351	ushort	cpmt_tcr4;
    352	ushort	cpmt_tcn3;
    353	ushort	cpmt_tcn4;
    354	ushort	cpmt_ter1;
    355	ushort	cpmt_ter2;
    356	ushort	cpmt_ter3;
    357	ushort	cpmt_ter4;
    358	char	res2[8];
    359} cpmtimer8xx_t;
    360
    361/* Finally, the Communication Processor stuff.....
    362*/
    363typedef struct scc {		/* Serial communication channels */
    364	uint	scc_gsmrl;
    365	uint	scc_gsmrh;
    366	ushort	scc_psmr;
    367	char	res1[2];
    368	ushort	scc_todr;
    369	ushort	scc_dsr;
    370	ushort	scc_scce;
    371	char	res2[2];
    372	ushort	scc_sccm;
    373	char	res3;
    374	u_char	scc_sccs;
    375	char	res4[8];
    376} scc_t;
    377
    378typedef struct smc {		/* Serial management channels */
    379	char	res1[2];
    380	ushort	smc_smcmr;
    381	char	res2[2];
    382	u_char	smc_smce;
    383	char	res3[3];
    384	u_char	smc_smcm;
    385	char	res4[5];
    386} smc_t;
    387
    388/* MPC860T Fast Ethernet Controller.  It isn't part of the CPM, but
    389 * it fits within the address space.
    390 */
    391
    392typedef struct fec {
    393	uint	fec_addr_low;		/* lower 32 bits of station address	*/
    394	ushort	fec_addr_high;		/* upper 16 bits of station address	*/
    395	ushort	res1;			/* reserved				*/
    396	uint	fec_grp_hash_table_high;	/* upper 32-bits of hash table		*/
    397	uint	fec_grp_hash_table_low;	/* lower 32-bits of hash table		*/
    398	uint	fec_r_des_start;	/* beginning of Rx descriptor ring	*/
    399	uint	fec_x_des_start;	/* beginning of Tx descriptor ring	*/
    400	uint	fec_r_buff_size;	/* Rx buffer size			*/
    401	uint	res2[9];		/* reserved				*/
    402	uint	fec_ecntrl;		/* ethernet control register		*/
    403	uint	fec_ievent;		/* interrupt event register		*/
    404	uint	fec_imask;		/* interrupt mask register		*/
    405	uint	fec_ivec;		/* interrupt level and vector status	*/
    406	uint	fec_r_des_active;	/* Rx ring updated flag			*/
    407	uint	fec_x_des_active;	/* Tx ring updated flag			*/
    408	uint	res3[10];		/* reserved				*/
    409	uint	fec_mii_data;		/* MII data register			*/
    410	uint	fec_mii_speed;		/* MII speed control register		*/
    411	uint	res4[17];		/* reserved				*/
    412	uint	fec_r_bound;		/* end of RAM (read-only)		*/
    413	uint	fec_r_fstart;		/* Rx FIFO start address		*/
    414	uint	res5[6];		/* reserved				*/
    415	uint	fec_x_fstart;		/* Tx FIFO start address		*/
    416	uint	res6[17];		/* reserved				*/
    417	uint	fec_fun_code;		/* fec SDMA function code		*/
    418	uint	res7[3];		/* reserved				*/
    419	uint	fec_r_cntrl;		/* Rx control register			*/
    420	uint	fec_r_hash;		/* Rx hash register			*/
    421	uint	res8[14];		/* reserved				*/
    422	uint	fec_x_cntrl;		/* Tx control register			*/
    423	uint	res9[0x1e];		/* reserved				*/
    424} fec_t;
    425
    426/* The FEC and LCD color map share the same address space....
    427 * I guess we will never see an 823T :-).
    428 */
    429union fec_lcd {
    430	fec_t	fl_un_fec;
    431	u_char	fl_un_cmap[0x200];
    432};
    433
    434typedef struct comm_proc {
    435	/* General control and status registers.
    436	*/
    437	ushort	cp_cpcr;
    438	u_char	res1[2];
    439	ushort	cp_rccr;
    440	u_char	res2;
    441	u_char	cp_rmds;
    442	u_char	res3[4];
    443	ushort	cp_cpmcr1;
    444	ushort	cp_cpmcr2;
    445	ushort	cp_cpmcr3;
    446	ushort	cp_cpmcr4;
    447	u_char	res4[2];
    448	ushort	cp_rter;
    449	u_char	res5[2];
    450	ushort	cp_rtmr;
    451	u_char	res6[0x14];
    452
    453	/* Baud rate generators.
    454	*/
    455	uint	cp_brgc1;
    456	uint	cp_brgc2;
    457	uint	cp_brgc3;
    458	uint	cp_brgc4;
    459
    460	/* Serial Communication Channels.
    461	*/
    462	scc_t	cp_scc[4];
    463
    464	/* Serial Management Channels.
    465	*/
    466	smc_t	cp_smc[2];
    467
    468	/* Serial Peripheral Interface.
    469	*/
    470	ushort	cp_spmode;
    471	u_char	res7[4];
    472	u_char	cp_spie;
    473	u_char	res8[3];
    474	u_char	cp_spim;
    475	u_char	res9[2];
    476	u_char	cp_spcom;
    477	u_char	res10[2];
    478
    479	/* Parallel Interface Port.
    480	*/
    481	u_char	res11[2];
    482	ushort	cp_pipc;
    483	u_char	res12[2];
    484	ushort	cp_ptpr;
    485	uint	cp_pbdir;
    486	uint	cp_pbpar;
    487	u_char	res13[2];
    488	ushort	cp_pbodr;
    489	uint	cp_pbdat;
    490
    491	/* Port E - MPC87x/88x only.
    492	 */
    493	uint	cp_pedir;
    494	uint	cp_pepar;
    495	uint	cp_peso;
    496	uint	cp_peodr;
    497	uint	cp_pedat;
    498
    499	/* Communications Processor Timing Register -
    500	   Contains RMII Timing for the FECs on MPC87x/88x only.
    501	*/
    502	uint	cp_cptr;
    503
    504	/* Serial Interface and Time Slot Assignment.
    505	*/
    506	uint	cp_simode;
    507	u_char	cp_sigmr;
    508	u_char	res15;
    509	u_char	cp_sistr;
    510	u_char	cp_sicmr;
    511	u_char	res16[4];
    512	uint	cp_sicr;
    513	uint	cp_sirp;
    514	u_char	res17[0xc];
    515
    516	/* 256 bytes of MPC823 video controller RAM array.
    517	*/
    518	u_char	cp_vcram[0x100];
    519	u_char	cp_siram[0x200];
    520
    521	/* The fast ethernet controller is not really part of the CPM,
    522	 * but it resides in the address space.
    523	 * The LCD color map is also here.
    524	 */
    525	union	fec_lcd	fl_un;
    526#define cp_fec		fl_un.fl_un_fec
    527#define lcd_cmap	fl_un.fl_un_cmap
    528	char	res18[0xE00];
    529
    530	/* The DUET family has a second FEC here */
    531	fec_t	cp_fec2;
    532#define cp_fec1	cp_fec	/* consistency macro */
    533
    534	/* Dual Ported RAM follows.
    535	 * There are many different formats for this memory area
    536	 * depending upon the devices used and options chosen.
    537	 * Some processors don't have all of it populated.
    538	 */
    539	u_char	cp_dpmem[0x1C00];	/* BD / Data / ucode */
    540	u_char	cp_dparam[0x400];	/* Parameter RAM */
    541} cpm8xx_t;
    542
    543/* Internal memory map.
    544*/
    545typedef struct immap {
    546	sysconf8xx_t	im_siu_conf;	/* SIU Configuration */
    547	pcmconf8xx_t	im_pcmcia;	/* PCMCIA Configuration */
    548	memctl8xx_t	im_memctl;	/* Memory Controller */
    549	sit8xx_t	im_sit;		/* System integration timers */
    550	car8xx_t	im_clkrst;	/* Clocks and reset */
    551	sitk8xx_t	im_sitk;	/* Sys int timer keys */
    552	cark8xx_t	im_clkrstk;	/* Clocks and reset keys */
    553	vid823_t	im_vid;		/* Video (823 only) */
    554	lcd823_t	im_lcd;		/* LCD (823 only) */
    555	i2c8xx_t	im_i2c;		/* I2C control/status */
    556	sdma8xx_t	im_sdma;	/* SDMA control/status */
    557	cpic8xx_t	im_cpic;	/* CPM Interrupt Controller */
    558	iop8xx_t	im_ioport;	/* IO Port control/status */
    559	cpmtimer8xx_t	im_cpmtimer;	/* CPM timers */
    560	cpm8xx_t	im_cpm;		/* Communication processor */
    561} immap_t;
    562
    563#endif /* __IMMAP_8XX__ */
    564#endif /* __KERNEL__ */