.. | .. |
---|
23 | 23 | #include "kfd_priv.h" |
---|
24 | 24 | #include "kfd_events.h" |
---|
25 | 25 | #include "cik_int.h" |
---|
| 26 | +#include "amdgpu_amdkfd.h" |
---|
| 27 | +#include "kfd_smi_events.h" |
---|
26 | 28 | |
---|
27 | 29 | static bool cik_event_interrupt_isr(struct kfd_dev *dev, |
---|
28 | 30 | const uint32_t *ih_ring_entry, |
---|
.. | .. |
---|
32 | 34 | const struct cik_ih_ring_entry *ihre = |
---|
33 | 35 | (const struct cik_ih_ring_entry *)ih_ring_entry; |
---|
34 | 36 | const struct kfd2kgd_calls *f2g = dev->kfd2kgd; |
---|
35 | | - unsigned int vmid, pasid; |
---|
| 37 | + unsigned int vmid; |
---|
| 38 | + uint16_t pasid; |
---|
| 39 | + bool ret; |
---|
36 | 40 | |
---|
37 | 41 | /* This workaround is due to HW/FW limitation on Hawaii that |
---|
38 | 42 | * VMID and PASID are not written into ih_ring_entry |
---|
.. | .. |
---|
47 | 51 | *tmp_ihre = *ihre; |
---|
48 | 52 | |
---|
49 | 53 | 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); |
---|
51 | 55 | |
---|
52 | 56 | tmp_ihre->ring_id &= 0x000000ff; |
---|
53 | 57 | tmp_ihre->ring_id |= vmid << 8; |
---|
54 | 58 | tmp_ihre->ring_id |= pasid << 16; |
---|
55 | 59 | |
---|
56 | | - return (pasid != 0) && |
---|
| 60 | + return ret && (pasid != 0) && |
---|
57 | 61 | vmid >= dev->vm_info.first_vmid_kfd && |
---|
58 | 62 | vmid <= dev->vm_info.last_vmid_kfd; |
---|
59 | 63 | } |
---|
.. | .. |
---|
87 | 91 | (const struct cik_ih_ring_entry *)ih_ring_entry; |
---|
88 | 92 | uint32_t context_id = ihre->data & 0xfffffff; |
---|
89 | 93 | 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; |
---|
91 | 95 | |
---|
92 | 96 | if (pasid == 0) |
---|
93 | 97 | return; |
---|
.. | .. |
---|
104 | 108 | ihre->source_id == CIK_INTSRC_GFX_MEM_PROT_FAULT) { |
---|
105 | 109 | struct kfd_vm_fault_info info; |
---|
106 | 110 | |
---|
| 111 | + kfd_smi_event_update_vmfault(dev, pasid); |
---|
107 | 112 | kfd_process_vm_fault(dev->dqm, pasid); |
---|
108 | 113 | |
---|
109 | 114 | 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); |
---|
111 | 116 | if (!info.page_addr && !info.status) |
---|
112 | 117 | return; |
---|
113 | 118 | |
---|