hc
2024-05-10 cde9070d9970eef1f7ec2360586c802a16230ad8
kernel/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h
....@@ -26,6 +26,9 @@
2626
2727 #include "kfd_priv.h"
2828
29
+#define KFD_MAX_NUM_SE 8
30
+#define KFD_MAX_NUM_SH_PER_SE 2
31
+
2932 /**
3033 * struct mqd_manager
3134 *
....@@ -39,9 +42,12 @@
3942 * @destroy_mqd: Destroys the HQD slot and by that preempt the relevant queue.
4043 * Used only for no cp scheduling.
4144 *
42
- * @uninit_mqd: Releases the mqd buffer from local gpu memory.
45
+ * @free_mqd: Releases the mqd buffer from local gpu memory.
4346 *
4447 * @is_occupied: Checks if the relevant HQD slot is occupied.
48
+ *
49
+ * @get_wave_state: Retrieves context save state and optionally copies the
50
+ * control stack, if kept in the MQD, to the given userspace address.
4551 *
4652 * @mqd_mutex: Mqd manager mutex.
4753 *
....@@ -59,10 +65,13 @@
5965 * per KFD_MQD_TYPE for each device.
6066 *
6167 */
62
-
68
+extern int pipe_priority_map[];
6369 struct mqd_manager {
64
- int (*init_mqd)(struct mqd_manager *mm, void **mqd,
65
- struct kfd_mem_obj **mqd_mem_obj, uint64_t *gart_addr,
70
+ struct kfd_mem_obj* (*allocate_mqd)(struct kfd_dev *kfd,
71
+ struct queue_properties *q);
72
+
73
+ void (*init_mqd)(struct mqd_manager *mm, void **mqd,
74
+ struct kfd_mem_obj *mqd_mem_obj, uint64_t *gart_addr,
6675 struct queue_properties *q);
6776
6877 int (*load_mqd)(struct mqd_manager *mm, void *mqd,
....@@ -70,7 +79,7 @@
7079 struct queue_properties *p,
7180 struct mm_struct *mms);
7281
73
- int (*update_mqd)(struct mqd_manager *mm, void *mqd,
82
+ void (*update_mqd)(struct mqd_manager *mm, void *mqd,
7483 struct queue_properties *q);
7584
7685 int (*destroy_mqd)(struct mqd_manager *mm, void *mqd,
....@@ -78,12 +87,17 @@
7887 unsigned int timeout, uint32_t pipe_id,
7988 uint32_t queue_id);
8089
81
- void (*uninit_mqd)(struct mqd_manager *mm, void *mqd,
90
+ void (*free_mqd)(struct mqd_manager *mm, void *mqd,
8291 struct kfd_mem_obj *mqd_mem_obj);
8392
8493 bool (*is_occupied)(struct mqd_manager *mm, void *mqd,
8594 uint64_t queue_address, uint32_t pipe_id,
8695 uint32_t queue_id);
96
+
97
+ int (*get_wave_state)(struct mqd_manager *mm, void *mqd,
98
+ void __user *ctl_stack,
99
+ u32 *ctl_stack_used_size,
100
+ u32 *save_area_used_size);
87101
88102 #if defined(CONFIG_DEBUG_FS)
89103 int (*debugfs_show_mqd)(struct seq_file *m, void *data);
....@@ -91,8 +105,17 @@
91105
92106 struct mutex mqd_mutex;
93107 struct kfd_dev *dev;
108
+ uint32_t mqd_size;
94109 };
95110
111
+struct kfd_mem_obj *allocate_hiq_mqd(struct kfd_dev *dev,
112
+ struct queue_properties *q);
113
+
114
+struct kfd_mem_obj *allocate_sdma_mqd(struct kfd_dev *dev,
115
+ struct queue_properties *q);
116
+void free_mqd_hiq_sdma(struct mqd_manager *mm, void *mqd,
117
+ struct kfd_mem_obj *mqd_mem_obj);
118
+
96119 void mqd_symmetrically_map_cu_mask(struct mqd_manager *mm,
97120 const uint32_t *cu_mask, uint32_t cu_mask_count,
98121 uint32_t *se_mask);