Skip to content

Commit 588c200

Browse files
ashutoshxrodrigovivi
authored andcommitted
drm/xe/oa: Preserve oa_ctrl unused bits
UMD's have interest in setting unused bits of the oa_ctrl register "out of band" for certain experiments. To facilitate this, don't clobber previous oa_ctrl unused bits, i.e. rmw the values rather than simply write them. Fixes: e936f88 ("drm/xe/oa/uapi: Expose OA stream fd") Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com> Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250117032155.3048063-1-ashutosh.dixit@intel.com (cherry picked from commit cfa9d40) Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
1 parent 2014c95 commit 588c200

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@
5151
/* Common to all OA units */
5252
#define OA_OACONTROL_REPORT_BC_MASK REG_GENMASK(9, 9)
5353
#define OA_OACONTROL_COUNTER_SIZE_MASK REG_GENMASK(8, 8)
54+
#define OAG_OACONTROL_USED_BITS \
55+
(OAG_OACONTROL_OA_PES_DISAG_EN | OAG_OACONTROL_OA_CCS_SELECT_MASK | \
56+
OAG_OACONTROL_OA_COUNTER_SEL_MASK | OAG_OACONTROL_OA_COUNTER_ENABLE | \
57+
OA_OACONTROL_REPORT_BC_MASK | OA_OACONTROL_COUNTER_SIZE_MASK)
5458

5559
#define OAG_OA_DEBUG XE_REG(0xdaf8, XE_REG_OPTION_MASKED)
5660
#define OAG_OA_DEBUG_DISABLE_MMIO_TRG REG_BIT(14)
@@ -78,6 +82,8 @@
7882
#define OAM_CONTEXT_CONTROL_OFFSET (0x1bc)
7983
#define OAM_CONTROL_OFFSET (0x194)
8084
#define OAM_CONTROL_COUNTER_SEL_MASK REG_GENMASK(3, 1)
85+
#define OAM_OACONTROL_USED_BITS \
86+
(OAM_CONTROL_COUNTER_SEL_MASK | OAG_OACONTROL_OA_COUNTER_ENABLE)
8187
#define OAM_DEBUG_OFFSET (0x198)
8288
#define OAM_STATUS_OFFSET (0x19c)
8389
#define OAM_MMIO_TRG_OFFSET (0x1d0)

drivers/gpu/drm/xe/xe_oa.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,12 @@ static u32 __oa_ccs_select(struct xe_oa_stream *stream)
452452
return val;
453453
}
454454

455+
static u32 __oactrl_used_bits(struct xe_oa_stream *stream)
456+
{
457+
return stream->hwe->oa_unit->type == DRM_XE_OA_UNIT_TYPE_OAG ?
458+
OAG_OACONTROL_USED_BITS : OAM_OACONTROL_USED_BITS;
459+
}
460+
455461
static void xe_oa_enable(struct xe_oa_stream *stream)
456462
{
457463
const struct xe_oa_format *format = stream->oa_buffer.format;
@@ -472,14 +478,14 @@ static void xe_oa_enable(struct xe_oa_stream *stream)
472478
stream->hwe->oa_unit->type == DRM_XE_OA_UNIT_TYPE_OAG)
473479
val |= OAG_OACONTROL_OA_PES_DISAG_EN;
474480

475-
xe_mmio_write32(&stream->gt->mmio, regs->oa_ctrl, val);
481+
xe_mmio_rmw32(&stream->gt->mmio, regs->oa_ctrl, __oactrl_used_bits(stream), val);
476482
}
477483

478484
static void xe_oa_disable(struct xe_oa_stream *stream)
479485
{
480486
struct xe_mmio *mmio = &stream->gt->mmio;
481487

482-
xe_mmio_write32(mmio, __oa_regs(stream)->oa_ctrl, 0);
488+
xe_mmio_rmw32(mmio, __oa_regs(stream)->oa_ctrl, __oactrl_used_bits(stream), 0);
483489
if (xe_mmio_wait32(mmio, __oa_regs(stream)->oa_ctrl,
484490
OAG_OACONTROL_OA_COUNTER_ENABLE, 0, 50000, NULL, false))
485491
drm_err(&stream->oa->xe->drm,
@@ -2534,6 +2540,8 @@ static void __xe_oa_init_oa_units(struct xe_gt *gt)
25342540
u->type = DRM_XE_OA_UNIT_TYPE_OAM;
25352541
}
25362542

2543+
xe_mmio_write32(&gt->mmio, u->regs.oa_ctrl, 0);
2544+
25372545
/* Ensure MMIO trigger remains disabled till there is a stream */
25382546
xe_mmio_write32(&gt->mmio, u->regs.oa_debug,
25392547
oag_configure_mmio_trigger(NULL, false));

0 commit comments

Comments
 (0)