Lines Matching full:map

5  * map.c : Functions to read and decode DRAM address maps
17 ctx->map.intlv_mode = FIELD_GET(DF2_INTLV_NUM_CHAN, ctx->map.base); in df2_get_intlv_mode()
19 if (ctx->map.intlv_mode == 8) in df2_get_intlv_mode()
20 ctx->map.intlv_mode = DF2_2CHAN_HASH; in df2_get_intlv_mode()
22 if (ctx->map.intlv_mode != NONE && in df2_get_intlv_mode()
23 ctx->map.intlv_mode != NOHASH_2CHAN && in df2_get_intlv_mode()
24 ctx->map.intlv_mode != DF2_2CHAN_HASH) in df2_get_intlv_mode()
32 ctx->map.intlv_mode = FIELD_GET(DF3_INTLV_NUM_CHAN, ctx->map.base); in df3_get_intlv_mode()
38 ctx->map.intlv_mode = FIELD_GET(DF3p5_INTLV_NUM_CHAN, ctx->map.base); in df3p5_get_intlv_mode()
40 if (ctx->map.intlv_mode == DF3_6CHAN) in df3p5_get_intlv_mode()
48 ctx->map.intlv_mode = FIELD_GET(DF4_INTLV_NUM_CHAN, ctx->map.intlv); in df4_get_intlv_mode()
50 if (ctx->map.intlv_mode == DF3_COD4_2CHAN_HASH || in df4_get_intlv_mode()
51 ctx->map.intlv_mode == DF3_COD2_4CHAN_HASH || in df4_get_intlv_mode()
52 ctx->map.intlv_mode == DF3_COD1_8CHAN_HASH || in df4_get_intlv_mode()
53 ctx->map.intlv_mode == DF3_6CHAN) in df4_get_intlv_mode()
61 ctx->map.intlv_mode = FIELD_GET(DF4p5_INTLV_NUM_CHAN, ctx->map.intlv); in df4p5_get_intlv_mode()
63 if (ctx->map.intlv_mode <= NOHASH_32CHAN) in df4p5_get_intlv_mode()
66 if (ctx->map.intlv_mode >= MI3_HASH_8CHAN && in df4p5_get_intlv_mode()
67 ctx->map.intlv_mode <= MI3_HASH_32CHAN) in df4p5_get_intlv_mode()
75 ctx->map.intlv_mode += 0x20; in df4p5_get_intlv_mode()
148 /* Should not be called for map 0. */ in get_dram_offset()
149 if (!ctx->map.num) { in get_dram_offset()
150 atl_debug(ctx, "Trying to find DRAM offset for map 0"); in get_dram_offset()
155 * DramOffset registers don't exist for map 0, so the base register in get_dram_offset()
156 * actually refers to map 1. in get_dram_offset()
159 map_num = ctx->map.num - 1; in get_dram_offset()
184 u16 dst_fabric_id = FIELD_GET(DF3_DST_FABRIC_ID, ctx->map.limit); in df3_6ch_get_dram_addr_map()
199 ctx->map.remap_array[i] = (reg >> (j * shift)) & mask; in df3_6ch_get_dram_addr_map()
208 ctx->map.np2_bits = FIELD_GET(DF_LOG2_ADDR_64K_SPACE0, reg); in df3_6ch_get_dram_addr_map()
215 if (df_indirect_read_instance(ctx->node_id, 0, 0x110 + (8 * ctx->map.num), in df2_get_dram_addr_map()
216 ctx->inst_id, &ctx->map.base)) in df2_get_dram_addr_map()
220 if (df_indirect_read_instance(ctx->node_id, 0, 0x114 + (8 * ctx->map.num), in df2_get_dram_addr_map()
221 ctx->inst_id, &ctx->map.limit)) in df2_get_dram_addr_map()
234 ctx->inst_id, &ctx->map.ctl)) in df3_get_dram_addr_map()
246 if (df_indirect_read_instance(ctx->node_id, 7, 0xE00 + (16 * ctx->map.num), in df4_get_dram_addr_map()
247 ctx->inst_id, &ctx->map.base)) in df4_get_dram_addr_map()
251 if (df_indirect_read_instance(ctx->node_id, 7, 0xE04 + (16 * ctx->map.num), in df4_get_dram_addr_map()
252 ctx->inst_id, &ctx->map.limit)) in df4_get_dram_addr_map()
256 if (df_indirect_read_instance(ctx->node_id, 7, 0xE08 + (16 * ctx->map.num), in df4_get_dram_addr_map()
257 ctx->inst_id, &ctx->map.ctl)) in df4_get_dram_addr_map()
261 if (df_indirect_read_instance(ctx->node_id, 7, 0xE0C + (16 * ctx->map.num), in df4_get_dram_addr_map()
262 ctx->inst_id, &ctx->map.intlv)) in df4_get_dram_addr_map()
266 if (!FIELD_GET(DF4_REMAP_EN, ctx->map.ctl)) in df4_get_dram_addr_map()
270 memset(&ctx->map.remap_array, 0xFF, sizeof(ctx->map.remap_array)); in df4_get_dram_addr_map()
273 remap_sel = FIELD_GET(DF4_REMAP_SEL, ctx->map.ctl); in df4_get_dram_addr_map()
282 ctx->map.remap_array[i] = (remap_reg >> (j * shift)) & mask; in df4_get_dram_addr_map()
291 ctx->map.remap_array[i] = (remap_reg >> (j * shift)) & mask; in df4_get_dram_addr_map()
302 if (df_indirect_read_instance(ctx->node_id, 7, 0x200 + (16 * ctx->map.num), in df4p5_get_dram_addr_map()
303 ctx->inst_id, &ctx->map.base)) in df4p5_get_dram_addr_map()
307 if (df_indirect_read_instance(ctx->node_id, 7, 0x204 + (16 * ctx->map.num), in df4p5_get_dram_addr_map()
308 ctx->inst_id, &ctx->map.limit)) in df4p5_get_dram_addr_map()
312 if (df_indirect_read_instance(ctx->node_id, 7, 0x208 + (16 * ctx->map.num), in df4p5_get_dram_addr_map()
313 ctx->inst_id, &ctx->map.ctl)) in df4p5_get_dram_addr_map()
317 if (df_indirect_read_instance(ctx->node_id, 7, 0x20C + (16 * ctx->map.num), in df4p5_get_dram_addr_map()
318 ctx->inst_id, &ctx->map.intlv)) in df4p5_get_dram_addr_map()
322 if (!FIELD_GET(DF4_REMAP_EN, ctx->map.ctl)) in df4p5_get_dram_addr_map()
326 memset(&ctx->map.remap_array, 0xFF, sizeof(ctx->map.remap_array)); in df4p5_get_dram_addr_map()
329 remap_sel = FIELD_GET(DF4p5_REMAP_SEL, ctx->map.ctl); in df4p5_get_dram_addr_map()
338 ctx->map.remap_array[i] = (remap_reg >> (j * shift)) & mask; in df4p5_get_dram_addr_map()
347 ctx->map.remap_array[i] = (remap_reg >> (j * shift)) & mask; in df4p5_get_dram_addr_map()
356 ctx->map.remap_array[i] = (remap_reg >> (j * shift)) & mask; in df4p5_get_dram_addr_map()
403 for (ctx->map.num = 1; ctx->map.num < df_cfg.num_coh_st_maps; ctx->map.num++) { in find_normalized_offset()
408 /* Continue search if this map's offset is not enabled. */ in find_normalized_offset()
414 atl_debug(ctx, "Enabled map %u offset is 0", ctx->map.num); in find_normalized_offset()
418 /* Offsets should always increase from one map to the next. */ in find_normalized_offset()
420 atl_debug(ctx, "Map %u offset (0x%016llx) <= previous (0x%016llx)", in find_normalized_offset()
421 ctx->map.num, *norm_offset, last_offset); in find_normalized_offset()
425 /* Match if this map's offset is less than the current calculated address. */ in find_normalized_offset()
434 * Reset to map 0 and no offset. in find_normalized_offset()
436 if (ctx->map.num >= df_cfg.num_coh_st_maps) { in find_normalized_offset()
437 ctx->map.num = 0; in find_normalized_offset()
447 return FIELD_GET(DF_ADDR_RANGE_VAL, ctx->map.ctl); in valid_map()
449 return FIELD_GET(DF_ADDR_RANGE_VAL, ctx->map.base); in valid_map()
475 switch (ctx->map.intlv_mode) { in get_num_intlv_chan()
538 ctx->map.num_intlv_chan = get_num_intlv_chan(ctx); in calculate_intlv_bits()
540 ctx->map.total_intlv_chan = ctx->map.num_intlv_chan; in calculate_intlv_bits()
541 ctx->map.total_intlv_chan *= ctx->map.num_intlv_dies; in calculate_intlv_bits()
542 ctx->map.total_intlv_chan *= ctx->map.num_intlv_sockets; in calculate_intlv_bits()
548 ctx->map.total_intlv_bits = order_base_2(ctx->map.total_intlv_chan); in calculate_intlv_bits()
557 addr_sel = FIELD_GET(DF2_INTLV_ADDR_SEL, ctx->map.base); in get_intlv_bit_pos()
561 addr_sel = FIELD_GET(DF3_INTLV_ADDR_SEL, ctx->map.base); in get_intlv_bit_pos()
565 addr_sel = FIELD_GET(DF4_INTLV_ADDR_SEL, ctx->map.intlv); in get_intlv_bit_pos()
582 dies = FIELD_GET(DF2_INTLV_NUM_DIES, ctx->map.limit); in get_num_intlv_dies()
585 dies = FIELD_GET(DF3_INTLV_NUM_DIES, ctx->map.base); in get_num_intlv_dies()
588 dies = FIELD_GET(DF3p5_INTLV_NUM_DIES, ctx->map.base); in get_num_intlv_dies()
592 dies = FIELD_GET(DF4_INTLV_NUM_DIES, ctx->map.intlv); in get_num_intlv_dies()
609 sockets = FIELD_GET(DF2_INTLV_NUM_SOCKETS, ctx->map.limit); in get_num_intlv_sockets()
613 sockets = FIELD_GET(DF2_INTLV_NUM_SOCKETS, ctx->map.base); in get_num_intlv_sockets()
617 sockets = FIELD_GET(DF4_INTLV_NUM_SOCKETS, ctx->map.intlv); in get_num_intlv_sockets()
633 if (ctx->map.intlv_mode == DF3_6CHAN && in get_global_map_data()
637 ctx->map.intlv_bit_pos = get_intlv_bit_pos(ctx); in get_global_map_data()
638 ctx->map.num_intlv_dies = get_num_intlv_dies(ctx); in get_global_map_data()
639 ctx->map.num_intlv_sockets = get_num_intlv_sockets(ctx); in get_global_map_data()
655 if (!(ctx->map.intlv_bit_pos == bit1 || ctx->map.intlv_bit_pos == bit2)) { in map_bits_valid()
656 pr_debug("Invalid interleave bit: %u", ctx->map.intlv_bit_pos); in map_bits_valid()
660 if (ctx->map.num_intlv_dies > num_intlv_dies) { in map_bits_valid()
661 pr_debug("Invalid number of interleave dies: %u", ctx->map.num_intlv_dies); in map_bits_valid()
665 if (ctx->map.num_intlv_sockets > num_intlv_sockets) { in map_bits_valid()
666 pr_debug("Invalid number of interleave sockets: %u", ctx->map.num_intlv_sockets); in map_bits_valid()
675 switch (ctx->map.intlv_mode) { in validate_address_map()
709 if (ctx->map.num_intlv_sockets != 1 || !map_bits_valid(ctx, 8, 0, 1, 1)) in validate_address_map()
715 if (ctx->map.num_intlv_sockets < 2 || !map_bits_valid(ctx, 8, 0, 1, 2)) in validate_address_map()
734 atl_debug(ctx, "Inconsistent address map"); in validate_address_map()
738 static void dump_address_map(struct dram_addr_map *map) in dump_address_map() argument
742 pr_debug("intlv_mode=0x%x", map->intlv_mode); in dump_address_map()
743 pr_debug("num=0x%x", map->num); in dump_address_map()
744 pr_debug("base=0x%x", map->base); in dump_address_map()
745 pr_debug("limit=0x%x", map->limit); in dump_address_map()
746 pr_debug("ctl=0x%x", map->ctl); in dump_address_map()
747 pr_debug("intlv=0x%x", map->intlv); in dump_address_map()
750 pr_debug("remap_array[%u]=0x%x", i, map->remap_array[i]); in dump_address_map()
752 pr_debug("intlv_bit_pos=%u", map->intlv_bit_pos); in dump_address_map()
753 pr_debug("num_intlv_chan=%u", map->num_intlv_chan); in dump_address_map()
754 pr_debug("num_intlv_dies=%u", map->num_intlv_dies); in dump_address_map()
755 pr_debug("num_intlv_sockets=%u", map->num_intlv_sockets); in dump_address_map()
756 pr_debug("total_intlv_chan=%u", map->total_intlv_chan); in dump_address_map()
757 pr_debug("total_intlv_bits=%u", map->total_intlv_bits); in dump_address_map()
772 dump_address_map(&ctx->map); in get_address_map()