Skip to content

Commit 353b8f4

Browse files
kwachowsjlawryno
authored andcommitted
accel/ivpu: Fix missing MMU events from reserved SSID
Generate recovery when fault from reserved context is detected. Add Abort (A) bit to reserved (1) SSID to ensure NPU also receives a fault. There is no way to create a file_priv with reserved SSID but it is still possible to receive MMU faults from that SSID as it is a default NPU HW setting. Such situation will occur if FW freed context related resources but still performed access to DRAM. Signed-off-by: Karol Wachowski <karol.wachowski@intel.com> Signed-off-by: Maciej Falkowski <maciej.falkowski@linux.intel.com> Reviewed-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com> Signed-off-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250107173238.381120-9-maciej.falkowski@linux.intel.com
1 parent 4480912 commit 353b8f4

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

drivers/accel/ivpu/ivpu_mmu.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -725,8 +725,8 @@ static int ivpu_mmu_cdtab_entry_set(struct ivpu_device *vdev, u32 ssid, u64 cd_d
725725
cd[2] = 0;
726726
cd[3] = 0x0000000000007444;
727727

728-
/* For global context generate memory fault on VPU */
729-
if (ssid == IVPU_GLOBAL_CONTEXT_MMU_SSID)
728+
/* For global and reserved contexts generate memory fault on VPU */
729+
if (ssid == IVPU_GLOBAL_CONTEXT_MMU_SSID || ssid == IVPU_RESERVED_CONTEXT_MMU_SSID)
730730
cd[0] |= IVPU_MMU_CD_0_A;
731731

732732
if (valid)
@@ -945,7 +945,8 @@ void ivpu_mmu_irq_evtq_handler(struct ivpu_device *vdev)
945945

946946
while ((event = ivpu_mmu_get_event(vdev))) {
947947
ssid = FIELD_GET(IVPU_MMU_EVT_SSID_MASK, *event);
948-
if (ssid == IVPU_GLOBAL_CONTEXT_MMU_SSID) {
948+
if (ssid == IVPU_GLOBAL_CONTEXT_MMU_SSID ||
949+
ssid == IVPU_RESERVED_CONTEXT_MMU_SSID) {
949950
ivpu_mmu_dump_event(vdev, event);
950951
ivpu_pm_trigger_recovery(vdev, "MMU event");
951952
return;

0 commit comments

Comments
 (0)