mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 01:53:29 +02:00
drm/amdkfd: Rework reserved SDMA queue handling
We would need to reserve SDMA queues per KFD node. As a result, rework the SDMA reserved queue handling to make it per KFD node. Signed-off-by: Mukul Joshi <mukul.joshi@amd.com> Reviewed-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
539d821df2
commit
d514ed18f5
|
|
@ -94,6 +94,8 @@ static void kfd_device_info_set_sdma_info(struct kfd_dev *kfd)
|
|||
case IP_VERSION(5, 2, 2):/* NAVY_FLOUNDER */
|
||||
case IP_VERSION(5, 2, 4):/* DIMGREY_CAVEFISH */
|
||||
case IP_VERSION(5, 2, 5):/* BEIGE_GOBY */
|
||||
kfd->device_info.num_sdma_queues_per_engine = 8;
|
||||
break;
|
||||
case IP_VERSION(6, 0, 0):
|
||||
case IP_VERSION(6, 0, 1):
|
||||
case IP_VERSION(6, 0, 2):
|
||||
|
|
@ -105,6 +107,8 @@ static void kfd_device_info_set_sdma_info(struct kfd_dev *kfd)
|
|||
case IP_VERSION(7, 0, 0):
|
||||
case IP_VERSION(7, 0, 1):
|
||||
kfd->device_info.num_sdma_queues_per_engine = 8;
|
||||
/* Reserve 1 for paging and 1 for gfx */
|
||||
kfd->device_info.num_reserved_sdma_queues_per_engine = 2;
|
||||
break;
|
||||
default:
|
||||
dev_warn(kfd_device,
|
||||
|
|
@ -112,30 +116,6 @@ static void kfd_device_info_set_sdma_info(struct kfd_dev *kfd)
|
|||
sdma_version);
|
||||
kfd->device_info.num_sdma_queues_per_engine = 8;
|
||||
}
|
||||
|
||||
bitmap_zero(kfd->device_info.reserved_sdma_queues_bitmap, KFD_MAX_SDMA_QUEUES);
|
||||
|
||||
switch (sdma_version) {
|
||||
case IP_VERSION(6, 0, 0):
|
||||
case IP_VERSION(6, 0, 1):
|
||||
case IP_VERSION(6, 0, 2):
|
||||
case IP_VERSION(6, 0, 3):
|
||||
case IP_VERSION(6, 1, 0):
|
||||
case IP_VERSION(6, 1, 1):
|
||||
case IP_VERSION(6, 1, 2):
|
||||
case IP_VERSION(6, 1, 3):
|
||||
case IP_VERSION(7, 0, 0):
|
||||
case IP_VERSION(7, 0, 1):
|
||||
/* Reserve 1 for paging and 1 for gfx */
|
||||
kfd->device_info.num_reserved_sdma_queues_per_engine = 2;
|
||||
/* BIT(0)=engine-0 queue-0; BIT(1)=engine-1 queue-0; BIT(2)=engine-0 queue-1; ... */
|
||||
bitmap_set(kfd->device_info.reserved_sdma_queues_bitmap, 0,
|
||||
kfd->adev->sdma.num_instances *
|
||||
kfd->device_info.num_reserved_sdma_queues_per_engine);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void kfd_device_info_set_event_interrupt_class(struct kfd_dev *kfd)
|
||||
|
|
|
|||
|
|
@ -137,9 +137,10 @@ static void init_sdma_bitmaps(struct device_queue_manager *dqm)
|
|||
bitmap_set(dqm->xgmi_sdma_bitmap, 0, get_num_xgmi_sdma_queues(dqm));
|
||||
|
||||
/* Mask out the reserved queues */
|
||||
bitmap_andnot(dqm->sdma_bitmap, dqm->sdma_bitmap,
|
||||
dqm->dev->kfd->device_info.reserved_sdma_queues_bitmap,
|
||||
KFD_MAX_SDMA_QUEUES);
|
||||
bitmap_clear(dqm->sdma_bitmap, 0, kfd_get_num_sdma_engines(dqm->dev) *
|
||||
dqm->dev->kfd->device_info.num_reserved_sdma_queues_per_engine);
|
||||
bitmap_clear(dqm->xgmi_sdma_bitmap, 0, kfd_get_num_xgmi_sdma_engines(dqm->dev) *
|
||||
dqm->dev->kfd->device_info.num_reserved_sdma_queues_per_engine);
|
||||
}
|
||||
|
||||
void program_sh_mem_settings(struct device_queue_manager *dqm,
|
||||
|
|
|
|||
|
|
@ -241,7 +241,6 @@ struct kfd_device_info {
|
|||
uint32_t no_atomic_fw_version;
|
||||
unsigned int num_sdma_queues_per_engine;
|
||||
unsigned int num_reserved_sdma_queues_per_engine;
|
||||
DECLARE_BITMAP(reserved_sdma_queues_bitmap, KFD_MAX_SDMA_QUEUES);
|
||||
};
|
||||
|
||||
unsigned int kfd_get_num_sdma_engines(struct kfd_node *kdev);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user