Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/xe: Add member initialized_domains to xe_force_wake()

This field serves as a bitmask representing all initialized forcewake
domains on the GT.

v2
- Move awake_domains datatype change out of this patch (Michal)
- Rename domain_init to init_domain (Michal)
- optimize alignment (Michal)

Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Badal Nilawar <badal.nilawar@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Reviewed-by: Badal Nilawar <badal.nilawar@intel.com>
Reviewed-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241014075601.2324382-2-himal.prasad.ghimiray@intel.com
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

authored by

Himal Prasad Ghimiray and committed by
Rodrigo Vivi
f5fc004b 649f533b

+19 -13
+17 -13
drivers/gpu/drm/xe/xe_force_wake.c
··· 21 21 return wake ? "wake" : "sleep"; 22 22 } 23 23 24 - static void domain_init(struct xe_force_wake_domain *domain, 24 + static void mark_domain_initialized(struct xe_force_wake *fw, 25 + enum xe_force_wake_domain_id id) 26 + { 27 + fw->initialized_domains |= BIT(id); 28 + } 29 + 30 + static void init_domain(struct xe_force_wake *fw, 25 31 enum xe_force_wake_domain_id id, 26 32 struct xe_reg reg, struct xe_reg ack) 27 33 { 34 + struct xe_force_wake_domain *domain = &fw->domains[id]; 35 + 28 36 domain->id = id; 29 37 domain->reg_ctl = reg; 30 38 domain->reg_ack = ack; 31 39 domain->val = FORCEWAKE_MT(FORCEWAKE_KERNEL); 32 40 domain->mask = FORCEWAKE_MT_MASK(FORCEWAKE_KERNEL); 41 + 42 + mark_domain_initialized(fw, id); 33 43 } 34 44 35 45 void xe_force_wake_init_gt(struct xe_gt *gt, struct xe_force_wake *fw) ··· 53 43 xe_gt_assert(gt, GRAPHICS_VER(gt_to_xe(gt)) >= 11); 54 44 55 45 if (xe->info.graphics_verx100 >= 1270) { 56 - domain_init(&fw->domains[XE_FW_DOMAIN_ID_GT], 57 - XE_FW_DOMAIN_ID_GT, 46 + init_domain(fw, XE_FW_DOMAIN_ID_GT, 58 47 FORCEWAKE_GT, 59 48 FORCEWAKE_ACK_GT_MTL); 60 49 } else { 61 - domain_init(&fw->domains[XE_FW_DOMAIN_ID_GT], 62 - XE_FW_DOMAIN_ID_GT, 50 + init_domain(fw, XE_FW_DOMAIN_ID_GT, 63 51 FORCEWAKE_GT, 64 52 FORCEWAKE_ACK_GT); 65 53 } ··· 71 63 xe_gt_assert(gt, GRAPHICS_VER(gt_to_xe(gt)) >= 11); 72 64 73 65 if (!xe_gt_is_media_type(gt)) 74 - domain_init(&fw->domains[XE_FW_DOMAIN_ID_RENDER], 75 - XE_FW_DOMAIN_ID_RENDER, 66 + init_domain(fw, XE_FW_DOMAIN_ID_RENDER, 76 67 FORCEWAKE_RENDER, 77 68 FORCEWAKE_ACK_RENDER); 78 69 ··· 79 72 if (!(gt->info.engine_mask & BIT(i))) 80 73 continue; 81 74 82 - domain_init(&fw->domains[XE_FW_DOMAIN_ID_MEDIA_VDBOX0 + j], 83 - XE_FW_DOMAIN_ID_MEDIA_VDBOX0 + j, 75 + init_domain(fw, XE_FW_DOMAIN_ID_MEDIA_VDBOX0 + j, 84 76 FORCEWAKE_MEDIA_VDBOX(j), 85 77 FORCEWAKE_ACK_MEDIA_VDBOX(j)); 86 78 } ··· 88 82 if (!(gt->info.engine_mask & BIT(i))) 89 83 continue; 90 84 91 - domain_init(&fw->domains[XE_FW_DOMAIN_ID_MEDIA_VEBOX0 + j], 92 - XE_FW_DOMAIN_ID_MEDIA_VEBOX0 + j, 85 + init_domain(fw, XE_FW_DOMAIN_ID_MEDIA_VEBOX0 + j, 93 86 FORCEWAKE_MEDIA_VEBOX(j), 94 87 FORCEWAKE_ACK_MEDIA_VEBOX(j)); 95 88 } 96 89 97 90 if (gt->info.engine_mask & BIT(XE_HW_ENGINE_GSCCS0)) 98 - domain_init(&fw->domains[XE_FW_DOMAIN_ID_GSC], 99 - XE_FW_DOMAIN_ID_GSC, 91 + init_domain(fw, XE_FW_DOMAIN_ID_GSC, 100 92 FORCEWAKE_GSC, 101 93 FORCEWAKE_ACK_GSC); 102 94 }
+2
drivers/gpu/drm/xe/xe_force_wake_types.h
··· 79 79 spinlock_t lock; 80 80 /** @awake_domains: mask of all domains awake */ 81 81 enum xe_force_wake_domains awake_domains; 82 + /** @initialized_domains: mask of all initialized domains */ 83 + unsigned int initialized_domains; 82 84 /** @domains: force wake domains */ 83 85 struct xe_force_wake_domain domains[XE_FW_DOMAIN_ID_COUNT]; 84 86 };