1 /* 2 * asm/metag_mem.h 3 * 4 * Copyright (C) 2000-2007, 2012 Imagination Technologies. 5 * 6 * This program is free software; you can redistribute it and/or modify it under 7 * the terms of the GNU General Public License version 2 as published by the 8 * Free Software Foundation. 9 * 10 * Various defines for Meta (memory-mapped) registers. 11 */ 12 13 #ifndef _ASM_METAG_MEM_H_ 14 #define _ASM_METAG_MEM_H_ 15 16 /***************************************************************************** 17 * META MEMORY MAP LINEAR ADDRESS VALUES 18 ****************************************************************************/ 19 /* 20 * COMMON MEMORY MAP 21 * ----------------- 22 */ 23 24 #define LINSYSTEM_BASE 0x00200000 25 #define LINSYSTEM_LIMIT 0x07FFFFFF 26 27 /* Linear cache flush now implemented via DCACHE instruction. These defines 28 related to a special region that used to exist for achieving cache flushes. 29 */ 30 #define LINSYSLFLUSH_S 0 31 32 #define LINSYSRES0_BASE 0x00200000 33 #define LINSYSRES0_LIMIT 0x01FFFFFF 34 35 #define LINSYSCUSTOM_BASE 0x02000000 36 #define LINSYSCUSTOM_LIMIT 0x02FFFFFF 37 38 #define LINSYSEXPAND_BASE 0x03000000 39 #define LINSYSEXPAND_LIMIT 0x03FFFFFF 40 41 #define LINSYSEVENT_BASE 0x04000000 42 #define LINSYSEVENT_WR_ATOMIC_UNLOCK 0x04000000 43 #define LINSYSEVENT_WR_ATOMIC_LOCK 0x04000040 44 #define LINSYSEVENT_WR_CACHE_DISABLE 0x04000080 45 #define LINSYSEVENT_WR_CACHE_ENABLE 0x040000C0 46 #define LINSYSEVENT_WR_COMBINE_FLUSH 0x04000100 47 #define LINSYSEVENT_WR_FENCE 0x04000140 48 #define LINSYSEVENT_LIMIT 0x04000FFF 49 50 #define LINSYSCFLUSH_BASE 0x04400000 51 #define LINSYSCFLUSH_DCACHE_LINE 0x04400000 52 #define LINSYSCFLUSH_ICACHE_LINE 0x04500000 53 #define LINSYSCFLUSH_MMCU 0x04700000 54 #ifndef METAC_1_2 55 #define LINSYSCFLUSH_TxMMCU_BASE 0x04700020 56 #define LINSYSCFLUSH_TxMMCU_STRIDE 0x00000008 57 #endif 58 #define LINSYSCFLUSH_ADDR_BITS 0x000FFFFF 59 #define LINSYSCFLUSH_ADDR_S 0 60 #define LINSYSCFLUSH_LIMIT 0x047FFFFF 61 62 #define LINSYSCTRL_BASE 0x04800000 63 #define LINSYSCTRL_LIMIT 0x04FFFFFF 64 65 #define LINSYSMTABLE_BASE 0x05000000 66 #define LINSYSMTABLE_LIMIT 0x05FFFFFF 67 68 #define LINSYSDIRECT_BASE 0x06000000 69 #define LINSYSDIRECT_LIMIT 0x07FFFFFF 70 71 #define LINLOCAL_BASE 0x08000000 72 #define LINLOCAL_LIMIT 0x7FFFFFFF 73 74 #define LINCORE_BASE 0x80000000 75 #define LINCORE_LIMIT 0x87FFFFFF 76 77 #define LINCORE_CODE_BASE 0x80000000 78 #define LINCORE_CODE_LIMIT 0x81FFFFFF 79 80 #define LINCORE_DATA_BASE 0x82000000 81 #define LINCORE_DATA_LIMIT 0x83FFFFFF 82 83 84 /* The core can support locked icache lines in this region */ 85 #define LINCORE_ICACHE_BASE 0x84000000 86 #define LINCORE_ICACHE_LIMIT 0x85FFFFFF 87 88 /* The core can support locked dcache lines in this region */ 89 #define LINCORE_DCACHE_BASE 0x86000000 90 #define LINCORE_DCACHE_LIMIT 0x87FFFFFF 91 92 #define LINGLOBAL_BASE 0x88000000 93 #define LINGLOBAL_LIMIT 0xFFFDFFFF 94 95 /* 96 * CHIP Core Register Map 97 * ---------------------- 98 */ 99 #define CORE_HWBASE 0x04800000 100 #define PRIV_HWBASE 0x04810000 101 #define TRIG_HWBASE 0x04820000 102 #define SYSC_HWBASE 0x04830000 103 104 /***************************************************************************** 105 * INTER-THREAD KICK REGISTERS FOR SOFTWARE EVENT GENERATION 106 ****************************************************************************/ 107 /* 108 * These values define memory mapped registers that can be used to supply 109 * kicks to threads that service arbitrary software events. 110 */ 111 112 #define T0KICK 0x04800800 /* Background kick 0 */ 113 #define TXXKICK_MAX 0xFFFF /* Maximum kicks */ 114 #define TnXKICK_STRIDE 0x00001000 /* Thread scale value */ 115 #define TnXKICK_STRIDE_S 12 116 #define T0KICKI 0x04800808 /* Interrupt kick 0 */ 117 #define TXIKICK_OFFSET 0x00000008 /* Int level offset value */ 118 #define T1KICK 0x04801800 /* Background kick 1 */ 119 #define T1KICKI 0x04801808 /* Interrupt kick 1 */ 120 #define T2KICK 0x04802800 /* Background kick 2 */ 121 #define T2KICKI 0x04802808 /* Interrupt kick 2 */ 122 #define T3KICK 0x04803800 /* Background kick 3 */ 123 #define T3KICKI 0x04803808 /* Interrupt kick 3 */ 124 125 /***************************************************************************** 126 * GLOBAL REGISTER ACCESS RESOURCES 127 ****************************************************************************/ 128 /* 129 * These values define memory mapped registers that allow access to the 130 * internal state of all threads in order to allow global set-up of thread 131 * state and external handling of thread events, errors, or debugging. 132 * 133 * The actual unit and register index values needed to access individul 134 * registers are chip specific see - METAC_TXUXX_VALUES in metac_x_y.h. 135 * However two C array initialisers TXUXX_MASKS and TGUXX_MASKS will always be 136 * defined to allow arbitrary loading, display, and saving of all valid 137 * register states without detailed knowledge of their purpose - TXUXX sets 138 * bits for all valid registers and TGUXX sets bits for the sub-set which are 139 * global. 140 */ 141 142 #define T0UCTREG0 0x04800000 /* Access to all CT regs */ 143 #define TnUCTRX_STRIDE 0x00001000 /* Thread scale value */ 144 #define TXUCTREGn_STRIDE 0x00000008 /* Register scale value */ 145 146 #define TXUXXRXDT 0x0480FFF0 /* Data to/from any threads reg */ 147 #define TXUXXRXRQ 0x0480FFF8 148 #define TXUXXRXRQ_DREADY_BIT 0x80000000 /* Poll for done */ 149 #define TXUXXRXRQ_DSPEXT_BIT 0x00020000 /* Addr DSP Regs */ 150 #define TXUXXRXRQ_RDnWR_BIT 0x00010000 /* Set for read */ 151 #define TXUXXRXRQ_TX_BITS 0x00003000 /* Thread number */ 152 #define TXUXXRXRQ_TX_S 12 153 #define TXUXXRXRQ_RX_BITS 0x000001F0 /* Register num */ 154 #define TXUXXRXRQ_RX_S 4 155 #define TXUXXRXRQ_DSPRARD0 0 /* DSP RAM A Read Pointer 0 */ 156 #define TXUXXRXRQ_DSPRARD1 1 /* DSP RAM A Read Pointer 1 */ 157 #define TXUXXRXRQ_DSPRAWR0 2 /* DSP RAM A Write Pointer 0 */ 158 #define TXUXXRXRQ_DSPRAWR2 3 /* DSP RAM A Write Pointer 1 */ 159 #define TXUXXRXRQ_DSPRBRD0 4 /* DSP RAM B Read Pointer 0 */ 160 #define TXUXXRXRQ_DSPRBRD1 5 /* DSP RAM B Read Pointer 1 */ 161 #define TXUXXRXRQ_DSPRBWR0 6 /* DSP RAM B Write Pointer 0 */ 162 #define TXUXXRXRQ_DSPRBWR1 7 /* DSP RAM B Write Pointer 1 */ 163 #define TXUXXRXRQ_DSPRARINC0 8 /* DSP RAM A Read Increment 0 */ 164 #define TXUXXRXRQ_DSPRARINC1 9 /* DSP RAM A Read Increment 1 */ 165 #define TXUXXRXRQ_DSPRAWINC0 10 /* DSP RAM A Write Increment 0 */ 166 #define TXUXXRXRQ_DSPRAWINC1 11 /* DSP RAM A Write Increment 1 */ 167 #define TXUXXRXRQ_DSPRBRINC0 12 /* DSP RAM B Read Increment 0 */ 168 #define TXUXXRXRQ_DSPRBRINC1 13 /* DSP RAM B Read Increment 1 */ 169 #define TXUXXRXRQ_DSPRBWINC0 14 /* DSP RAM B Write Increment 0 */ 170 #define TXUXXRXRQ_DSPRBWINC1 15 /* DSP RAM B Write Increment 1 */ 171 172 #define TXUXXRXRQ_ACC0L0 16 /* Accumulator 0 bottom 32-bits */ 173 #define TXUXXRXRQ_ACC1L0 17 /* Accumulator 1 bottom 32-bits */ 174 #define TXUXXRXRQ_ACC2L0 18 /* Accumulator 2 bottom 32-bits */ 175 #define TXUXXRXRQ_ACC3L0 19 /* Accumulator 3 bottom 32-bits */ 176 #define TXUXXRXRQ_ACC0HI 20 /* Accumulator 0 top 8-bits */ 177 #define TXUXXRXRQ_ACC1HI 21 /* Accumulator 1 top 8-bits */ 178 #define TXUXXRXRQ_ACC2HI 22 /* Accumulator 2 top 8-bits */ 179 #define TXUXXRXRQ_ACC3HI 23 /* Accumulator 3 top 8-bits */ 180 #define TXUXXRXRQ_UXX_BITS 0x0000000F /* Unit number */ 181 #define TXUXXRXRQ_UXX_S 0 182 183 /***************************************************************************** 184 * PRIVILEGE CONTROL VALUES FOR MEMORY MAPPED RESOURCES 185 ****************************************************************************/ 186 /* 187 * These values define memory mapped registers that give control over and 188 * the privilege required to access other memory mapped resources. These 189 * registers themselves always require privilege to update them. 190 */ 191 192 #define TXPRIVREG_STRIDE 0x8 /* Delta between per-thread regs */ 193 #define TXPRIVREG_STRIDE_S 3 194 195 /* 196 * Each bit 0 to 15 defines privilege required to access internal register 197 * regions 0x04800000 to 0x048FFFFF in 64k chunks 198 */ 199 #define T0PIOREG 0x04810100 200 #define T1PIOREG 0x04810108 201 #define T2PIOREG 0x04810110 202 #define T3PIOREG 0x04810118 203 204 /* 205 * Each bit 0 to 31 defines privilege required to use the pair of 206 * system events implemented as writee in the regions 0x04000000 to 207 * 0x04000FFF in 2*64 byte chunks. 208 */ 209 #define T0PSYREG 0x04810180 210 #define T1PSYREG 0x04810188 211 #define T2PSYREG 0x04810190 212 #define T3PSYREG 0x04810198 213 214 /* 215 * CHIP PRIV CONTROLS 216 * ------------------ 217 */ 218 219 /* The TXPIOREG register holds a bit mask directly mappable to 220 corresponding addresses in the range 0x04800000 to 049FFFFF */ 221 #define TXPIOREG_ADDR_BITS 0x1F0000 /* Up to 32x64K bytes */ 222 #define TXPIOREG_ADDR_S 16 223 224 /* Hence based on the _HWBASE values ... */ 225 #define TXPIOREG_CORE_BIT (1<<((0x04800000>>16)&0x1F)) 226 #define TXPIOREG_PRIV_BIT (1<<((0x04810000>>16)&0x1F)) 227 #define TXPIOREG_TRIG_BIT (1<<((0x04820000>>16)&0x1F)) 228 #define TXPIOREG_SYSC_BIT (1<<((0x04830000>>16)&0x1F)) 229 230 #define TXPIOREG_WRC_BIT 0x00080000 /* Wr combiner reg priv */ 231 #define TXPIOREG_LOCALBUS_RW_BIT 0x00040000 /* Local bus rd/wr priv */ 232 #define TXPIOREG_SYSREGBUS_RD_BIT 0x00020000 /* Sys reg bus write priv */ 233 #define TXPIOREG_SYSREGBUS_WR_BIT 0x00010000 /* Sys reg bus read priv */ 234 235 /* CORE region privilege controls */ 236 #define T0PRIVCORE 0x04800828 237 #define TXPRIVCORE_TXBKICK_BIT 0x001 /* Background kick priv */ 238 #define TXPRIVCORE_TXIKICK_BIT 0x002 /* Interrupt kick priv */ 239 #define TXPRIVCORE_TXAMAREGX_BIT 0x004 /* TXAMAREG4|5|6 priv */ 240 #define TnPRIVCORE_STRIDE 0x00001000 241 242 #define T0PRIVSYSR 0x04810000 243 #define TnPRIVSYSR_STRIDE 0x00000008 244 #define TnPRIVSYSR_STRIDE_S 3 245 #define TXPRIVSYSR_CFLUSH_BIT 0x01 246 #define TXPRIVSYSR_MTABLE_BIT 0x02 247 #define TXPRIVSYSR_DIRECT_BIT 0x04 248 #ifdef METAC_1_2 249 #define TXPRIVSYSR_ALL_BITS 0x07 250 #else 251 #define TXPRIVSYSR_CORE_BIT 0x08 252 #define TXPRIVSYSR_CORECODE_BIT 0x10 253 #define TXPRIVSYSR_ALL_BITS 0x1F 254 #endif 255 #define T1PRIVSYSR 0x04810008 256 #define T2PRIVSYSR 0x04810010 257 #define T3PRIVSYSR 0x04810018 258 259 /***************************************************************************** 260 * H/W TRIGGER STATE/LEVEL REGISTERS AND H/W TRIGGER VECTORS 261 ****************************************************************************/ 262 /* 263 * These values define memory mapped registers that give control over and 264 * the state of hardware trigger sources both external to the META processor 265 * and internal to it. 266 */ 267 268 #define HWSTATMETA 0x04820000 /* Hardware status/clear META trig */ 269 #define HWSTATMETA_T0HALT_BITS 0xF 270 #define HWSTATMETA_T0HALT_S 0 271 #define HWSTATMETA_T0BHALT_BIT 0x1 /* Background HALT */ 272 #define HWSTATMETA_T0IHALT_BIT 0x2 /* Interrupt HALT */ 273 #define HWSTATMETA_T0PHALT_BIT 0x4 /* PF/RO Memory HALT */ 274 #define HWSTATMETA_T0AMATR_BIT 0x8 /* AMA trigger */ 275 #define HWSTATMETA_TnINT_S 4 /* Shift by (thread*4) */ 276 #define HWSTATEXT 0x04820010 /* H/W status/clear external trigs 0-31 */ 277 #define HWSTATEXT2 0x04820018 /* H/W status/clear external trigs 32-63 */ 278 #define HWSTATEXT4 0x04820020 /* H/W status/clear external trigs 64-95 */ 279 #define HWSTATEXT6 0x04820028 /* H/W status/clear external trigs 96-128 */ 280 #define HWLEVELEXT 0x04820030 /* Edge/Level type of external trigs 0-31 */ 281 #define HWLEVELEXT2 0x04820038 /* Edge/Level type of external trigs 32-63 */ 282 #define HWLEVELEXT4 0x04820040 /* Edge/Level type of external trigs 64-95 */ 283 #define HWLEVELEXT6 0x04820048 /* Edge/Level type of external trigs 96-128 */ 284 #define HWLEVELEXT_XXX_LEVEL 1 /* Level sense logic in HWSTATEXTn */ 285 #define HWLEVELEXT_XXX_EDGE 0 286 #define HWMASKEXT 0x04820050 /* Enable/disable of external trigs 0-31 */ 287 #define HWMASKEXT2 0x04820058 /* Enable/disable of external trigs 32-63 */ 288 #define HWMASKEXT4 0x04820060 /* Enable/disable of external trigs 64-95 */ 289 #define HWMASKEXT6 0x04820068 /* Enable/disable of external trigs 96-128 */ 290 #define T0VECINT_BHALT 0x04820500 /* Background HALT trigger vector */ 291 #define TXVECXXX_BITS 0xF /* Per-trigger vector vals 0,1,4-15 */ 292 #define TXVECXXX_S 0 293 #define T0VECINT_IHALT 0x04820508 /* Interrupt HALT */ 294 #define T0VECINT_PHALT 0x04820510 /* PF/RO memory fault */ 295 #define T0VECINT_AMATR 0x04820518 /* AMA trigger */ 296 #define TnVECINT_STRIDE 0x00000020 /* Per thread stride */ 297 #define HWVEC0EXT 0x04820700 /* Vectors for external triggers 0-31 */ 298 #define HWVEC20EXT 0x04821700 /* Vectors for external triggers 32-63 */ 299 #define HWVEC40EXT 0x04822700 /* Vectors for external triggers 64-95 */ 300 #define HWVEC60EXT 0x04823700 /* Vectors for external triggers 96-127 */ 301 #define HWVECnEXT_STRIDE 0x00000008 /* Per trigger stride */ 302 #define HWVECnEXT_DEBUG 0x1 /* Redirect trigger to debug i/f */ 303 304 /* 305 * CORE HWCODE-BREAKPOINT REGISTERS/VALUES 306 * --------------------------------------- 307 */ 308 #define CODEB0ADDR 0x0480FF00 /* Address specifier */ 309 #define CODEBXADDR_MATCHX_BITS 0xFFFFFFFC 310 #define CODEBXADDR_MATCHX_S 2 311 #define CODEB0CTRL 0x0480FF08 /* Control */ 312 #define CODEBXCTRL_MATEN_BIT 0x80000000 /* Match 'Enable' */ 313 #define CODEBXCTRL_MATTXEN_BIT 0x10000000 /* Match threadn enable */ 314 #define CODEBXCTRL_HITC_BITS 0x00FF0000 /* Hit counter */ 315 #define CODEBXCTRL_HITC_S 16 316 #define CODEBXHITC_NEXT 0xFF /* Next 'hit' will trigger */ 317 #define CODEBXHITC_HIT1 0x00 /* No 'hits' after trigger */ 318 #define CODEBXCTRL_MMASK_BITS 0x0000FFFC /* Mask ADDR_MATCH bits */ 319 #define CODEBXCTRL_MMASK_S 2 320 #define CODEBXCTRL_MATLTX_BITS 0x00000003 /* Match threadn LOCAL addr */ 321 #define CODEBXCTRL_MATLTX_S 0 /* Match threadn LOCAL addr */ 322 #define CODEBnXXXX_STRIDE 0x00000010 /* Stride between CODEB reg sets */ 323 #define CODEBnXXXX_STRIDE_S 4 324 #define CODEBnXXXX_LIMIT 3 /* Sets 0-3 */ 325 326 /* 327 * CORE DATA-WATCHPOINT REGISTERS/VALUES 328 * ------------------------------------- 329 */ 330 #define DATAW0ADDR 0x0480FF40 /* Address specifier */ 331 #define DATAWXADDR_MATCHR_BITS 0xFFFFFFF8 332 #define DATAWXADDR_MATCHR_S 3 333 #define DATAWXADDR_MATCHW_BITS 0xFFFFFFFF 334 #define DATAWXADDR_MATCHW_S 0 335 #define DATAW0CTRL 0x0480FF48 /* Control */ 336 #define DATAWXCTRL_MATRD_BIT 0x80000000 /* Match 'Read' */ 337 #ifndef METAC_1_2 338 #define DATAWXCTRL_MATNOTTX_BIT 0x20000000 /* Invert threadn enable */ 339 #endif 340 #define DATAWXCTRL_MATWR_BIT 0x40000000 /* Match 'Write' */ 341 #define DATAWXCTRL_MATTXEN_BIT 0x10000000 /* Match threadn enable */ 342 #define DATAWXCTRL_WRSIZE_BITS 0x0F000000 /* Write Match Size */ 343 #define DATAWXCTRL_WRSIZE_S 24 344 #define DATAWWRSIZE_ANY 0 /* Any size transaction matches */ 345 #define DATAWWRSIZE_8BIT 1 /* Specific sizes ... */ 346 #define DATAWWRSIZE_16BIT 2 347 #define DATAWWRSIZE_32BIT 3 348 #define DATAWWRSIZE_64BIT 4 349 #define DATAWXCTRL_HITC_BITS 0x00FF0000 /* Hit counter */ 350 #define DATAWXCTRL_HITC_S 16 351 #define DATAWXHITC_NEXT 0xFF /* Next 'hit' will trigger */ 352 #define DATAWXHITC_HIT1 0x00 /* No 'hits' after trigger */ 353 #define DATAWXCTRL_MMASK_BITS 0x0000FFF8 /* Mask ADDR_MATCH bits */ 354 #define DATAWXCTRL_MMASK_S 3 355 #define DATAWXCTRL_MATLTX_BITS 0x00000003 /* Match threadn LOCAL addr */ 356 #define DATAWXCTRL_MATLTX_S 0 /* Match threadn LOCAL addr */ 357 #define DATAW0DMATCH0 0x0480FF50 /* Write match data */ 358 #define DATAW0DMATCH1 0x0480FF58 359 #define DATAW0DMASK0 0x0480FF60 /* Write match data mask */ 360 #define DATAW0DMASK1 0x0480FF68 361 #define DATAWnXXXX_STRIDE 0x00000040 /* Stride between DATAW reg sets */ 362 #define DATAWnXXXX_STRIDE_S 6 363 #define DATAWnXXXX_LIMIT 1 /* Sets 0,1 */ 364 365 /* 366 * CHIP Automatic Mips Allocation control registers 367 * ------------------------------------------------ 368 */ 369 370 /* CORE memory mapped AMA registers */ 371 #define T0AMAREG4 0x04800810 372 #define TXAMAREG4_POOLSIZE_BITS 0x3FFFFF00 373 #define TXAMAREG4_POOLSIZE_S 8 374 #define TXAMAREG4_AVALUE_BITS 0x000000FF 375 #define TXAMAREG4_AVALUE_S 0 376 #define T0AMAREG5 0x04800818 377 #define TXAMAREG5_POOLC_BITS 0x07FFFFFF 378 #define TXAMAREG5_POOLC_S 0 379 #define T0AMAREG6 0x04800820 380 #define TXAMAREG6_DLINEDEF_BITS 0x00FFFFF0 381 #define TXAMAREG6_DLINEDEF_S 0 382 #define TnAMAREGX_STRIDE 0x00001000 383 384 /* 385 * Memory Management Control Unit Table Entries 386 * -------------------------------------------- 387 */ 388 #define MMCU_ENTRY_S 4 /* -> Entry size */ 389 #define MMCU_ENTRY_ADDR_BITS 0xFFFFF000 /* Physical address */ 390 #define MMCU_ENTRY_ADDR_S 12 /* -> Page size */ 391 #define MMCU_ENTRY_CWIN_BITS 0x000000C0 /* Caching 'window' selection */ 392 #define MMCU_ENTRY_CWIN_S 6 393 #define MMCU_CWIN_UNCACHED 0 /* May not be memory etc. */ 394 #define MMCU_CWIN_BURST 1 /* Cached but LRU unset */ 395 #define MMCU_CWIN_C1SET 2 /* Cached in 1 set only */ 396 #define MMCU_CWIN_CACHED 3 /* Fully cached */ 397 #define MMCU_ENTRY_CACHE_BIT 0x00000080 /* Set for cached region */ 398 #define MMCU_ECACHE1_FULL_BIT 0x00000040 /* Use all the sets */ 399 #define MMCU_ECACHE0_BURST_BIT 0x00000040 /* Match bursts */ 400 #define MMCU_ENTRY_SYS_BIT 0x00000010 /* Sys-coherent access required */ 401 #define MMCU_ENTRY_WRC_BIT 0x00000008 /* Write combining allowed */ 402 #define MMCU_ENTRY_PRIV_BIT 0x00000004 /* Privilege required */ 403 #define MMCU_ENTRY_WR_BIT 0x00000002 /* Writes allowed */ 404 #define MMCU_ENTRY_VAL_BIT 0x00000001 /* Entry is valid */ 405 406 #ifdef METAC_2_1 407 /* 408 * Extended first-level/top table entries have extra/larger fields in later 409 * cores as bits 11:0 previously had no effect in such table entries. 410 */ 411 #define MMCU_E1ENT_ADDR_BITS 0xFFFFFFC0 /* Physical address */ 412 #define MMCU_E1ENT_ADDR_S 6 /* -> resolution < page size */ 413 #define MMCU_E1ENT_PGSZ_BITS 0x0000001E /* Page size for 2nd level */ 414 #define MMCU_E1ENT_PGSZ_S 1 415 #define MMCU_E1ENT_PGSZ0_POWER 12 /* PgSz 0 -> 4K */ 416 #define MMCU_E1ENT_PGSZ_MAX 10 /* PgSz 10 -> 4M maximum */ 417 #define MMCU_E1ENT_MINIM_BIT 0x00000020 418 #endif /* METAC_2_1 */ 419 420 /* MMCU control register in SYSC region */ 421 #define MMCU_TABLE_PHYS_ADDR 0x04830010 422 #define MMCU_TABLE_PHYS_ADDR_BITS 0xFFFFFFFC 423 #ifdef METAC_2_1 424 #define MMCU_TABLE_PHYS_EXTEND 0x00000001 /* See below */ 425 #endif 426 #define MMCU_DCACHE_CTRL_ADDR 0x04830018 427 #define MMCU_xCACHE_CTRL_ENABLE_BIT 0x00000001 428 #define MMCU_xCACHE_CTRL_PARTITION_BIT 0x00000000 /* See xCPART below */ 429 #define MMCU_ICACHE_CTRL_ADDR 0x04830020 430 431 #ifdef METAC_2_1 432 433 /* 434 * Allow direct access to physical memory used to implement MMU table. 435 * 436 * Each is based on a corresponding MMCU_TnLOCAL_TABLE_PHYSn or similar 437 * MMCU_TnGLOBAL_TABLE_PHYSn register pair (see next). 438 */ 439 #define LINSYSMEMT0L_BASE 0x05000000 440 #define LINSYSMEMT0L_LIMIT 0x051FFFFF 441 #define LINSYSMEMTnX_STRIDE 0x00200000 /* 2MB Local per thread */ 442 #define LINSYSMEMTnX_STRIDE_S 21 443 #define LINSYSMEMTXG_OFFSET 0x00800000 /* +2MB Global per thread */ 444 #define LINSYSMEMTXG_OFFSET_S 23 445 #define LINSYSMEMT1L_BASE 0x05200000 446 #define LINSYSMEMT1L_LIMIT 0x053FFFFF 447 #define LINSYSMEMT2L_BASE 0x05400000 448 #define LINSYSMEMT2L_LIMIT 0x055FFFFF 449 #define LINSYSMEMT3L_BASE 0x05600000 450 #define LINSYSMEMT3L_LIMIT 0x057FFFFF 451 #define LINSYSMEMT0G_BASE 0x05800000 452 #define LINSYSMEMT0G_LIMIT 0x059FFFFF 453 #define LINSYSMEMT1G_BASE 0x05A00000 454 #define LINSYSMEMT1G_LIMIT 0x05BFFFFF 455 #define LINSYSMEMT2G_BASE 0x05C00000 456 #define LINSYSMEMT2G_LIMIT 0x05DFFFFF 457 #define LINSYSMEMT3G_BASE 0x05E00000 458 #define LINSYSMEMT3G_LIMIT 0x05FFFFFF 459 460 /* 461 * Extended MMU table functionality allows a sparse or flat table to be 462 * described much more efficiently than before. 463 */ 464 #define MMCU_T0LOCAL_TABLE_PHYS0 0x04830700 465 #define MMCU_TnX_TABLE_PHYSX_STRIDE 0x20 /* Offset per thread */ 466 #define MMCU_TnX_TABLE_PHYSX_STRIDE_S 5 467 #define MMCU_TXG_TABLE_PHYSX_OFFSET 0x10 /* Global versus local */ 468 #define MMCU_TXG_TABLE_PHYSX_OFFSET_S 4 469 #define MMCU_TBLPHYS0_DCCTRL_BITS 0x000000DF /* DC controls */ 470 #define MMCU_TBLPHYS0_ENTLB_BIT 0x00000020 /* Cache in TLB */ 471 #define MMCU_TBLPHYS0_TBLSZ_BITS 0x00000F00 /* Area supported */ 472 #define MMCU_TBLPHYS0_TBLSZ_S 8 473 #define MMCU_TBLPHYS0_TBLSZ0_POWER 22 /* 0 -> 4M */ 474 #define MMCU_TBLPHYS0_TBLSZ_MAX 9 /* 9 -> 2G */ 475 #define MMCU_TBLPHYS0_LINBASE_BITS 0xFFC00000 /* Linear base */ 476 #define MMCU_TBLPHYS0_LINBASE_S 22 477 478 #define MMCU_T0LOCAL_TABLE_PHYS1 0x04830708 479 #define MMCU_TBLPHYS1_ADDR_BITS 0xFFFFFFFC /* Physical base */ 480 #define MMCU_TBLPHYS1_ADDR_S 2 481 482 #define MMCU_T0GLOBAL_TABLE_PHYS0 0x04830710 483 #define MMCU_T0GLOBAL_TABLE_PHYS1 0x04830718 484 #define MMCU_T1LOCAL_TABLE_PHYS0 0x04830720 485 #define MMCU_T1LOCAL_TABLE_PHYS1 0x04830728 486 #define MMCU_T1GLOBAL_TABLE_PHYS0 0x04830730 487 #define MMCU_T1GLOBAL_TABLE_PHYS1 0x04830738 488 #define MMCU_T2LOCAL_TABLE_PHYS0 0x04830740 489 #define MMCU_T2LOCAL_TABLE_PHYS1 0x04830748 490 #define MMCU_T2GLOBAL_TABLE_PHYS0 0x04830750 491 #define MMCU_T2GLOBAL_TABLE_PHYS1 0x04830758 492 #define MMCU_T3LOCAL_TABLE_PHYS0 0x04830760 493 #define MMCU_T3LOCAL_TABLE_PHYS1 0x04830768 494 #define MMCU_T3GLOBAL_TABLE_PHYS0 0x04830770 495 #define MMCU_T3GLOBAL_TABLE_PHYS1 0x04830778 496 497 #define MMCU_T0EBWCCTRL 0x04830640 498 #define MMCU_TnEBWCCTRL_BITS 0x00000007 499 #define MMCU_TnEBWCCTRL_S 0 500 #define MMCU_TnEBWCCCTRL_DISABLE_ALL 0 501 #define MMCU_TnEBWCCCTRL_ABIT25 1 502 #define MMCU_TnEBWCCCTRL_ABIT26 2 503 #define MMCU_TnEBWCCCTRL_ABIT27 3 504 #define MMCU_TnEBWCCCTRL_ABIT28 4 505 #define MMCU_TnEBWCCCTRL_ABIT29 5 506 #define MMCU_TnEBWCCCTRL_ABIT30 6 507 #define MMCU_TnEBWCCCTRL_ENABLE_ALL 7 508 #define MMCU_TnEBWCCTRL_STRIDE 8 509 510 #endif /* METAC_2_1 */ 511 512 513 /* Registers within the SYSC register region */ 514 #define METAC_ID 0x04830000 515 #define METAC_ID_MAJOR_BITS 0xFF000000 516 #define METAC_ID_MAJOR_S 24 517 #define METAC_ID_MINOR_BITS 0x00FF0000 518 #define METAC_ID_MINOR_S 16 519 #define METAC_ID_REV_BITS 0x0000FF00 520 #define METAC_ID_REV_S 8 521 #define METAC_ID_MAINT_BITS 0x000000FF 522 #define METAC_ID_MAINT_S 0 523 524 #ifdef METAC_2_1 525 /* Use of this section is strongly deprecated */ 526 #define METAC_ID2 0x04830008 527 #define METAC_ID2_DESIGNER_BITS 0xFFFF0000 /* Modified by customer */ 528 #define METAC_ID2_DESIGNER_S 16 529 #define METAC_ID2_MINOR2_BITS 0x00000F00 /* 3rd digit of prod rev */ 530 #define METAC_ID2_MINOR2_S 8 531 #define METAC_ID2_CONFIG_BITS 0x000000FF /* Wrapper configuration */ 532 #define METAC_ID2_CONFIG_S 0 533 534 /* Primary core identification and configuration information */ 535 #define METAC_CORE_ID 0x04831000 536 #define METAC_COREID_GROUP_BITS 0xFF000000 537 #define METAC_COREID_GROUP_S 24 538 #define METAC_COREID_GROUP_METAG 0x14 539 #define METAC_COREID_ID_BITS 0x00FF0000 540 #define METAC_COREID_ID_S 16 541 #define METAC_COREID_ID_W32 0x10 /* >= for 32-bit pipeline */ 542 #define METAC_COREID_CONFIG_BITS 0x0000FFFF 543 #define METAC_COREID_CONFIG_S 0 544 #define METAC_COREID_CFGCACHE_BITS 0x0007 545 #define METAC_COREID_CFGCACHE_S 0 546 #define METAC_COREID_CFGCACHE_NOM 0 547 #define METAC_COREID_CFGCACHE_TYPE0 1 548 #define METAC_COREID_CFGCACHE_NOMMU 1 /* Alias for TYPE0 */ 549 #define METAC_COREID_CFGCACHE_NOCACHE 2 550 #define METAC_COREID_CFGCACHE_PRIVNOMMU 3 551 #define METAC_COREID_CFGDSP_BITS 0x0038 552 #define METAC_COREID_CFGDSP_S 3 553 #define METAC_COREID_CFGDSP_NOM 0 554 #define METAC_COREID_CFGDSP_MIN 1 555 #define METAC_COREID_NOFPACC_BIT 0x0040 /* Set if no FPU accum */ 556 #define METAC_COREID_CFGFPU_BITS 0x0180 557 #define METAC_COREID_CFGFPU_S 7 558 #define METAC_COREID_CFGFPU_NOM 0 559 #define METAC_COREID_CFGFPU_SNGL 1 560 #define METAC_COREID_CFGFPU_DBL 2 561 #define METAC_COREID_NOAMA_BIT 0x0200 /* Set if no AMA present */ 562 #define METAC_COREID_NOCOH_BIT 0x0400 /* Set if no Gbl coherency */ 563 564 /* Core revision information */ 565 #define METAC_CORE_REV 0x04831008 566 #define METAC_COREREV_DESIGN_BITS 0xFF000000 567 #define METAC_COREREV_DESIGN_S 24 568 #define METAC_COREREV_MAJOR_BITS 0x00FF0000 569 #define METAC_COREREV_MAJOR_S 16 570 #define METAC_COREREV_MINOR_BITS 0x0000FF00 571 #define METAC_COREREV_MINOR_S 8 572 #define METAC_COREREV_MAINT_BITS 0x000000FF 573 #define METAC_COREREV_MAINT_S 0 574 575 /* Configuration information control outside the core */ 576 #define METAC_CORE_DESIGNER1 0x04831010 /* Arbitrary value */ 577 #define METAC_CORE_DESIGNER2 0x04831018 /* Arbitrary value */ 578 579 /* Configuration information covering presence/number of various features */ 580 #define METAC_CORE_CONFIG2 0x04831020 581 #define METAC_CORECFG2_COREDBGTYPE_BITS 0x60000000 /* Core debug type */ 582 #define METAC_CORECFG2_COREDBGTYPE_S 29 583 #define METAC_CORECFG2_DCSMALL_BIT 0x04000000 /* Data cache small */ 584 #define METAC_CORECFG2_ICSMALL_BIT 0x02000000 /* Inst cache small */ 585 #define METAC_CORECFG2_DCSZNP_BITS 0x01C00000 /* Data cache size np */ 586 #define METAC_CORECFG2_DCSZNP_S 22 587 #define METAC_CORECFG2_ICSZNP_BITS 0x00380000 /* Inst cache size np */ 588 #define METAC_CORECFG2_ICSZNP_S 19 589 #define METAC_CORECFG2_DCSZ_BITS 0x00070000 /* Data cache size */ 590 #define METAC_CORECFG2_DCSZ_S 16 591 #define METAC_CORECFG2_xCSZ_4K 0 /* Allocated values */ 592 #define METAC_CORECFG2_xCSZ_8K 1 593 #define METAC_CORECFG2_xCSZ_16K 2 594 #define METAC_CORECFG2_xCSZ_32K 3 595 #define METAC_CORECFG2_xCSZ_64K 4 596 #define METAC_CORE_C2ICSZ_BITS 0x0000E000 /* Inst cache size */ 597 #define METAC_CORE_C2ICSZ_S 13 598 #define METAC_CORE_GBLACC_BITS 0x00001800 /* Number of Global Acc */ 599 #define METAC_CORE_GBLACC_S 11 600 #define METAC_CORE_GBLDXR_BITS 0x00000700 /* 0 -> 0, R -> 2^(R-1) */ 601 #define METAC_CORE_GBLDXR_S 8 602 #define METAC_CORE_GBLAXR_BITS 0x000000E0 /* 0 -> 0, R -> 2^(R-1) */ 603 #define METAC_CORE_GBLAXR_S 5 604 #define METAC_CORE_RTTRACE_BIT 0x00000010 605 #define METAC_CORE_WATCHN_BITS 0x0000000C /* 0 -> 0, N -> 2^N */ 606 #define METAC_CORE_WATCHN_S 2 607 #define METAC_CORE_BREAKN_BITS 0x00000003 /* 0 -> 0, N -> 2^N */ 608 #define METAC_CORE_BREAKN_S 0 609 610 /* Configuration information covering presence/number of various features */ 611 #define METAC_CORE_CONFIG3 0x04831028 612 #define METAC_CORECFG3_L2C_REV_ID_BITS 0x000F0000 /* Revision of L2 cache */ 613 #define METAC_CORECFG3_L2C_REV_ID_S 16 614 #define METAC_CORECFG3_L2C_LINE_SIZE_BITS 0x00003000 /* L2 line size */ 615 #define METAC_CORECFG3_L2C_LINE_SIZE_S 12 616 #define METAC_CORECFG3_L2C_LINE_SIZE_64B 0x0 /* 64 bytes */ 617 #define METAC_CORECFG3_L2C_NUM_WAYS_BITS 0x00000F00 /* L2 number of ways (2^n) */ 618 #define METAC_CORECFG3_L2C_NUM_WAYS_S 8 619 #define METAC_CORECFG3_L2C_SIZE_BITS 0x000000F0 /* L2 size (2^n) */ 620 #define METAC_CORECFG3_L2C_SIZE_S 4 621 #define METAC_CORECFG3_L2C_UNIFIED_BIT 0x00000004 /* Unified cache: */ 622 #define METAC_CORECFG3_L2C_UNIFIED_S 2 623 #define METAC_CORECFG3_L2C_UNIFIED_UNIFIED 1 /* - Unified D/I cache */ 624 #define METAC_CORECFG3_L2C_UNIFIED_SEPARATE 0 /* - Separate D/I cache */ 625 #define METAC_CORECFG3_L2C_MODE_BIT 0x00000002 /* Cache Mode: */ 626 #define METAC_CORECFG3_L2C_MODE_S 1 627 #define METAC_CORECFG3_L2C_MODE_WRITE_BACK 1 /* - Write back */ 628 #define METAC_CORECFG3_L2C_MODE_WRITE_THROUGH 0 /* - Write through */ 629 #define METAC_CORECFG3_L2C_HAVE_L2C_BIT 0x00000001 /* Have L2C */ 630 #define METAC_CORECFG3_L2C_HAVE_L2C_S 0 631 632 #endif /* METAC_2_1 */ 633 634 #define SYSC_CACHE_MMU_CONFIG 0x04830028 635 #ifdef METAC_2_1 636 #define SYSC_CMMUCFG_DCSKEWABLE_BIT 0x00000040 637 #define SYSC_CMMUCFG_ICSKEWABLE_BIT 0x00000020 638 #define SYSC_CMMUCFG_DCSKEWOFF_BIT 0x00000010 /* Skew association override */ 639 #define SYSC_CMMUCFG_ICSKEWOFF_BIT 0x00000008 /* -> default 0 on if present */ 640 #define SYSC_CMMUCFG_MODE_BITS 0x00000007 /* Access to old state */ 641 #define SYSC_CMMUCFG_MODE_S 0 642 #define SYSC_CMMUCFG_ON 0x7 643 #define SYSC_CMMUCFG_EBYPASS 0x6 /* Enhanced by-pass mode */ 644 #define SYSC_CMMUCFG_EBYPASSIC 0x4 /* EB just inst cache */ 645 #define SYSC_CMMUCFG_EBYPASSDC 0x2 /* EB just data cache */ 646 #endif /* METAC_2_1 */ 647 /* Old definitions, Keep them for now */ 648 #define SYSC_CMMUCFG_MMU_ON_BIT 0x1 649 #define SYSC_CMMUCFG_DC_ON_BIT 0x2 650 #define SYSC_CMMUCFG_IC_ON_BIT 0x4 651 652 #define SYSC_JTAG_THREAD 0x04830030 653 #define SYSC_JTAG_TX_BITS 0x00000003 /* Read only bits! */ 654 #define SYSC_JTAG_TX_S 0 655 #define SYSC_JTAG_PRIV_BIT 0x00000004 656 #ifdef METAC_2_1 657 #define SYSC_JTAG_SLAVETX_BITS 0x00000018 658 #define SYSC_JTAG_SLAVETX_S 3 659 #endif /* METAC_2_1 */ 660 661 #define SYSC_DCACHE_FLUSH 0x04830038 662 #define SYSC_ICACHE_FLUSH 0x04830040 663 #define SYSC_xCACHE_FLUSH_INIT 0x1 664 #define MMCU_DIRECTMAP0_ADDR 0x04830080 /* LINSYSDIRECT_BASE -> */ 665 #define MMCU_DIRECTMAPn_STRIDE 0x00000010 /* 4 Region settings */ 666 #define MMCU_DIRECTMAPn_S 4 667 #define MMCU_DIRECTMAPn_ADDR_BITS 0xFF800000 668 #define MMCU_DIRECTMAPn_ADDR_S 23 669 #define MMCU_DIRECTMAPn_ADDR_SCALE 0x00800000 /* 8M Regions */ 670 #ifdef METAC_2_1 671 /* 672 * These fields in the above registers provide MMCU_ENTRY_* values 673 * for each direct mapped region to enable optimisation of these areas. 674 * (LSB similar to VALID must be set for enhancments to be active) 675 */ 676 #define MMCU_DIRECTMAPn_ENHANCE_BIT 0x00000001 /* 0 = no optim */ 677 #define MMCU_DIRECTMAPn_DCCTRL_BITS 0x000000DF /* Get DC Ctrl */ 678 #define MMCU_DIRECTMAPn_DCCTRL_S 0 679 #define MMCU_DIRECTMAPn_ICCTRL_BITS 0x0000C000 /* Get IC Ctrl */ 680 #define MMCU_DIRECTMAPn_ICCTRL_S 8 681 #define MMCU_DIRECTMAPn_ENTLB_BIT 0x00000020 /* Cache in TLB */ 682 #define MMCU_DIRECTMAPn_ICCWIN_BITS 0x0000C000 /* Get IC Win Bits */ 683 #define MMCU_DIRECTMAPn_ICCWIN_S 14 684 #endif /* METAC_2_1 */ 685 686 #define MMCU_DIRECTMAP1_ADDR 0x04830090 687 #define MMCU_DIRECTMAP2_ADDR 0x048300a0 688 #define MMCU_DIRECTMAP3_ADDR 0x048300b0 689 690 /* 691 * These bits partion each threads use of data cache or instruction cache 692 * resource by modifying the top 4 bits of the address within the cache 693 * storage area. 694 */ 695 #define SYSC_DCPART0 0x04830200 696 #define SYSC_xCPARTn_STRIDE 0x00000008 697 #define SYSC_xCPARTL_AND_BITS 0x0000000F /* Masks top 4 bits */ 698 #define SYSC_xCPARTL_AND_S 0 699 #define SYSC_xCPARTG_AND_BITS 0x00000F00 /* Masks top 4 bits */ 700 #define SYSC_xCPARTG_AND_S 8 701 #define SYSC_xCPARTL_OR_BITS 0x000F0000 /* Ors into top 4 bits */ 702 #define SYSC_xCPARTL_OR_S 16 703 #ifdef METAC_2_1 704 #define SYSC_DCPART_GCON_BIT 0x00100000 /* Coherent shared local */ 705 #endif /* METAC_2_1 */ 706 #define SYSC_xCPARTG_OR_BITS 0x0F000000 /* Ors into top 4 bits */ 707 #define SYSC_xCPARTG_OR_S 24 708 #define SYSC_CWRMODE_BIT 0x80000000 /* Write cache mode bit */ 709 710 #define SYSC_DCPART1 0x04830208 711 #define SYSC_DCPART2 0x04830210 712 #define SYSC_DCPART3 0x04830218 713 #define SYSC_ICPART0 0x04830220 714 #define SYSC_ICPART1 0x04830228 715 #define SYSC_ICPART2 0x04830230 716 #define SYSC_ICPART3 0x04830238 717 718 /* 719 * META Core Memory and Cache Update registers 720 */ 721 #define SYSC_MCMDATAX 0x04830300 /* 32-bit read/write data register */ 722 #define SYSC_MCMDATAT 0x04830308 /* Read or write data triggers oper */ 723 #define SYSC_MCMGCTRL 0x04830310 /* Control register */ 724 #define SYSC_MCMGCTRL_READ_BIT 0x00000001 /* Set to issue 1st read */ 725 #define SYSC_MCMGCTRL_AINC_BIT 0x00000002 /* Set for auto-increment */ 726 #define SYSC_MCMGCTRL_ADDR_BITS 0x000FFFFC /* Address or index */ 727 #define SYSC_MCMGCTRL_ADDR_S 2 728 #define SYSC_MCMGCTRL_ID_BITS 0x0FF00000 /* Internal memory block Id */ 729 #define SYSC_MCMGCTRL_ID_S 20 730 #define SYSC_MCMGID_NODEV 0xFF /* No Device Selected */ 731 #define SYSC_MCMGID_DSPRAM0A 0x04 /* DSP RAM D0 block A access */ 732 #define SYSC_MCMGID_DSPRAM0B 0x05 /* DSP RAM D0 block B access */ 733 #define SYSC_MCMGID_DSPRAM1A 0x06 /* DSP RAM D1 block A access */ 734 #define SYSC_MCMGID_DSPRAM1B 0x07 /* DSP RAM D1 block B access */ 735 #define SYSC_MCMGID_DCACHEL 0x08 /* DCACHE lines (64-bytes/line) */ 736 #ifdef METAC_2_1 737 #define SYSC_MCMGID_DCACHETLB 0x09 /* DCACHE TLB ( Read Only ) */ 738 #endif /* METAC_2_1 */ 739 #define SYSC_MCMGID_DCACHET 0x0A /* DCACHE tags (32-bits/line) */ 740 #define SYSC_MCMGID_DCACHELRU 0x0B /* DCACHE LRU (8-bits/line) */ 741 #define SYSC_MCMGID_ICACHEL 0x0C /* ICACHE lines (64-bytes/line */ 742 #ifdef METAC_2_1 743 #define SYSC_MCMGID_ICACHETLB 0x0D /* ICACHE TLB (Read Only ) */ 744 #endif /* METAC_2_1 */ 745 #define SYSC_MCMGID_ICACHET 0x0E /* ICACHE Tags (32-bits/line) */ 746 #define SYSC_MCMGID_ICACHELRU 0x0F /* ICACHE LRU (8-bits/line ) */ 747 #define SYSC_MCMGID_COREIRAM0 0x10 /* Core code mem id 0 */ 748 #define SYSC_MCMGID_COREIRAMn 0x17 749 #define SYSC_MCMGID_COREDRAM0 0x18 /* Core data mem id 0 */ 750 #define SYSC_MCMGID_COREDRAMn 0x1F 751 #ifdef METAC_2_1 752 #define SYSC_MCMGID_DCACHEST 0x20 /* DCACHE ST ( Read Only ) */ 753 #define SYSC_MCMGID_ICACHEST 0x21 /* ICACHE ST ( Read Only ) */ 754 #define SYSC_MCMGID_DCACHETLBLRU 0x22 /* DCACHE TLB LRU ( Read Only )*/ 755 #define SYSC_MCMGID_ICACHETLBLRU 0x23 /* ICACHE TLB LRU( Read Only ) */ 756 #define SYSC_MCMGID_DCACHESTLRU 0x24 /* DCACHE ST LRU ( Read Only ) */ 757 #define SYSC_MCMGID_ICACHESTLRU 0x25 /* ICACHE ST LRU ( Read Only ) */ 758 #define SYSC_MCMGID_DEBUGTLB 0x26 /* DEBUG TLB ( Read Only ) */ 759 #define SYSC_MCMGID_DEBUGST 0x27 /* DEBUG ST ( Read Only ) */ 760 #define SYSC_MCMGID_L2CACHEL 0x30 /* L2 Cache Lines (64-bytes/line) */ 761 #define SYSC_MCMGID_L2CACHET 0x31 /* L2 Cache Tags (32-bits/line) */ 762 #define SYSC_MCMGID_COPROX0 0x70 /* Coprocessor port id 0 */ 763 #define SYSC_MCMGID_COPROXn 0x77 764 #endif /* METAC_2_1 */ 765 #define SYSC_MCMGCTRL_TR31_BIT 0x80000000 /* Trigger 31 on completion */ 766 #define SYSC_MCMSTATUS 0x04830318 /* Status read only */ 767 #define SYSC_MCMSTATUS_IDLE_BIT 0x00000001 768 769 /* META System Events */ 770 #define SYSC_SYS_EVENT 0x04830400 771 #define SYSC_SYSEVT_ATOMIC_BIT 0x00000001 772 #define SYSC_SYSEVT_CACHEX_BIT 0x00000002 773 #define SYSC_ATOMIC_LOCK 0x04830408 774 #define SYSC_ATOMIC_STATE_TX_BITS 0x0000000F 775 #define SYSC_ATOMIC_STATE_TX_S 0 776 #ifdef METAC_1_2 777 #define SYSC_ATOMIC_STATE_DX_BITS 0x000000F0 778 #define SYSC_ATOMIC_STATE_DX_S 4 779 #else /* METAC_1_2 */ 780 #define SYSC_ATOMIC_SOURCE_BIT 0x00000010 781 #endif /* !METAC_1_2 */ 782 783 784 #ifdef METAC_2_1 785 786 /* These definitions replace the EXPAND_TIMER_DIV register defines which are to 787 * be deprecated. 788 */ 789 #define SYSC_TIMER_DIV 0x04830140 790 #define SYSC_TIMDIV_BITS 0x000000FF 791 #define SYSC_TIMDIV_S 0 792 793 /* META Enhanced by-pass control for local and global region */ 794 #define MMCU_LOCAL_EBCTRL 0x04830600 795 #define MMCU_GLOBAL_EBCTRL 0x04830608 796 #define MMCU_EBCTRL_SINGLE_BIT 0x00000020 /* TLB Uncached */ 797 /* 798 * These fields in the above registers provide MMCU_ENTRY_* values 799 * for each direct mapped region to enable optimisation of these areas. 800 */ 801 #define MMCU_EBCTRL_DCCTRL_BITS 0x000000C0 /* Get DC Ctrl */ 802 #define MMCU_EBCTRL_DCCTRL_S 0 803 #define MMCU_EBCTRL_ICCTRL_BITS 0x0000C000 /* Get DC Ctrl */ 804 #define MMCU_EBCTRL_ICCTRL_S 8 805 806 /* META Cached Core Mode Registers */ 807 #define MMCU_T0CCM_ICCTRL 0x04830680 /* Core cached code control */ 808 #define MMCU_TnCCM_xxCTRL_STRIDE 8 809 #define MMCU_TnCCM_xxCTRL_STRIDE_S 3 810 #define MMCU_T1CCM_ICCTRL 0x04830688 811 #define MMCU_T2CCM_ICCTRL 0x04830690 812 #define MMCU_T3CCM_ICCTRL 0x04830698 813 #define MMCU_T0CCM_DCCTRL 0x048306C0 /* Core cached data control */ 814 #define MMCU_T1CCM_DCCTRL 0x048306C8 815 #define MMCU_T2CCM_DCCTRL 0x048306D0 816 #define MMCU_T3CCM_DCCTRL 0x048306D8 817 #define MMCU_TnCCM_ENABLE_BIT 0x00000001 818 #define MMCU_TnCCM_WIN3_BIT 0x00000002 819 #define MMCU_TnCCM_DCWRITE_BIT 0x00000004 /* In DCCTRL only */ 820 #define MMCU_TnCCM_REGSZ_BITS 0x00000F00 821 #define MMCU_TnCCM_REGSZ_S 8 822 #define MMCU_TnCCM_REGSZ0_POWER 12 /* RegSz 0 -> 4K */ 823 #define MMCU_TnCCM_REGSZ_MAXBYTES 0x00080000 /* 512K max */ 824 #define MMCU_TnCCM_ADDR_BITS 0xFFFFF000 825 #define MMCU_TnCCM_ADDR_S 12 826 827 #endif /* METAC_2_1 */ 828 829 /* 830 * Hardware performance counter registers 831 * -------------------------------------- 832 */ 833 #ifdef METAC_2_1 834 /* Two Performance Counter Internal Core Events Control registers */ 835 #define PERF_ICORE0 0x0480FFD0 836 #define PERF_ICORE1 0x0480FFD8 837 #define PERFI_CTRL_BITS 0x0000000F 838 #define PERFI_CTRL_S 0 839 #define PERFI_CAH_DMISS 0x0 /* Dcache Misses in cache (TLB Hit) */ 840 #define PERFI_CAH_IMISS 0x1 /* Icache Misses in cache (TLB Hit) */ 841 #define PERFI_TLB_DMISS 0x2 /* Dcache Misses in per-thread TLB */ 842 #define PERFI_TLB_IMISS 0x3 /* Icache Misses in per-thread TLB */ 843 #define PERFI_TLB_DWRHITS 0x4 /* DC Write-Hits in per-thread TLB */ 844 #define PERFI_TLB_DWRMISS 0x5 /* DC Write-Miss in per-thread TLB */ 845 #define PERFI_CAH_DLFETCH 0x8 /* DC Read cache line fetch */ 846 #define PERFI_CAH_ILFETCH 0x9 /* DC Read cache line fetch */ 847 #define PERFI_CAH_DWFETCH 0xA /* DC Read cache word fetch */ 848 #define PERFI_CAH_IWFETCH 0xB /* DC Read cache word fetch */ 849 #endif /* METAC_2_1 */ 850 851 /* Two memory-mapped hardware performance counter registers */ 852 #define PERF_COUNT0 0x0480FFE0 853 #define PERF_COUNT1 0x0480FFE8 854 855 /* Fields in PERF_COUNTn registers */ 856 #define PERF_COUNT_BITS 0x00ffffff /* Event count value */ 857 858 #define PERF_THREAD_BITS 0x0f000000 /* Thread mask selects threads */ 859 #define PERF_THREAD_S 24 860 861 #define PERF_CTRL_BITS 0xf0000000 /* Event filter control */ 862 #define PERF_CTRL_S 28 863 864 #define PERFCTRL_SUPER 0 /* Superthread cycles */ 865 #define PERFCTRL_REWIND 1 /* Rewinds due to Dcache Misses */ 866 #ifdef METAC_2_1 867 #define PERFCTRL_SUPREW 2 /* Rewinds of superthreaded cycles (no mask) */ 868 869 #define PERFCTRL_CYCLES 3 /* Counts all cycles (no mask) */ 870 871 #define PERFCTRL_PREDBC 4 /* Conditional branch predictions */ 872 #define PERFCTRL_MISPBC 5 /* Conditional branch mispredictions */ 873 #define PERFCTRL_PREDRT 6 /* Return predictions */ 874 #define PERFCTRL_MISPRT 7 /* Return mispredictions */ 875 #endif /* METAC_2_1 */ 876 877 #define PERFCTRL_DHITS 8 /* Dcache Hits */ 878 #define PERFCTRL_IHITS 9 /* Icache Hits */ 879 #define PERFCTRL_IMISS 10 /* Icache Misses in cache or TLB */ 880 #ifdef METAC_2_1 881 #define PERFCTRL_DCSTALL 11 /* Dcache+TLB o/p delayed (per-thread) */ 882 #define PERFCTRL_ICSTALL 12 /* Icache+TLB o/p delayed (per-thread) */ 883 884 #define PERFCTRL_INT 13 /* Internal core delailed events (see next) */ 885 #define PERFCTRL_EXT 15 /* External source in core periphery */ 886 #endif /* METAC_2_1 */ 887 888 #ifdef METAC_2_1 889 /* These definitions replace the EXPAND_PERFCHANx register defines which are to 890 * be deprecated. 891 */ 892 #define PERF_CHAN0 0x04830150 893 #define PERF_CHAN1 0x04830158 894 #define PERF_CHAN_BITS 0x0000000F 895 #define PERF_CHAN_S 0 896 #define PERFCHAN_WRC_WRBURST 0x0 /* Write combiner write burst */ 897 #define PERFCHAN_WRC_WRITE 0x1 /* Write combiner write */ 898 #define PERFCHAN_WRC_RDBURST 0x2 /* Write combiner read burst */ 899 #define PERFCHAN_WRC_READ 0x3 /* Write combiner read */ 900 #define PERFCHAN_PREARB_DELAY 0x4 /* Pre-arbiter delay cycle */ 901 /* Cross-bar hold-off cycle: */ 902 #define PERFCHAN_XBAR_HOLDWRAP 0x5 /* wrapper register */ 903 #define PERFCHAN_XBAR_HOLDSBUS 0x6 /* system bus (ATP only) */ 904 #define PERFCHAN_XBAR_HOLDCREG 0x9 /* core registers */ 905 #define PERFCHAN_L2C_MISS 0x6 /* L2 Cache miss */ 906 #define PERFCHAN_L2C_HIT 0x7 /* L2 Cache hit */ 907 #define PERFCHAN_L2C_WRITEBACK 0x8 /* L2 Cache writeback */ 908 /* Admission delay cycle: */ 909 #define PERFCHAN_INPUT_CREG 0xB /* core registers */ 910 #define PERFCHAN_INPUT_INTR 0xC /* internal ram */ 911 #define PERFCHAN_INPUT_WRC 0xD /* write combiners(memory) */ 912 913 /* Should following be removed as not in TRM anywhere? */ 914 #define PERFCHAN_XBAR_HOLDINTR 0x8 /* internal ram */ 915 #define PERFCHAN_INPUT_SBUS 0xA /* register port */ 916 /* End of remove section. */ 917 918 #define PERFCHAN_MAINARB_DELAY 0xF /* Main arbiter delay cycle */ 919 920 #endif /* METAC_2_1 */ 921 922 #ifdef METAC_2_1 923 /* 924 * Write combiner registers 925 * ------------------------ 926 * 927 * These replace the EXPAND_T0WRCOMBINE register defines, which will be 928 * deprecated. 929 */ 930 #define WRCOMB_CONFIG0 0x04830100 931 #define WRCOMB_LFFEn_BIT 0x00004000 /* Enable auto line full flush */ 932 #define WRCOMB_ENABLE_BIT 0x00002000 /* Enable write combiner */ 933 #define WRCOMB_TIMEOUT_ENABLE_BIT 0x00001000 /* Timeout flush enable */ 934 #define WRCOMB_TIMEOUT_COUNT_BITS 0x000003FF 935 #define WRCOMB_TIMEOUT_COUNT_S 0 936 #define WRCOMB_CONFIG4 0x04830180 937 #define WRCOMB_PARTALLOC_BITS 0x000000C0 938 #define WRCOMB_PARTALLOC_S 64 939 #define WRCOMB_PARTSIZE_BITS 0x00000030 940 #define WRCOMB_PARTSIZE_S 4 941 #define WRCOMB_PARTOFFSET_BITS 0x0000000F 942 #define WRCOMB_PARTOFFSET_S 0 943 #define WRCOMB_CONFIG_STRIDE 8 944 #endif /* METAC_2_1 */ 945 946 #ifdef METAC_2_1 947 /* 948 * Thread arbiter registers 949 * ------------------------ 950 * 951 * These replace the EXPAND_T0ARBITER register defines, which will be 952 * deprecated. 953 */ 954 #define ARBITER_ARBCONFIG0 0x04830120 955 #define ARBCFG_BPRIORITY_BIT 0x02000000 956 #define ARBCFG_IPRIORITY_BIT 0x01000000 957 #define ARBCFG_PAGE_BITS 0x00FF0000 958 #define ARBCFG_PAGE_S 16 959 #define ARBCFG_BBASE_BITS 0x0000FF00 960 #define ARGCFG_BBASE_S 8 961 #define ARBCFG_IBASE_BITS 0x000000FF 962 #define ARBCFG_IBASE_S 0 963 #define ARBITER_TTECONFIG0 0x04820160 964 #define ARBTTE_IUPPER_BITS 0xFF000000 965 #define ARBTTE_IUPPER_S 24 966 #define ARBTTE_ILOWER_BITS 0x00FF0000 967 #define ARBTTE_ILOWER_S 16 968 #define ARBTTE_BUPPER_BITS 0x0000FF00 969 #define ARBTTE_BUPPER_S 8 970 #define ARBTTE_BLOWER_BITS 0x000000FF 971 #define ARBTTE_BLOWER_S 0 972 #define ARBITER_STRIDE 8 973 #endif /* METAC_2_1 */ 974 975 /* 976 * Expansion area registers 977 * -------------------------------------- 978 */ 979 980 /* These defines are to be deprecated. See above instead. */ 981 #define EXPAND_T0WRCOMBINE 0x03000000 982 #ifdef METAC_2_1 983 #define EXPWRC_LFFEn_BIT 0x00004000 /* Enable auto line full flush */ 984 #endif /* METAC_2_1 */ 985 #define EXPWRC_ENABLE_BIT 0x00002000 /* Enable write combiner */ 986 #define EXPWRC_TIMEOUT_ENABLE_BIT 0x00001000 /* Timeout flush enable */ 987 #define EXPWRC_TIMEOUT_COUNT_BITS 0x000003FF 988 #define EXPWRC_TIMEOUT_COUNT_S 0 989 #define EXPAND_TnWRCOMBINE_STRIDE 0x00000008 990 991 /* These defines are to be deprecated. See above instead. */ 992 #define EXPAND_T0ARBITER 0x03000020 993 #define EXPARB_BPRIORITY_BIT 0x02000000 994 #define EXPARB_IPRIORITY_BIT 0x01000000 995 #define EXPARB_PAGE_BITS 0x00FF0000 996 #define EXPARB_PAGE_S 16 997 #define EXPARB_BBASE_BITS 0x0000FF00 998 #define EXPARB_BBASE_S 8 999 #define EXPARB_IBASE_BITS 0x000000FF 1000 #define EXPARB_IBASE_S 0 1001 #define EXPAND_TnARBITER_STRIDE 0x00000008 1002 1003 /* These definitions are to be deprecated. See above instead. */ 1004 #define EXPAND_TIMER_DIV 0x03000040 1005 #define EXPTIM_DIV_BITS 0x000000FF 1006 #define EXPTIM_DIV_S 0 1007 1008 /* These definitions are to be deprecated. See above instead. */ 1009 #define EXPAND_PERFCHAN0 0x03000050 1010 #define EXPAND_PERFCHAN1 0x03000058 1011 #define EXPPERF_CTRL_BITS 0x0000000F 1012 #define EXPPERF_CTRL_S 0 1013 #define EXPPERF_WRC_WRBURST 0x0 /* Write combiner write burst */ 1014 #define EXPPERF_WRC_WRITE 0x1 /* Write combiner write */ 1015 #define EXPPERF_WRC_RDBURST 0x2 /* Write combiner read burst */ 1016 #define EXPPERF_WRC_READ 0x3 /* Write combiner read */ 1017 #define EXPPERF_PREARB_DELAY 0x4 /* Pre-arbiter delay cycle */ 1018 /* Cross-bar hold-off cycle: */ 1019 #define EXPPERF_XBAR_HOLDWRAP 0x5 /* wrapper register */ 1020 #define EXPPERF_XBAR_HOLDSBUS 0x6 /* system bus */ 1021 #ifdef METAC_1_2 1022 #define EXPPERF_XBAR_HOLDLBUS 0x7 /* local bus */ 1023 #else /* METAC_1_2 */ 1024 #define EXPPERF_XBAR_HOLDINTR 0x8 /* internal ram */ 1025 #define EXPPERF_XBAR_HOLDCREG 0x9 /* core registers */ 1026 /* Admission delay cycle: */ 1027 #define EXPPERF_INPUT_SBUS 0xA /* register port */ 1028 #define EXPPERF_INPUT_CREG 0xB /* core registers */ 1029 #define EXPPERF_INPUT_INTR 0xC /* internal ram */ 1030 #define EXPPERF_INPUT_WRC 0xD /* write combiners(memory) */ 1031 #endif /* !METAC_1_2 */ 1032 #define EXPPERF_MAINARB_DELAY 0xF /* Main arbiter delay cycle */ 1033 1034 /* 1035 * Debug port registers 1036 * -------------------------------------- 1037 */ 1038 1039 /* Data Exchange Register */ 1040 #define DBGPORT_MDBGDATAX 0x0 1041 1042 /* Data Transfer register */ 1043 #define DBGPORT_MDBGDATAT 0x4 1044 1045 /* Control Register 0 */ 1046 #define DBGPORT_MDBGCTRL0 0x8 1047 #define DBGPORT_MDBGCTRL0_ADDR_BITS 0xFFFFFFFC 1048 #define DBGPORT_MDBGCTRL0_ADDR_S 2 1049 #define DBGPORT_MDBGCTRL0_AUTOINCR_BIT 0x00000002 1050 #define DBGPORT_MDBGCTRL0_RD_BIT 0x00000001 1051 1052 /* Control Register 1 */ 1053 #define DBGPORT_MDBGCTRL1 0xC 1054 #ifdef METAC_2_1 1055 #define DBGPORT_MDBGCTRL1_DEFERRTHREAD_BITS 0xC0000000 1056 #define DBGPORT_MDBGCTRL1_DEFERRTHREAD_S 30 1057 #endif /* METAC_2_1 */ 1058 #define DBGPORT_MDBGCTRL1_LOCK2_INTERLOCK_BIT 0x20000000 1059 #define DBGPORT_MDBGCTRL1_ATOMIC_INTERLOCK_BIT 0x10000000 1060 #define DBGPORT_MDBGCTRL1_TRIGSTATUS_BIT 0x08000000 1061 #define DBGPORT_MDBGCTRL1_GBLPORT_IDLE_BIT 0x04000000 1062 #define DBGPORT_MDBGCTRL1_COREMEM_IDLE_BIT 0x02000000 1063 #define DBGPORT_MDBGCTRL1_READY_BIT 0x01000000 1064 #ifdef METAC_2_1 1065 #define DBGPORT_MDBGCTRL1_DEFERRID_BITS 0x00E00000 1066 #define DBGPORT_MDBGCTRL1_DEFERRID_S 21 1067 #define DBGPORT_MDBGCTRL1_DEFERR_BIT 0x00100000 1068 #endif /* METAC_2_1 */ 1069 #define DBGPORT_MDBGCTRL1_WR_ACTIVE_BIT 0x00040000 1070 #define DBGPORT_MDBGCTRL1_COND_LOCK2_BIT 0x00020000 1071 #define DBGPORT_MDBGCTRL1_LOCK2_BIT 0x00010000 1072 #define DBGPORT_MDBGCTRL1_DIAGNOSE_BIT 0x00008000 1073 #define DBGPORT_MDBGCTRL1_FORCEDIAG_BIT 0x00004000 1074 #define DBGPORT_MDBGCTRL1_MEMFAULT_BITS 0x00003000 1075 #define DBGPORT_MDBGCTRL1_MEMFAULT_S 12 1076 #define DBGPORT_MDBGCTRL1_TRIGGER_BIT 0x00000100 1077 #ifdef METAC_2_1 1078 #define DBGPORT_MDBGCTRL1_INTSPECIAL_BIT 0x00000080 1079 #define DBGPORT_MDBGCTRL1_INTRUSIVE_BIT 0x00000040 1080 #endif /* METAC_2_1 */ 1081 #define DBGPORT_MDBGCTRL1_THREAD_BITS 0x00000030 /* Thread mask selects threads */ 1082 #define DBGPORT_MDBGCTRL1_THREAD_S 4 1083 #define DBGPORT_MDBGCTRL1_TRANS_SIZE_BITS 0x0000000C 1084 #define DBGPORT_MDBGCTRL1_TRANS_SIZE_S 2 1085 #define DBGPORT_MDBGCTRL1_TRANS_SIZE_32_BIT 0x00000000 1086 #define DBGPORT_MDBGCTRL1_TRANS_SIZE_16_BIT 0x00000004 1087 #define DBGPORT_MDBGCTRL1_TRANS_SIZE_8_BIT 0x00000008 1088 #define DBGPORT_MDBGCTRL1_BYTE_ROUND_BITS 0x00000003 1089 #define DBGPORT_MDBGCTRL1_BYTE_ROUND_S 0 1090 #define DBGPORT_MDBGCTRL1_BYTE_ROUND_8_BIT 0x00000001 1091 #define DBGPORT_MDBGCTRL1_BYTE_ROUND_16_BIT 0x00000002 1092 1093 1094 /* L2 Cache registers */ 1095 #define SYSC_L2C_INIT 0x048300C0 1096 #define SYSC_L2C_INIT_INIT 1 1097 #define SYSC_L2C_INIT_IN_PROGRESS 0 1098 #define SYSC_L2C_INIT_COMPLETE 1 1099 1100 #define SYSC_L2C_ENABLE 0x048300D0 1101 #define SYSC_L2C_ENABLE_ENABLE_BIT 0x00000001 1102 #define SYSC_L2C_ENABLE_PFENABLE_BIT 0x00000002 1103 1104 #define SYSC_L2C_PURGE 0x048300C8 1105 #define SYSC_L2C_PURGE_PURGE 1 1106 #define SYSC_L2C_PURGE_IN_PROGRESS 0 1107 #define SYSC_L2C_PURGE_COMPLETE 1 1108 1109 #endif /* _ASM_METAG_MEM_H_ */ 1110