scache
extern struct scache *mbc;
struct scache *mbc;
static const struct scache wb_msr = {
static const struct scache wb_nomsr = {
static const struct scache wt_msr = {
static const struct scache wt_nomsr = {
static const struct scache wt_msr_noirq = {
static const struct scache wt_nomsr_noirq = {
mbc = (struct scache *)&wb_msr;
mbc = (struct scache *)&wt_msr_noirq;
mbc = (struct scache *)&wt_msr;
mbc = (struct scache *)&wb_nomsr;
mbc = (struct scache *)&wt_nomsr_noirq;
mbc = (struct scache *)&wt_nomsr;
#define cpu_scache_line_size() cpu_data[0].scache.linesz
struct cache_desc scache; /* Secondary cache */
__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 16, )
__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 32, )
__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 64, )
__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 128, )
__BUILD_BLAST_CACHE(inv_s, scache, Index_Writeback_Inv_SD, Hit_Invalidate_SD, 16, )
__BUILD_BLAST_CACHE(inv_s, scache, Index_Writeback_Inv_SD, Hit_Invalidate_SD, 32, )
__BUILD_BLAST_CACHE(inv_s, scache, Index_Writeback_Inv_SD, Hit_Invalidate_SD, 64, )
__BUILD_BLAST_CACHE(inv_s, scache, Index_Writeback_Inv_SD, Hit_Invalidate_SD, 128, )
__BUILD_BLAST_CACHE_RANGE(s, scache, Hit_Writeback_Inv_SD, protected_, )
__BUILD_BLAST_CACHE_RANGE(s, scache, Hit_Writeback_Inv_SD, , )
__BUILD_BLAST_CACHE_RANGE(inv_s, scache, Hit_Invalidate_SD, , )
__BUILD_BLAST_CACHE_NODE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 16)
__BUILD_BLAST_CACHE_NODE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 32)
__BUILD_BLAST_CACHE_NODE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 64)
__BUILD_BLAST_CACHE_NODE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 128)
if (c->scache.waysize) {
populate_cache(scache, this_leaf, level, CACHE_TYPE_UNIFIED);
if (c->scache.waysize) {
c->scache.ways = 8;
c->scache.flags &= ~MIPS_CACHE_NOT_PRESENT;
c->scache.flags = MIPS_CACHE_NOT_PRESENT;
c->scache.linesz = 16 << ((config & R4K_CONF_SB) >> 22);
c->scache.ways = 1;
c->scache.waybit = 0; /* does not matter */
c->scache.linesz = 32;
c->scache.ways = 4;
c->scache.waybit = 0;
c->scache.waysize = scache_size / (c->scache.ways);
c->scache.sets = scache_size / (c->scache.linesz * c->scache.ways);
scache_size >> 10, way_string[c->scache.ways], c->scache.linesz);
c->scache.linesz = 2 << lsize;
c->scache.linesz = 0;
c->scache.sets = 64 << ((config2 >> 8) & 15);
c->scache.ways = 1 + (config2 & 15);
c->scache.sets *= 2;
c->scache.sets *= 4;
scache_size = c->scache.sets * c->scache.ways * c->scache.linesz;
c->scache.waybit = 0;
c->scache.waysize = scache_size / c->scache.ways;
scache_size >> 10, way_string[c->scache.ways], c->scache.linesz);
c->scache.linesz = 64 << ((config >> 13) & 1);
c->scache.ways = 2;
c->scache.waybit= 0;
scache_size = c->scache.ways * c->scache.sets * c->scache.linesz;
way_string[c->scache.ways], c->scache.linesz);
if (!(c->scache.flags & MIPS_CACHE_NOT_PRESENT))
c->scache.waysize = scache_size / c->scache.ways;
c->scache.sets = scache_size / (c->scache.linesz * c->scache.ways);
scache_size >> 10, way_string[c->scache.ways], c->scache.linesz);
if (c->scache.flags & MIPS_CACHE_NOT_PRESENT)
c->scache.linesz = 2 << tmp;
c->scache.sets = 64 << sets;
c->scache.linesz = 2 << line_sz;
c->scache.ways = assoc + 1;
c->scache.waysize = c->scache.sets * c->scache.linesz;
c->scache.waybit = __ffs(c->scache.waysize);
if (c->scache.linesz) {
c->scache.flags &= ~MIPS_CACHE_NOT_PRESENT;
c->scache.flags |= MIPS_CACHE_NOT_PRESENT;
c->scache.sets = 64 << tmp;
c->scache.ways = tmp + 1;
c->scache.ways = 4;
c->scache.sets = 256;
c->scache.ways = 4;
c->scache.waysize = c->scache.sets * c->scache.linesz;
c->scache.waybit = __ffs(c->scache.waysize);
c->scache.flags &= ~MIPS_CACHE_NOT_PRESENT;
c->scache.linesz = sc_lsize;
c->scache.ways = 4;
c->scache.waybit= __ffs(scache_size / c->scache.ways);
c->scache.waysize = scache_size / c->scache.ways;
c->scache.sets = scache_size / (c->scache.linesz * c->scache.ways);
struct cache_info scache; /* Secondary cache */
l2_cache_shape = CACHE_DESC_SHAPE(current_cpu_data.scache);
show_cacheinfo(m, "scache", c->scache);
boot_cpu_data.scache.way_incr = (1 << 16);
boot_cpu_data.scache.entry_shift = 5;
boot_cpu_data.scache.ways = 4;
boot_cpu_data.scache.linesz = L1_CACHE_BYTES;
boot_cpu_data.scache.entry_mask =
(boot_cpu_data.scache.way_incr -
boot_cpu_data.scache.linesz);
boot_cpu_data.scache.sets = size /
(boot_cpu_data.scache.linesz *
boot_cpu_data.scache.ways);
boot_cpu_data.scache.way_size =
(boot_cpu_data.scache.sets *
boot_cpu_data.scache.linesz);
boot_cpu_data.scache.ways,
boot_cpu_data.scache.sets,
boot_cpu_data.scache.way_incr);
boot_cpu_data.scache.entry_mask,
boot_cpu_data.scache.alias_mask,
boot_cpu_data.scache.n_aliases);
compute_alias(&boot_cpu_data.scache);