Lines Matching +full:half +full:- +full:dbm
1 // SPDX-License-Identifier: MIT
58 addr = __xe_bo_ggtt_addr(bo, gt_to_tile(guc_to_gt(guc))->id); in guc_bo_ggtt_addr()
63 xe_assert(xe, xe_bo_size(bo) <= GUC_GGTT_TOP - addr); in guc_bo_ggtt_addr()
70 u32 level = xe_guc_log_get_level(&guc->log); in guc_ctl_debug_flags()
86 if (!guc_to_xe(guc)->info.skip_guc_pc) in guc_ctl_feature_flags()
94 u32 offset = guc_bo_ggtt_addr(guc, guc->log.bo) >> PAGE_SHIFT; in guc_ctl_log_params_flags()
120 BUILD_BUG_ON((CRASH_BUFFER_SIZE / LOG_UNIT - 1) > in guc_ctl_log_params_flags()
122 BUILD_BUG_ON((DEBUG_BUFFER_SIZE / LOG_UNIT - 1) > in guc_ctl_log_params_flags()
124 BUILD_BUG_ON((CAPTURE_BUFFER_SIZE / CAPTURE_UNIT - 1) > in guc_ctl_log_params_flags()
131 ((CRASH_BUFFER_SIZE / LOG_UNIT - 1) << GUC_LOG_CRASH_SHIFT) | in guc_ctl_log_params_flags()
132 ((DEBUG_BUFFER_SIZE / LOG_UNIT - 1) << GUC_LOG_DEBUG_SHIFT) | in guc_ctl_log_params_flags()
133 ((CAPTURE_BUFFER_SIZE / CAPTURE_UNIT - 1) << in guc_ctl_log_params_flags()
147 u32 ads = guc_bo_ggtt_addr(guc, guc->ads.bo) >> PAGE_SHIFT; in guc_ctl_ads_flags()
169 * can cause complications if the non-stalled submission runs for a long in needs_wa_dual_queue()
197 * Wa_22011802037: FIXME - there's more to be done than simply setting in guc_ctl_wa_flags()
224 return (((u32)xe->info.devid) << 16) | xe->info.revid; in guc_ctl_devid()
230 u32 *params = guc->params; in guc_print_params()
233 BUILD_BUG_ON(sizeof(guc->params) != GUC_CTL_MAX_DWORDS * sizeof(u32)); in guc_print_params()
242 u32 *params = guc->params; in guc_init_params()
256 u32 *params = guc->params; in guc_init_params_post_hwconfig()
280 xe_mmio_write32(>->mmio, SOFT_SCRATCH(0), 0); in guc_write_params()
283 xe_mmio_write32(>->mmio, SOFT_SCRATCH(1 + i), guc->params[i]); in guc_write_params()
293 FIELD_PREP(XE_G2G_REGISTER_SIZE, size / SZ_4K - 1) | in guc_action_register_g2g_buffer()
304 return xe_guc_ct_send_block(&guc->ct, action, ARRAY_SIZE(action)); in guc_action_register_g2g_buffer()
320 return xe_guc_ct_send_block(&guc->ct, action, ARRAY_SIZE(action)); in guc_action_deregister_g2g_buffer()
323 #define G2G_DEV(gt) (((gt)->info.type == XE_GT_TYPE_MAIN) ? 0 : 1)
330 * Generate a unique id for each bi-directional CTB for each pair of
332 * a single allocation that is sub-divided into multiple CTBs.
338 * N 0.0 --/-- 00/01 02/03 04/05
339 * e 0.1 01/00 --/-- 06/07 08/09
340 * a 1.0 03/02 07/06 --/-- 10/11
341 * r 1.1 05/04 09/08 11/10 --/--
363 return -1; in g2g_slot()
366 /* Top right table half */ in g2g_slot()
373 /* Bottom left table half */ in g2g_slot()
378 direction = (1 - type); in g2g_slot()
382 for (i = y; i > 0; i--) in g2g_slot()
383 idx += max_inst - i; in g2g_slot()
386 idx += (x - 1 - y); in g2g_slot()
402 u32 near_tile = gt_to_tile(near_gt)->id; in guc_g2g_register()
404 u32 far_tile = gt_to_tile(far_gt)->id; in guc_g2g_register()
406 u32 max = xe->info.gt_count; in guc_g2g_register()
413 g2g_bo = near_guc->g2g.bo; in guc_g2g_register()
423 xe_assert(xe, (desc - base + G2G_DESC_SIZE) <= G2G_DESC_AREA_SIZE); in guc_g2g_register()
424 xe_assert(xe, (buf - base + G2G_BUFFER_SIZE) <= xe_bo_size(g2g_bo)); in guc_g2g_register()
439 unsigned int count = xe->info.gt_count; in guc_g2g_size()
440 u32 num_channels = (count * (count - 1)) / 2; in guc_g2g_size()
450 if (xe->info.gt_count <= 1) in xe_guc_g2g_wanted()
465 if (guc->g2g.bo) in guc_g2g_alloc()
468 if (gt->info.id != 0) { in guc_g2g_alloc()
470 struct xe_guc *root_guc = &root_gt->uc.guc; in guc_g2g_alloc()
473 bo = xe_bo_get(root_guc->g2g.bo); in guc_g2g_alloc()
475 return -ENODEV; in guc_g2g_alloc()
477 guc->g2g.bo = bo; in guc_g2g_alloc()
478 guc->g2g.owned = false; in guc_g2g_alloc()
492 xe_map_memset(xe, &bo->vmap, 0, 0, g2g_size); in guc_g2g_alloc()
493 guc->g2g.bo = bo; in guc_g2g_alloc()
494 guc->g2g.owned = true; in guc_g2g_alloc()
501 if (!guc->g2g.bo) in guc_g2g_fini()
505 if (!guc->g2g.owned) in guc_g2g_fini()
506 xe_bo_put(guc->g2g.bo); in guc_g2g_fini()
508 guc->g2g.bo = NULL; in guc_g2g_fini()
519 if (!guc->g2g.bo) { in guc_g2g_start()
528 xe_gt_assert(gt, (gt->info.type == XE_GT_TYPE_MAIN) || (gt->info.type == XE_GT_TYPE_MEDIA)); in guc_g2g_start()
531 have_dev = xe->info.gt_count > xe->info.tile_count; in guc_g2g_start()
536 if (far_gt->info.id == gt->info.id) in guc_g2g_start()
539 far_tile = gt_to_tile(far_gt)->id; in guc_g2g_start()
545 while (--t >= 0) in guc_g2g_start()
558 if (far_gt->info.id == gt->info.id) in guc_g2g_start()
564 tile = gt_to_tile(far_gt)->id; in guc_g2g_start()
583 return xe_guc_ct_send_block(&guc->ct, action, ARRAY_SIZE(action)); in __guc_opt_in_features_enable()
592 if (xe->info.platform != XE_PVC && GRAPHICS_VER(xe) < 20) in supports_dynamic_ics()
596 * The feature is currently not compatible with multi-lrc, so the GuC in supports_dynamic_ics()
602 if (xe_gt_is_media_type(gt) || gt->ccs_mode > 1) in supports_dynamic_ics()
616 CLASS(xe_guc_buf, buf)(&guc->buf, OPT_IN_MAX_DWORDS); in xe_guc_opt_in_features_enable()
622 return -ENOBUFS; in xe_guc_opt_in_features_enable()
627 * The extra CAT error type opt-in was added in GuC v70.17.0, which maps in xe_guc_opt_in_features_enable()
645 "failed to enable GuC opt-in features: %pe\n", in xe_guc_opt_in_features_enable()
661 xe_uc_sanitize_reset(&guc_to_gt(guc)->uc); in guc_fini_hw()
668 * xe_guc_comm_init_early - early initialization of GuC communication
678 guc->notify_reg = MED_GUC_HOST_INTERRUPT; in xe_guc_comm_init_early()
680 guc->notify_reg = GUC_HOST_INTERRUPT; in xe_guc_comm_init_early()
692 ret = xe_managed_bo_reinit_in_vram(xe, tile, &guc->fw.bo); in xe_guc_realloc_post_hwconfig()
696 ret = xe_managed_bo_reinit_in_vram(xe, tile, &guc->log.bo); in xe_guc_realloc_post_hwconfig()
700 ret = xe_managed_bo_reinit_in_vram(xe, tile, &guc->ads.bo); in xe_guc_realloc_post_hwconfig()
704 ret = xe_managed_bo_reinit_in_vram(xe, tile, &guc->ct.bo); in xe_guc_realloc_post_hwconfig()
735 ret = xe_guc_ct_init_noalloc(&guc->ct); in xe_guc_init_noalloc()
739 ret = xe_guc_relay_init(&guc->relay); in xe_guc_init_noalloc()
762 guc->fw.type = XE_UC_FW_TYPE_GUC; in xe_guc_init()
763 ret = xe_uc_fw_init(&guc->fw); in xe_guc_init()
767 if (!xe_uc_fw_is_enabled(&guc->fw)) in xe_guc_init()
771 ret = xe_guc_ct_init(&guc->ct); in xe_guc_init()
777 ret = xe_guc_log_init(&guc->log); in xe_guc_init()
785 ret = xe_guc_ads_init(&guc->ads); in xe_guc_init()
789 ret = xe_guc_ct_init(&guc->ct); in xe_guc_init()
793 xe_uc_fw_change_status(&guc->fw, XE_UC_FIRMWARE_LOADABLE); in xe_guc_init()
795 ret = devm_add_action_or_reset(xe->drm.dev, guc_fini_hw, guc); in xe_guc_init()
816 err = xe_guc_buf_cache_init(&guc->buf); in vf_guc_init_post_hwconfig()
826 * xe_guc_init_post_hwconfig - initialize GuC post hwconfig load
848 ret = xe_guc_db_mgr_init(&guc->dbm, ~0); in xe_guc_init_post_hwconfig()
852 ret = xe_guc_pc_init(&guc->pc); in xe_guc_init_post_hwconfig()
860 ret = xe_guc_buf_cache_init(&guc->buf); in xe_guc_init_post_hwconfig()
864 return xe_guc_ads_init_post_hwconfig(&guc->ads); in xe_guc_init_post_hwconfig()
871 xe_guc_ads_populate_post_load(&guc->ads); in xe_guc_post_load_init()
883 guc->submission_state.enabled = true; in xe_guc_post_load_init()
891 struct xe_mmio *mmio = >->mmio; in xe_guc_reset()
912 ret = -EIO; in xe_guc_reset()
926 struct xe_mmio *mmio = >->mmio; in guc_prepare_xfer()
937 if (GRAPHICS_VER(xe) >= 20 || xe->info.platform == XE_PVC) in guc_prepare_xfer()
938 shim_flags |= REG_FIELD_PREP(GUC_MOCS_INDEX_MASK, gt->mocs.uc_index); in guc_prepare_xfer()
959 if (guc->fw.rsa_size > 256) { in guc_xfer_rsa()
960 u32 rsa_ggtt_addr = xe_bo_ggtt_addr(guc->fw.bo) + in guc_xfer_rsa()
961 xe_uc_fw_rsa_offset(&guc->fw); in guc_xfer_rsa()
962 xe_mmio_write32(>->mmio, UOS_RSA_SCRATCH(0), rsa_ggtt_addr); in guc_xfer_rsa()
966 copied = xe_uc_fw_copy_rsa(&guc->fw, rsa, sizeof(rsa)); in guc_xfer_rsa()
968 return -ENOMEM; in guc_xfer_rsa()
971 xe_mmio_write32(>->mmio, UOS_RSA_SCRATCH(i), rsa[i]); in guc_xfer_rsa()
980 * successful completion, -1 for failure and 0 for any intermediate state.
1000 return -1; in guc_load_done()
1014 return -1; in guc_load_done()
1061 struct xe_mmio *mmio = >->mmio; in guc_wait_ucode()
1062 struct xe_guc_pc *guc_pc = >->uc.guc.pc; in guc_wait_ucode()
1172 xe_guc_pc_raise_unslice(&guc->pc); in __xe_guc_upload()
1181 * register (if key size <= 256) or through a ggtt-pinned vma (if key in __xe_guc_upload()
1183 * HW is fixed for each platform and hard-coded in the bootrom. in __xe_guc_upload()
1192 ret = xe_uc_fw_upload(&guc->fw, 0x2000, UOS_MOVE); in __xe_guc_upload()
1199 xe_uc_fw_change_status(&guc->fw, XE_UC_FIRMWARE_RUNNING); in __xe_guc_upload()
1203 xe_uc_fw_change_status(&guc->fw, XE_UC_FIRMWARE_LOAD_FAIL); in __xe_guc_upload()
1236 * xe_guc_min_load_for_hwconfig - load minimal GuC and read hwconfig table
1253 xe_guc_ads_populate_minimal(&guc->ads); in xe_guc_min_load_for_hwconfig()
1255 xe_guc_pc_init_early(&guc->pc); in xe_guc_min_load_for_hwconfig()
1274 xe_guc_ads_populate(&guc->ads); in xe_guc_upload()
1289 msg = xe_mmio_read32(>->mmio, SOFT_SCRATCH(15)); in guc_handle_mmio_msg()
1292 xe_mmio_write32(>->mmio, SOFT_SCRATCH(15), 0); in guc_handle_mmio_msg()
1309 xe_mmio_write32(>->mmio, GUC_SG_INTR_ENABLE, in guc_enable_irq()
1316 xe_mmio_rmw32(>->mmio, GUC_SG_INTR_MASK, events, 0); in guc_enable_irq()
1328 err = xe_memirq_init_guc(&tile->memirq, guc); in xe_guc_enable_communication()
1335 err = xe_guc_ct_enable(&guc->ct); in xe_guc_enable_communication()
1372 xe_mmio_write32(>->mmio, guc->notify_reg, default_notify_data); in xe_guc_notify()
1382 return xe_guc_ct_send_block(&guc->ct, action, ARRAY_SIZE(action)); in xe_guc_auth_huc()
1390 struct xe_mmio *mmio = >->mmio; in xe_guc_mmio_send_recv()
1394 const u32 LAST_INDEX = VF_SW_FLAG_COUNT - 1; in xe_guc_mmio_send_recv()
1410 /* Not in critical data-path, just do if else for GT type */ in xe_guc_mmio_send_recv()
1487 return -ENXIO; in xe_guc_mmio_send_recv()
1495 return -EPROTO; in xe_guc_mmio_send_recv()
1544 return -EPROTO; in guc_self_cfg()
1546 return -ENOKEY; in guc_self_cfg()
1572 xe_guc_ct_irq_handler(&guc->ct); in xe_guc_irq_handler()
1580 xe_uc_fw_sanitize(&guc->fw); in xe_guc_sanitize()
1581 xe_guc_ct_disable(&guc->ct); in xe_guc_sanitize()
1582 guc->submission_state.enabled = false; in xe_guc_sanitize()
1600 err = xe_guc_pc_stop(&guc->pc); in xe_guc_stop_prepare()
1608 xe_guc_ct_stop(&guc->ct); in xe_guc_stop()
1625 xe_uc_fw_print(&guc->fw, p); in xe_guc_print_info()
1632 status = xe_mmio_read32(>->mmio, GUC_STATUS); in xe_guc_print_info()
1642 xe_guc_log_get_level(&guc->log)); in xe_guc_print_info()
1647 i, xe_mmio_read32(>->mmio, SOFT_SCRATCH(i))); in xe_guc_print_info()
1654 xe_guc_ct_print(&guc->ct, p, false); in xe_guc_print_info()
1661 * xe_guc_declare_wedged() - Declare GuC wedged
1669 xe_gt_assert(guc_to_gt(guc), guc_to_xe(guc)->wedged.mode); in xe_guc_declare_wedged()
1672 xe_guc_ct_stop(&guc->ct); in xe_guc_declare_wedged()