|
9 | 9 | #include <linux/types.h>
|
10 | 10 |
|
11 | 11 | #include <drm/drm_drv.h>
|
| 12 | +#include <generated/xe_wa_oob.h> |
12 | 13 | #include <uapi/drm/xe_drm.h>
|
13 | 14 |
|
14 | 15 | #include "xe_bo.h"
|
|
22 | 23 | #include "xe_observation.h"
|
23 | 24 | #include "xe_pm.h"
|
24 | 25 | #include "xe_trace.h"
|
| 26 | +#include "xe_wa.h" |
25 | 27 |
|
26 | 28 | #include "regs/xe_eu_stall_regs.h"
|
27 | 29 | #include "regs/xe_gt_regs.h"
|
@@ -642,6 +644,10 @@ static int xe_eu_stall_stream_enable(struct xe_eu_stall_data_stream *stream)
|
642 | 644 | return -ETIMEDOUT;
|
643 | 645 | }
|
644 | 646 |
|
| 647 | + if (XE_WA(gt, 22016596838)) |
| 648 | + xe_gt_mcr_multicast_write(gt, ROW_CHICKEN2, |
| 649 | + _MASKED_BIT_ENABLE(DISABLE_DOP_GATING)); |
| 650 | + |
645 | 651 | for_each_dss_steering(xecore, gt, group, instance) {
|
646 | 652 | write_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT, group, instance);
|
647 | 653 | /* Clear any drop bits set and not cleared in the previous session. */
|
@@ -793,6 +799,10 @@ static int xe_eu_stall_disable_locked(struct xe_eu_stall_data_stream *stream)
|
793 | 799 |
|
794 | 800 | cancel_delayed_work_sync(&stream->buf_poll_work);
|
795 | 801 |
|
| 802 | + if (XE_WA(gt, 22016596838)) |
| 803 | + xe_gt_mcr_multicast_write(gt, ROW_CHICKEN2, |
| 804 | + _MASKED_BIT_DISABLE(DISABLE_DOP_GATING)); |
| 805 | + |
796 | 806 | xe_force_wake_put(gt_to_fw(gt), XE_FW_RENDER);
|
797 | 807 | xe_pm_runtime_put(gt_to_xe(gt));
|
798 | 808 |
|
|
0 commit comments