Lines Matching full:fw
24 static void mark_domain_initialized(struct xe_force_wake *fw,
27 fw->initialized_domains |= BIT(id);
30 static void init_domain(struct xe_force_wake *fw,
34 struct xe_force_wake_domain *domain = &fw->domains[id];
42 mark_domain_initialized(fw, id);
45 void xe_force_wake_init_gt(struct xe_gt *gt, struct xe_force_wake *fw)
49 fw->gt = gt;
50 spin_lock_init(&fw->lock);
53 init_domain(fw, XE_FW_DOMAIN_ID_GT,
57 init_domain(fw, XE_FW_DOMAIN_ID_GT,
63 void xe_force_wake_init_engines(struct xe_gt *gt, struct xe_force_wake *fw)
68 init_domain(fw, XE_FW_DOMAIN_ID_RENDER,
76 init_domain(fw, XE_FW_DOMAIN_ID_MEDIA_VDBOX0 + j,
85 init_domain(fw, XE_FW_DOMAIN_ID_MEDIA_VEBOX0 + j,
91 init_domain(fw, XE_FW_DOMAIN_ID_GSC,
159 * @fw: struct xe_force_wake
172 unsigned int __must_check xe_force_wake_get(struct xe_force_wake *fw,
175 struct xe_gt *gt = fw->gt;
183 xe_gt_assert(gt, domains == XE_FORCEWAKE_ALL || fw->initialized_domains & domains);
185 ref_rqst = (domains == XE_FORCEWAKE_ALL) ? fw->initialized_domains : domains;
186 spin_lock_irqsave(&fw->lock, flags);
187 for_each_fw_domain_masked(domain, ref_rqst, fw, tmp) {
194 for_each_fw_domain_masked(domain, awake_rqst, fw, tmp) {
196 fw->awake_domains |= BIT(domain->id);
203 spin_unlock_irqrestore(&fw->lock, flags);
208 if (domains == XE_FORCEWAKE_ALL && ref_incr == fw->initialized_domains)
216 * @fw: Pointer to the force wake structure
224 void xe_force_wake_put(struct xe_force_wake *fw, unsigned int fw_ref)
226 struct xe_gt *gt = fw->gt;
240 fw_ref = fw->initialized_domains;
242 spin_lock_irqsave(&fw->lock, flags);
243 for_each_fw_domain_masked(domain, fw_ref, fw, tmp) {
251 for_each_fw_domain_masked(domain, sleep, fw, tmp) {
253 fw->awake_domains &= ~BIT(domain->id);
257 spin_unlock_irqrestore(&fw->lock, flags);