Enable Xe2+ PES disaggregation (for OAG) to retrieve disaggregated metrics
when disaggregated data is needed. Userspace can select whether to receive
aggregated or disaggregated metrics via the particular OA configuration it
uses (programmed via DRM_XE_OBSERVATION_OP_ADD_CONFIG).
Bspec: 61101
Fixes: e936f885f1e9 ("drm/xe/oa/uapi: Expose OA stream fd")
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240909165933.2638765-1-ashutosh.dixit@intel.com
Cc: stable@vger.kernel.org
 
 #define  OAG_OABUFFER_MEMORY_SELECT            REG_BIT(0) /* 0: PPGTT, 1: GGTT */
 
 #define OAG_OACONTROL                          XE_REG(0xdaf4)
+#define  OAG_OACONTROL_OA_PES_DISAG_EN         REG_GENMASK(27, 22)
 #define  OAG_OACONTROL_OA_CCS_SELECT_MASK      REG_GENMASK(18, 16)
 #define  OAG_OACONTROL_OA_COUNTER_SEL_MASK     REG_GENMASK(4, 2)
 #define  OAG_OACONTROL_OA_COUNTER_ENABLE       REG_BIT(0)
 
        val = __format_to_oactrl(format, regs->oa_ctrl_counter_select_mask) |
                __oa_ccs_select(stream) | OAG_OACONTROL_OA_COUNTER_ENABLE;
 
+       if (GRAPHICS_VER(stream->oa->xe) >= 20 &&
+           stream->hwe->oa_unit->type == DRM_XE_OA_UNIT_TYPE_OAG)
+               val |= OAG_OACONTROL_OA_PES_DISAG_EN;
+
        xe_mmio_write32(stream->gt, regs->oa_ctrl, val);
 }