Skip to content

Commit 4001fc3

Browse files
ifdujunxiaoc
authored andcommitted
drm/xe/xe3: Generate and store the L3 bank mask
On Xe3, the register used to indicate which L3 banks are enabled on the system is a new one called MIRROR_L3BANK_ENABLE. Each bit represents one bank enabled in each node. Extend the existing topology code for Xe3 to read this register and generate the correct L3 bank mask, which can be read by user space throug the topology query. Bspec: 72573, 73439 Signed-off-by: Francois Dugast <francois.dugast@intel.com> Signed-off-by: Matt Atwood <matthew.s.atwood@intel.com> Reviewed-by: Matt Roper <matthew.d.roper@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250114203853.35055-1-matthew.s.atwood@intel.com Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
1 parent 8274f21 commit 4001fc3

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

drivers/gpu/drm/xe/regs/xe_gt_regs.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,9 @@
221221

222222
#define MIRROR_FUSE1 XE_REG(0x911c)
223223

224+
#define MIRROR_L3BANK_ENABLE XE_REG(0x9130)
225+
#define XE3_L3BANK_ENABLE REG_GENMASK(31, 0)
226+
224227
#define XELP_EU_ENABLE XE_REG(0x9134) /* "_DISABLE" on Xe_LP */
225228
#define XELP_EU_MASK REG_GENMASK(7, 0)
226229
#define XELP_GT_SLICE_ENABLE XE_REG(0x9138)

drivers/gpu/drm/xe/xe_gt_topology.c

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,8 @@ static void
129129
load_l3_bank_mask(struct xe_gt *gt, xe_l3_bank_mask_t l3_bank_mask)
130130
{
131131
struct xe_device *xe = gt_to_xe(gt);
132-
u32 fuse3 = xe_mmio_read32(&gt->mmio, MIRROR_FUSE3);
132+
struct xe_mmio *mmio = &gt->mmio;
133+
u32 fuse3 = xe_mmio_read32(mmio, MIRROR_FUSE3);
133134

134135
/*
135136
* PTL platforms with media version 30.00 do not provide proper values
@@ -143,7 +144,16 @@ load_l3_bank_mask(struct xe_gt *gt, xe_l3_bank_mask_t l3_bank_mask)
143144
if (XE_WA(gt, no_media_l3))
144145
return;
145146

146-
if (GRAPHICS_VER(xe) >= 20) {
147+
if (GRAPHICS_VER(xe) >= 30) {
148+
xe_l3_bank_mask_t per_node = {};
149+
u32 meml3_en = REG_FIELD_GET(XE2_NODE_ENABLE_MASK, fuse3);
150+
u32 mirror_l3bank_enable = xe_mmio_read32(mmio, MIRROR_L3BANK_ENABLE);
151+
u32 bank_val = REG_FIELD_GET(XE3_L3BANK_ENABLE, mirror_l3bank_enable);
152+
153+
bitmap_from_arr32(per_node, &bank_val, 32);
154+
gen_l3_mask_from_pattern(xe, l3_bank_mask, per_node, 32,
155+
meml3_en);
156+
} else if (GRAPHICS_VER(xe) >= 20) {
147157
xe_l3_bank_mask_t per_node = {};
148158
u32 meml3_en = REG_FIELD_GET(XE2_NODE_ENABLE_MASK, fuse3);
149159
u32 bank_val = REG_FIELD_GET(XE2_GT_L3_MODE_MASK, fuse3);
@@ -155,7 +165,7 @@ load_l3_bank_mask(struct xe_gt *gt, xe_l3_bank_mask_t l3_bank_mask)
155165
xe_l3_bank_mask_t per_node = {};
156166
xe_l3_bank_mask_t per_mask_bit = {};
157167
u32 meml3_en = REG_FIELD_GET(MEML3_EN_MASK, fuse3);
158-
u32 fuse4 = xe_mmio_read32(&gt->mmio, XEHP_FUSE4);
168+
u32 fuse4 = xe_mmio_read32(mmio, XEHP_FUSE4);
159169
u32 bank_val = REG_FIELD_GET(GT_L3_EXC_MASK, fuse4);
160170

161171
bitmap_set_value8(per_mask_bit, 0x3, 0);

0 commit comments

Comments
 (0)