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