mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-22 13:29:57 +07:00
drm/amdkfd: Use Arcturus specific set_vm_context_page_table_base()
Since Arcturus has it own function pointer, we can move Arcturus specific logic to there rather than leaving it entangled with other GFX9 chips. Signed-off-by: Yong Zhao <Yong.Zhao@amd.com> Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
63408972e4
commit
ad5901df88
@ -46,6 +46,8 @@
|
|||||||
#include "soc15.h"
|
#include "soc15.h"
|
||||||
#include "soc15d.h"
|
#include "soc15d.h"
|
||||||
#include "amdgpu_amdkfd_gfx_v9.h"
|
#include "amdgpu_amdkfd_gfx_v9.h"
|
||||||
|
#include "gfxhub_v1_0.h"
|
||||||
|
#include "mmhub_v9_4.h"
|
||||||
|
|
||||||
#define HQD_N_REGS 56
|
#define HQD_N_REGS 56
|
||||||
#define DUMP_REG(addr) do { \
|
#define DUMP_REG(addr) do { \
|
||||||
@ -258,6 +260,22 @@ static int kgd_hqd_sdma_destroy(struct kgd_dev *kgd, void *mqd,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void kgd_set_vm_context_page_table_base(struct kgd_dev *kgd, uint32_t vmid,
|
||||||
|
uint64_t page_table_base)
|
||||||
|
{
|
||||||
|
struct amdgpu_device *adev = get_amdgpu_device(kgd);
|
||||||
|
|
||||||
|
if (!amdgpu_amdkfd_is_kfd_vmid(adev, vmid)) {
|
||||||
|
pr_err("trying to set page table base for wrong VMID %u\n",
|
||||||
|
vmid);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mmhub_v9_4_setup_vm_pt_regs(adev, vmid, page_table_base);
|
||||||
|
|
||||||
|
gfxhub_v1_0_setup_vm_pt_regs(adev, vmid, page_table_base);
|
||||||
|
}
|
||||||
|
|
||||||
const struct kfd2kgd_calls arcturus_kfd2kgd = {
|
const struct kfd2kgd_calls arcturus_kfd2kgd = {
|
||||||
.program_sh_mem_settings = kgd_gfx_v9_program_sh_mem_settings,
|
.program_sh_mem_settings = kgd_gfx_v9_program_sh_mem_settings,
|
||||||
.set_pasid_vmid_mapping = kgd_gfx_v9_set_pasid_vmid_mapping,
|
.set_pasid_vmid_mapping = kgd_gfx_v9_set_pasid_vmid_mapping,
|
||||||
@ -277,7 +295,7 @@ const struct kfd2kgd_calls arcturus_kfd2kgd = {
|
|||||||
.get_atc_vmid_pasid_mapping_info =
|
.get_atc_vmid_pasid_mapping_info =
|
||||||
kgd_gfx_v9_get_atc_vmid_pasid_mapping_info,
|
kgd_gfx_v9_get_atc_vmid_pasid_mapping_info,
|
||||||
.get_tile_config = kgd_gfx_v9_get_tile_config,
|
.get_tile_config = kgd_gfx_v9_get_tile_config,
|
||||||
.set_vm_context_page_table_base = kgd_gfx_v9_set_vm_context_page_table_base,
|
.set_vm_context_page_table_base = kgd_set_vm_context_page_table_base,
|
||||||
.invalidate_tlbs = kgd_gfx_v9_invalidate_tlbs,
|
.invalidate_tlbs = kgd_gfx_v9_invalidate_tlbs,
|
||||||
.invalidate_tlbs_vmid = kgd_gfx_v9_invalidate_tlbs_vmid,
|
.invalidate_tlbs_vmid = kgd_gfx_v9_invalidate_tlbs_vmid,
|
||||||
.get_hive_id = amdgpu_amdkfd_get_hive_id,
|
.get_hive_id = amdgpu_amdkfd_get_hive_id,
|
||||||
|
@ -40,7 +40,6 @@
|
|||||||
#include "soc15d.h"
|
#include "soc15d.h"
|
||||||
#include "mmhub_v1_0.h"
|
#include "mmhub_v1_0.h"
|
||||||
#include "gfxhub_v1_0.h"
|
#include "gfxhub_v1_0.h"
|
||||||
#include "mmhub_v9_4.h"
|
|
||||||
|
|
||||||
|
|
||||||
enum hqd_dequeue_request_type {
|
enum hqd_dequeue_request_type {
|
||||||
@ -758,8 +757,8 @@ uint32_t kgd_gfx_v9_address_watch_get_offset(struct kgd_dev *kgd,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void kgd_gfx_v9_set_vm_context_page_table_base(struct kgd_dev *kgd, uint32_t vmid,
|
static void kgd_gfx_v9_set_vm_context_page_table_base(struct kgd_dev *kgd,
|
||||||
uint64_t page_table_base)
|
uint32_t vmid, uint64_t page_table_base)
|
||||||
{
|
{
|
||||||
struct amdgpu_device *adev = get_amdgpu_device(kgd);
|
struct amdgpu_device *adev = get_amdgpu_device(kgd);
|
||||||
|
|
||||||
@ -769,14 +768,7 @@ void kgd_gfx_v9_set_vm_context_page_table_base(struct kgd_dev *kgd, uint32_t vmi
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: take advantage of per-process address space size. For
|
mmhub_v1_0_setup_vm_pt_regs(adev, vmid, page_table_base);
|
||||||
* now, all processes share the same address space size, like
|
|
||||||
* on GFX8 and older.
|
|
||||||
*/
|
|
||||||
if (adev->asic_type == CHIP_ARCTURUS) {
|
|
||||||
mmhub_v9_4_setup_vm_pt_regs(adev, vmid, page_table_base);
|
|
||||||
} else
|
|
||||||
mmhub_v1_0_setup_vm_pt_regs(adev, vmid, page_table_base);
|
|
||||||
|
|
||||||
gfxhub_v1_0_setup_vm_pt_regs(adev, vmid, page_table_base);
|
gfxhub_v1_0_setup_vm_pt_regs(adev, vmid, page_table_base);
|
||||||
}
|
}
|
||||||
|
@ -57,8 +57,6 @@ uint32_t kgd_gfx_v9_address_watch_get_offset(struct kgd_dev *kgd,
|
|||||||
|
|
||||||
bool kgd_gfx_v9_get_atc_vmid_pasid_mapping_info(struct kgd_dev *kgd,
|
bool kgd_gfx_v9_get_atc_vmid_pasid_mapping_info(struct kgd_dev *kgd,
|
||||||
uint8_t vmid, uint16_t *p_pasid);
|
uint8_t vmid, uint16_t *p_pasid);
|
||||||
void kgd_gfx_v9_set_vm_context_page_table_base(struct kgd_dev *kgd, uint32_t vmid,
|
|
||||||
uint64_t page_table_base);
|
|
||||||
int kgd_gfx_v9_invalidate_tlbs(struct kgd_dev *kgd, uint16_t pasid);
|
int kgd_gfx_v9_invalidate_tlbs(struct kgd_dev *kgd, uint16_t pasid);
|
||||||
int kgd_gfx_v9_invalidate_tlbs_vmid(struct kgd_dev *kgd, uint16_t vmid);
|
int kgd_gfx_v9_invalidate_tlbs_vmid(struct kgd_dev *kgd, uint16_t vmid);
|
||||||
int kgd_gfx_v9_get_tile_config(struct kgd_dev *kgd,
|
int kgd_gfx_v9_get_tile_config(struct kgd_dev *kgd,
|
||||||
|
Loading…
Reference in New Issue
Block a user