hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/gpu/drm/amd/amdkfd/cik_event_interrupt.c
....@@ -23,6 +23,8 @@
2323 #include "kfd_priv.h"
2424 #include "kfd_events.h"
2525 #include "cik_int.h"
26
+#include "amdgpu_amdkfd.h"
27
+#include "kfd_smi_events.h"
2628
2729 static bool cik_event_interrupt_isr(struct kfd_dev *dev,
2830 const uint32_t *ih_ring_entry,
....@@ -32,7 +34,9 @@
3234 const struct cik_ih_ring_entry *ihre =
3335 (const struct cik_ih_ring_entry *)ih_ring_entry;
3436 const struct kfd2kgd_calls *f2g = dev->kfd2kgd;
35
- unsigned int vmid, pasid;
37
+ unsigned int vmid;
38
+ uint16_t pasid;
39
+ bool ret;
3640
3741 /* This workaround is due to HW/FW limitation on Hawaii that
3842 * VMID and PASID are not written into ih_ring_entry
....@@ -47,13 +51,13 @@
4751 *tmp_ihre = *ihre;
4852
4953 vmid = f2g->read_vmid_from_vmfault_reg(dev->kgd);
50
- pasid = f2g->get_atc_vmid_pasid_mapping_pasid(dev->kgd, vmid);
54
+ ret = f2g->get_atc_vmid_pasid_mapping_info(dev->kgd, vmid, &pasid);
5155
5256 tmp_ihre->ring_id &= 0x000000ff;
5357 tmp_ihre->ring_id |= vmid << 8;
5458 tmp_ihre->ring_id |= pasid << 16;
5559
56
- return (pasid != 0) &&
60
+ return ret && (pasid != 0) &&
5761 vmid >= dev->vm_info.first_vmid_kfd &&
5862 vmid <= dev->vm_info.last_vmid_kfd;
5963 }
....@@ -87,7 +91,7 @@
8791 (const struct cik_ih_ring_entry *)ih_ring_entry;
8892 uint32_t context_id = ihre->data & 0xfffffff;
8993 unsigned int vmid = (ihre->ring_id & 0x0000ff00) >> 8;
90
- unsigned int pasid = (ihre->ring_id & 0xffff0000) >> 16;
94
+ u32 pasid = (ihre->ring_id & 0xffff0000) >> 16;
9195
9296 if (pasid == 0)
9397 return;
....@@ -104,10 +108,11 @@
104108 ihre->source_id == CIK_INTSRC_GFX_MEM_PROT_FAULT) {
105109 struct kfd_vm_fault_info info;
106110
111
+ kfd_smi_event_update_vmfault(dev, pasid);
107112 kfd_process_vm_fault(dev->dqm, pasid);
108113
109114 memset(&info, 0, sizeof(info));
110
- dev->kfd2kgd->get_vm_fault_info(dev->kgd, &info);
115
+ amdgpu_amdkfd_gpuvm_get_vm_fault_info(dev->kgd, &info);
111116 if (!info.page_addr && !info.status)
112117 return;
113118