static int gk20a_determine_L2_size_bytes(struct gk20a *g) { const u32 gpuid = GK20A_GPUID(g->gpu_characteristics.arch, g->gpu_characteristics.impl); u32 lts_per_ltc; u32 ways; u32 sets; u32 bytes_per_line; u32 active_ltcs; u32 cache_size; u32 tmp; u32 active_sets_value; tmp = gk20a_readl(g, ltc_ltc0_lts0_tstg_cfg1_r()); ways = hweight32(ltc_ltc0_lts0_tstg_cfg1_active_ways_v(tmp)); active_sets_value = ltc_ltc0_lts0_tstg_cfg1_active_sets_v(tmp); if (active_sets_value == ltc_ltc0_lts0_tstg_cfg1_active_sets_all_v()) { sets = 64; } else if (active_sets_value == ltc_ltc0_lts0_tstg_cfg1_active_sets_half_v()) { sets = 32; } else if (active_sets_value == ltc_ltc0_lts0_tstg_cfg1_active_sets_quarter_v()) { sets = 16; } else { dev_err(dev_from_gk20a(g), "Unknown constant %u for active sets", (unsigned)active_sets_value); sets = 0; } active_ltcs = g->gr.num_fbps; /* chip-specific values */ switch (gpuid) { case GK20A_GPUID_GK20A: lts_per_ltc = 1; bytes_per_line = 128; break; default: dev_err(dev_from_gk20a(g), "Unknown GPU id 0x%02x\n", (unsigned)gpuid); lts_per_ltc = 0; bytes_per_line = 0; } cache_size = active_ltcs * lts_per_ltc * ways * sets * bytes_per_line; return cache_size; }
static int gm20b_determine_L2_size_bytes(struct gk20a *g) { u32 lts_per_ltc; u32 ways; u32 sets; u32 bytes_per_line; u32 active_ltcs; u32 cache_size; u32 tmp; u32 active_sets_value; tmp = gk20a_readl(g, ltc_ltc0_lts0_tstg_cfg1_r()); ways = hweight32(ltc_ltc0_lts0_tstg_cfg1_active_ways_v(tmp)); active_sets_value = ltc_ltc0_lts0_tstg_cfg1_active_sets_v(tmp); if (active_sets_value == ltc_ltc0_lts0_tstg_cfg1_active_sets_all_v()) { sets = 64; } else if (active_sets_value == ltc_ltc0_lts0_tstg_cfg1_active_sets_half_v()) { sets = 32; } else if (active_sets_value == ltc_ltc0_lts0_tstg_cfg1_active_sets_quarter_v()) { sets = 16; } else { dev_err(dev_from_gk20a(g), "Unknown constant %u for active sets", (unsigned)active_sets_value); sets = 0; } active_ltcs = g->gr.num_fbps; /* chip-specific values */ lts_per_ltc = 2; bytes_per_line = 128; cache_size = active_ltcs * lts_per_ltc * ways * sets * bytes_per_line; return cache_size; }