/*
 * Copyright 2003 Motorola,Inc.
 * Xianghua Xiao(x.xiao@motorola.com)
 */

#ifndef	__E500_H__
#define __E500_H__

#ifndef __ASSEMBLY__

typedef struct
{
  unsigned long freqProcessor;
  unsigned long freqSystemBus;
} MPC85xx_SYS_INFO;

#endif  /* _ASMLANGUAGE */

/* Motorola E500 core provides 16 TLB1 entries; they can be used for
 * initial memory mapping like legacy BAT registers do. Usually we
 * use four MAS registers(MAS0-3) to operate on TLB1 entries.
 *
 * While there are 16 Entries with variable Page Sizes in TLB1,
 * there are also 256 Entries with fixed 4K pages in TLB0.
 *
 * We also need LAWs(Local Access Window) to associate a range of
 * the local 32-bit address space with a particular target interface
 * such as PCI/PCI-X, RapidIO, Local Bus and DDR SDRAM.
 *
 * We put TLB1/LAW code here because memory mapping is board-specific
 * instead of cpu-specific.
 *
 * While these macros are all nominally for TLB1 by name, they can
 * also be used for TLB0 as well.
 */


/*
 * Convert addresses to Effective and Real Page Numbers.
 * Grab the high 20-bits and shift 'em down, dropping the "byte offset".
 */
#define E500_TLB_EPN(addr)	(((addr) >> 12) & 0xfffff)
#define E500_TLB_RPN(addr)	(((addr) >> 12) & 0xfffff)


/* MAS0
 * tlbsel(TLB Select):0,1
 * esel(Entry Select): 0,1,2,...,15 for TLB1
 * nv(Next victim):0,1
 */
#define TLB1_MAS0(tlbsel,esel,nv) \
			((((tlbsel) << 28) & MAS0_TLBSEL)       |\
			(((esel) << 16) & MAS0_ESEL )           |\
			(nv) )


/* MAS1
 * v(TLB valid bit):0,1
 * iprot(invalidate protect):0,1
 * tid(translation identity):8bit to match process IDs
 * ts(translation space,comparing with MSR[IS,DS]): 0,1
 * tsize(translation size):1,2,...,9(4K,16K,64K,256K,1M,4M,16M,64M,256M)
 */
#define TLB1_MAS1(v,iprot,tid,ts,tsize) \
			((((v) << 31) & MAS1_VALID)             |\
			(((iprot) << 30) & MAS1_IPROT)          |\
			(((tid) << 16) & MAS1_TID)              |\
			(((ts) << 12) & MAS1_TS)                |\
			(((tsize) << 8) & MAS1_TSIZE) )


/* MAS2
 * epn(effective page number):20bits
 * sharen(Shared cache state):0,1
 * x0,x1(implementation specific page attribute):0,1
 * w,i,m,g,e(write-through,cache-inhibited,memory coherency,guarded,
 *      endianness):0,1
 */
#define TLB1_MAS2(epn,sharen,x0,x1,w,i,m,g,e) \
			((((epn) << 12) & MAS2_EPN)             |\
			(((sharen) << 9) & MAS2_SHAREN)         |\
			(((x0) << 6) & MAS2_X0)                 |\
			(((x1) << 5) & MAS2_X1)                 |\
			(((w) << 4) & MAS2_W)                   |\
			(((i) << 3) & MAS2_I)                   |\
			(((m) << 2) & MAS2_M)                   |\
			(((g) << 1) & MAS2_G)                   |\
			(e) )


/* MAS3
 * rpn(real page number):20bits
 * u0-u3(user bits, useful for page table management in OS):0,1
 * ux,sx,uw,sw,ur,sr(permission bits, user and supervisor read,
 *      write,execute permission).
 */
#define TLB1_MAS3(rpn,u0,u1,u2,u3,ux,sx,uw,sw,ur,sr) \
			((((rpn) << 12) & MAS3_RPN)             |\
			(((u0) << 9) & MAS3_U0)                 |\
			(((u1) << 8) & MAS3_U1)                 |\
			(((u2) << 7) & MAS3_U2)                 |\
			(((u3) << 6) & MAS3_U3)                 |\
			(((ux) << 5) & MAS3_UX)                 |\
			(((sx) << 4) & MAS3_SX)                 |\
			(((uw) << 3) & MAS3_UW)                 |\
			(((sw) << 2) & MAS3_SW)                 |\
			(((ur) << 1) & MAS3_UR)                 |\
			(sr) )


#define RESET_VECTOR	0xfffffffc
#define CACHELINE_MASK	(CFG_CACHELINE_SIZE - 1) /* Address mask for cache
						     line aligned data. */

#endif	/* __E500_H__ */
