xref: /rk3399_rockchip-uboot/include/e500.h (revision d435793229ce29a42797c1edc39f5b34f987f91a)
142d1f039Swdenk /*
242d1f039Swdenk  * Copyright 2003 Motorola,Inc.
342d1f039Swdenk  * Xianghua Xiao(x.xiao@motorola.com)
442d1f039Swdenk  */
542d1f039Swdenk 
642d1f039Swdenk #ifndef	__E500_H__
742d1f039Swdenk #define __E500_H__
842d1f039Swdenk 
942d1f039Swdenk #ifndef __ASSEMBLY__
1042d1f039Swdenk 
1142d1f039Swdenk typedef struct
1242d1f039Swdenk {
1342d1f039Swdenk   unsigned long freqProcessor;
1442d1f039Swdenk   unsigned long freqSystemBus;
15*d4357932SKumar Gala   unsigned long freqDDRBus;
1642d1f039Swdenk } MPC85xx_SYS_INFO;
1742d1f039Swdenk 
1842d1f039Swdenk #endif  /* _ASMLANGUAGE */
1942d1f039Swdenk 
2042d1f039Swdenk /* Motorola E500 core provides 16 TLB1 entries; they can be used for
2142d1f039Swdenk  * initial memory mapping like legacy BAT registers do. Usually we
2242d1f039Swdenk  * use four MAS registers(MAS0-3) to operate on TLB1 entries.
2342d1f039Swdenk  *
249aea9530Swdenk  * While there are 16 Entries with variable Page Sizes in TLB1,
259aea9530Swdenk  * there are also 256 Entries with fixed 4K pages in TLB0.
269aea9530Swdenk  *
2742d1f039Swdenk  * We also need LAWs(Local Access Window) to associate a range of
2842d1f039Swdenk  * the local 32-bit address space with a particular target interface
2942d1f039Swdenk  * such as PCI/PCI-X, RapidIO, Local Bus and DDR SDRAM.
3042d1f039Swdenk  *
3142d1f039Swdenk  * We put TLB1/LAW code here because memory mapping is board-specific
3242d1f039Swdenk  * instead of cpu-specific.
339aea9530Swdenk  *
349aea9530Swdenk  * While these macros are all nominally for TLB1 by name, they can
359aea9530Swdenk  * also be used for TLB0 as well.
3642d1f039Swdenk  */
3742d1f039Swdenk 
389aea9530Swdenk 
399aea9530Swdenk /*
409aea9530Swdenk  * Convert addresses to Effective and Real Page Numbers.
419aea9530Swdenk  * Grab the high 20-bits and shift 'em down, dropping the "byte offset".
429aea9530Swdenk  */
439aea9530Swdenk #define E500_TLB_EPN(addr)	(((addr) >> 12) & 0xfffff)
449aea9530Swdenk #define E500_TLB_RPN(addr)	(((addr) >> 12) & 0xfffff)
459aea9530Swdenk 
469aea9530Swdenk 
4742d1f039Swdenk /* MAS0
4842d1f039Swdenk  * tlbsel(TLB Select):0,1
4942d1f039Swdenk  * esel(Entry Select): 0,1,2,...,15 for TLB1
5042d1f039Swdenk  * nv(Next victim):0,1
5142d1f039Swdenk  */
5242d1f039Swdenk #define TLB1_MAS0(tlbsel,esel,nv) \
5342d1f039Swdenk 			((((tlbsel) << 28) & MAS0_TLBSEL)       |\
5442d1f039Swdenk 			(((esel) << 16) & MAS0_ESEL )           |\
5542d1f039Swdenk 			(nv) )
5642d1f039Swdenk 
5742d1f039Swdenk 
5842d1f039Swdenk /* MAS1
5942d1f039Swdenk  * v(TLB valid bit):0,1
6042d1f039Swdenk  * iprot(invalidate protect):0,1
6142d1f039Swdenk  * tid(translation identity):8bit to match process IDs
6242d1f039Swdenk  * ts(translation space,comparing with MSR[IS,DS]): 0,1
6342d1f039Swdenk  * tsize(translation size):1,2,...,9(4K,16K,64K,256K,1M,4M,16M,64M,256M)
6442d1f039Swdenk  */
6542d1f039Swdenk #define TLB1_MAS1(v,iprot,tid,ts,tsize) \
6642d1f039Swdenk 			((((v) << 31) & MAS1_VALID)             |\
6742d1f039Swdenk 			(((iprot) << 30) & MAS1_IPROT)          |\
6842d1f039Swdenk 			(((tid) << 16) & MAS1_TID)              |\
6942d1f039Swdenk 			(((ts) << 12) & MAS1_TS)                |\
7042d1f039Swdenk 			(((tsize) << 8) & MAS1_TSIZE) )
7142d1f039Swdenk 
7242d1f039Swdenk 
7342d1f039Swdenk /* MAS2
7442d1f039Swdenk  * epn(effective page number):20bits
7542d1f039Swdenk  * sharen(Shared cache state):0,1
7642d1f039Swdenk  * x0,x1(implementation specific page attribute):0,1
7742d1f039Swdenk  * w,i,m,g,e(write-through,cache-inhibited,memory coherency,guarded,
7842d1f039Swdenk  *      endianness):0,1
7942d1f039Swdenk  */
8042d1f039Swdenk #define TLB1_MAS2(epn,sharen,x0,x1,w,i,m,g,e) \
8142d1f039Swdenk 			((((epn) << 12) & MAS2_EPN)             |\
8242d1f039Swdenk 			(((sharen) << 9) & MAS2_SHAREN)         |\
8342d1f039Swdenk 			(((x0) << 6) & MAS2_X0)                 |\
8442d1f039Swdenk 			(((x1) << 5) & MAS2_X1)                 |\
8542d1f039Swdenk 			(((w) << 4) & MAS2_W)                   |\
8642d1f039Swdenk 			(((i) << 3) & MAS2_I)                   |\
8742d1f039Swdenk 			(((m) << 2) & MAS2_M)                   |\
8842d1f039Swdenk 			(((g) << 1) & MAS2_G)                   |\
8942d1f039Swdenk 			(e) )
9042d1f039Swdenk 
9142d1f039Swdenk 
9242d1f039Swdenk /* MAS3
9342d1f039Swdenk  * rpn(real page number):20bits
9442d1f039Swdenk  * u0-u3(user bits, useful for page table management in OS):0,1
9542d1f039Swdenk  * ux,sx,uw,sw,ur,sr(permission bits, user and supervisor read,
9642d1f039Swdenk  *      write,execute permission).
9742d1f039Swdenk  */
9842d1f039Swdenk #define TLB1_MAS3(rpn,u0,u1,u2,u3,ux,sx,uw,sw,ur,sr) \
9942d1f039Swdenk 			((((rpn) << 12) & MAS3_RPN)             |\
10042d1f039Swdenk 			(((u0) << 9) & MAS3_U0)                 |\
10142d1f039Swdenk 			(((u1) << 8) & MAS3_U1)                 |\
10242d1f039Swdenk 			(((u2) << 7) & MAS3_U2)                 |\
10342d1f039Swdenk 			(((u3) << 6) & MAS3_U3)                 |\
10442d1f039Swdenk 			(((ux) << 5) & MAS3_UX)                 |\
10542d1f039Swdenk 			(((sx) << 4) & MAS3_SX)                 |\
10642d1f039Swdenk 			(((uw) << 3) & MAS3_UW)                 |\
10742d1f039Swdenk 			(((sw) << 2) & MAS3_SW)                 |\
10842d1f039Swdenk 			(((ur) << 1) & MAS3_UR)                 |\
10942d1f039Swdenk 			(sr) )
11042d1f039Swdenk 
11142d1f039Swdenk 
11242d1f039Swdenk #define RESET_VECTOR	0xfffffffc
11342d1f039Swdenk #define CACHELINE_MASK	(CFG_CACHELINE_SIZE - 1) /* Address mask for cache
11442d1f039Swdenk 						     line aligned data. */
11542d1f039Swdenk 
11642d1f039Swdenk #endif	/* __E500_H__ */
117