Lines Matching refs:guc

78 static int host2guc_action(struct intel_guc *guc, u32 *data, u32 len)  in host2guc_action()  argument
80 struct drm_i915_private *dev_priv = guc_to_i915(guc); in host2guc_action()
89 spin_lock(&dev_priv->guc.host2guc_lock); in host2guc_action()
91 dev_priv->guc.action_count += 1; in host2guc_action()
92 dev_priv->guc.action_cmd = data[0]; in host2guc_action()
117 dev_priv->guc.action_fail += 1; in host2guc_action()
118 dev_priv->guc.action_err = ret; in host2guc_action()
120 dev_priv->guc.action_status = status; in host2guc_action()
122 spin_unlock(&dev_priv->guc.host2guc_lock); in host2guc_action()
132 static int host2guc_allocate_doorbell(struct intel_guc *guc, in host2guc_allocate_doorbell() argument
140 return host2guc_action(guc, data, 2); in host2guc_allocate_doorbell()
143 static int host2guc_release_doorbell(struct intel_guc *guc, in host2guc_release_doorbell() argument
151 return host2guc_action(guc, data, 2); in host2guc_release_doorbell()
154 static int host2guc_sample_forcewake(struct intel_guc *guc, in host2guc_sample_forcewake() argument
157 struct drm_i915_private *dev_priv = guc_to_i915(guc); in host2guc_sample_forcewake()
172 return host2guc_action(guc, data, ARRAY_SIZE(data)); in host2guc_sample_forcewake()
182 static void guc_init_doorbell(struct intel_guc *guc, in guc_init_doorbell() argument
255 static void guc_disable_doorbell(struct intel_guc *guc, in guc_disable_doorbell() argument
258 struct drm_i915_private *dev_priv = guc_to_i915(guc); in guc_disable_doorbell()
290 static uint32_t select_doorbell_cacheline(struct intel_guc *guc) in select_doorbell_cacheline() argument
295 spin_lock(&guc->host2guc_lock); in select_doorbell_cacheline()
298 offset = offset_in_page(guc->db_cacheline); in select_doorbell_cacheline()
301 guc->db_cacheline += cacheline_size; in select_doorbell_cacheline()
303 spin_unlock(&guc->host2guc_lock); in select_doorbell_cacheline()
306 offset, guc->db_cacheline, cacheline_size); in select_doorbell_cacheline()
311 static uint16_t assign_doorbell(struct intel_guc *guc, uint32_t priority) in assign_doorbell() argument
325 spin_lock(&guc->host2guc_lock); in assign_doorbell()
326 id = find_next_zero_bit(guc->doorbell_bitmap, end, start); in assign_doorbell()
330 bitmap_set(guc->doorbell_bitmap, id, 1); in assign_doorbell()
331 spin_unlock(&guc->host2guc_lock); in assign_doorbell()
339 static void release_doorbell(struct intel_guc *guc, uint16_t id) in release_doorbell() argument
341 spin_lock(&guc->host2guc_lock); in release_doorbell()
342 bitmap_clear(guc->doorbell_bitmap, id, 1); in release_doorbell()
343 spin_unlock(&guc->host2guc_lock); in release_doorbell()
349 static void guc_init_proc_desc(struct intel_guc *guc, in guc_init_proc_desc() argument
385 static void guc_init_ctx_desc(struct intel_guc *guc, in guc_init_ctx_desc() argument
466 sg = guc->ctx_pool_obj->pages; in guc_init_ctx_desc()
471 static void guc_fini_ctx_desc(struct intel_guc *guc, in guc_fini_ctx_desc() argument
479 sg = guc->ctx_pool_obj->pages; in guc_fini_ctx_desc()
599 struct intel_guc *guc = client->guc; in i915_guc_submit() local
626 spin_lock(&guc->host2guc_lock); in i915_guc_submit()
627 guc->submissions[ring_id] += 1; in i915_guc_submit()
628 guc->last_seqno[ring_id] = rq->seqno; in i915_guc_submit()
629 spin_unlock(&guc->host2guc_lock); in i915_guc_submit()
697 struct intel_guc *guc = &dev_priv->guc; in guc_client_free() local
707 guc_disable_doorbell(guc, client); in guc_client_free()
708 host2guc_release_doorbell(guc, client); in guc_client_free()
709 release_doorbell(guc, client->doorbell_id); in guc_client_free()
720 guc_fini_ctx_desc(guc, client); in guc_client_free()
721 ida_simple_remove(&guc->ctx_ids, client->ctx_index); in guc_client_free()
744 struct intel_guc *guc = &dev_priv->guc; in guc_client_alloc() local
754 client->guc = guc; in guc_client_alloc()
756 client->ctx_index = (uint32_t)ida_simple_get(&guc->ctx_ids, 0, in guc_client_alloc()
773 client->doorbell_offset = select_doorbell_cacheline(guc); in guc_client_alloc()
785 client->doorbell_id = assign_doorbell(guc, client->priority); in guc_client_alloc()
790 guc_init_proc_desc(guc, client); in guc_client_alloc()
791 guc_init_ctx_desc(guc, client); in guc_client_alloc()
792 guc_init_doorbell(guc, client); in guc_client_alloc()
796 if (host2guc_allocate_doorbell(guc, client)) in guc_client_alloc()
811 static void guc_create_log(struct intel_guc *guc) in guc_create_log() argument
813 struct drm_i915_private *dev_priv = guc_to_i915(guc); in guc_create_log()
830 obj = guc->log_obj; in guc_create_log()
839 guc->log_obj = obj; in guc_create_log()
849 guc->log_flags = (offset << GUC_LOG_BUF_ADDR_SHIFT) | flags; in guc_create_log()
862 struct intel_guc *guc = &dev_priv->guc; in i915_guc_submission_init() local
867 if (guc->ctx_pool_obj) in i915_guc_submission_init()
870 guc->ctx_pool_obj = gem_allocate_guc_obj(dev_priv->dev, gemsize); in i915_guc_submission_init()
871 if (!guc->ctx_pool_obj) in i915_guc_submission_init()
874 spin_lock_init(&dev_priv->guc.host2guc_lock); in i915_guc_submission_init()
876 ida_init(&guc->ctx_ids); in i915_guc_submission_init()
878 guc_create_log(guc); in i915_guc_submission_init()
886 struct intel_guc *guc = &dev_priv->guc; in i915_guc_submission_enable() local
897 guc->execbuf_client = client; in i915_guc_submission_enable()
899 host2guc_sample_forcewake(guc, client); in i915_guc_submission_enable()
907 struct intel_guc *guc = &dev_priv->guc; in i915_guc_submission_disable() local
909 guc_client_free(dev, guc->execbuf_client); in i915_guc_submission_disable()
910 guc->execbuf_client = NULL; in i915_guc_submission_disable()
916 struct intel_guc *guc = &dev_priv->guc; in i915_guc_submission_fini() local
918 gem_release_guc_obj(dev_priv->guc.log_obj); in i915_guc_submission_fini()
919 guc->log_obj = NULL; in i915_guc_submission_fini()
921 if (guc->ctx_pool_obj) in i915_guc_submission_fini()
922 ida_destroy(&guc->ctx_ids); in i915_guc_submission_fini()
923 gem_release_guc_obj(guc->ctx_pool_obj); in i915_guc_submission_fini()
924 guc->ctx_pool_obj = NULL; in i915_guc_submission_fini()
934 struct intel_guc *guc = &dev_priv->guc; in intel_guc_suspend() local
949 return host2guc_action(guc, data, ARRAY_SIZE(data)); in intel_guc_suspend()
960 struct intel_guc *guc = &dev_priv->guc; in intel_guc_resume() local
974 return host2guc_action(guc, data, ARRAY_SIZE(data)); in intel_guc_resume()