Commit fb20954c authored by Alex Deucher's avatar Alex Deucher
Browse files

drm/amdgpu/userq: rework driver parameter



Replace disable_kq parameter with user_queue parameter.
The parameter has the following logic:
 -1 = auto (ASIC specific default)
  0 = user queues disabled
  1 = user queues enabled and kernel queues enabled (if supported)
  2 = user queues enabled and kernel queues disabled

The default behavior (-1) is currently the same as 0 for current
ASICs.  To enable user queues (in addition to kernel queues) set
user_queue=1. To enable user queues and disable kernel queues
(to make all resources available to user queues), set user_queue=2.

Reviewed-by: default avatarSunil Khatri <sunil.khatri@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 172494c4
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -271,7 +271,7 @@ extern int amdgpu_agp;
extern int amdgpu_rebar;

extern int amdgpu_wbrf;
extern int amdgpu_disable_kq;
extern int amdgpu_user_queue;

#define AMDGPU_VM_MAX_NUM_CTX			4096
#define AMDGPU_SG_THRESHOLD			(256*1024*1024)
+9 −6
Original line number Diff line number Diff line
@@ -242,7 +242,7 @@ int amdgpu_wbrf = -1;
int amdgpu_damage_clips = -1; /* auto */
int amdgpu_umsch_mm_fwlog;
int amdgpu_rebar = -1; /* auto */
int amdgpu_disable_kq = -1;
int amdgpu_user_queue = -1;

DECLARE_DYNDBG_CLASSMAP(drm_debug_classes, DD_CLASS_TYPE_DISJOINT_BITS, 0,
			"DRM_UT_CORE",
@@ -1114,12 +1114,15 @@ MODULE_PARM_DESC(rebar, "Resizable BAR (-1 = auto (default), 0 = disable, 1 = en
module_param_named(rebar, amdgpu_rebar, int, 0444);

/**
 * DOC: disable_kq (int)
 * Disable kernel queues on systems that support user queues.
 * (0 = kernel queues enabled, 1 = kernel queues disabled, -1 = auto (default setting))
 * DOC: user_queue (int)
 * Enable user queues on systems that support user queues.
 * -1 = auto (ASIC specific default)
 *  0 = user queues disabled
 *  1 = user queues enabled and kernel queues enabled (if supported)
 *  2 = user queues enabled and kernel queues disabled
 */
MODULE_PARM_DESC(disable_kq, "Disable kernel queues (-1 = auto (default), 0 = enable KQ, 1 = disable KQ)");
module_param_named(disable_kq, amdgpu_disable_kq, int, 0444);
MODULE_PARM_DESC(user_queue, "Enable user queues (-1 = auto (default), 0 = disable, 1 = enable, 2 = enable UQs and disable KQs)");
module_param_named(user_queue, amdgpu_user_queue, int, 0444);

/* These devices are not supported by amdgpu.
 * They are supported by the mach64, r128, radeon drivers
+1 −0
Original line number Diff line number Diff line
@@ -487,6 +487,7 @@ struct amdgpu_gfx {
	struct mutex                    workload_profile_mutex;

	bool				disable_kq;
	bool				disable_uq;
};

struct amdgpu_gfx_ras_reg_entry {
+1 −0
Original line number Diff line number Diff line
@@ -138,6 +138,7 @@ struct amdgpu_sdma {
	uint32_t 		supported_reset;
	struct list_head	reset_callback_list;
	bool			no_user_submission;
	bool			disable_uq;
};

/*
+17 −3
Original line number Diff line number Diff line
@@ -1632,7 +1632,7 @@ static int gfx_v11_0_sw_init(struct amdgpu_ip_block *ip_block)
	case IP_VERSION(11, 0, 3):
#ifdef CONFIG_DRM_AMDGPU_NAVI3X_USERQ
		/* add firmware version checks here */
		if (0) {
		if (0 && !adev->gfx.disable_uq) {
			adev->userq_funcs[AMDGPU_HW_IP_GFX] = &userq_mes_funcs;
			adev->userq_funcs[AMDGPU_HW_IP_COMPUTE] = &userq_mes_funcs;
		}
@@ -1646,7 +1646,7 @@ static int gfx_v11_0_sw_init(struct amdgpu_ip_block *ip_block)
	case IP_VERSION(11, 5, 3):
#ifdef CONFIG_DRM_AMDGPU_NAVI3X_USERQ
		/* add firmware version checks here */
		if (0) {
		if (0 && !adev->gfx.disable_uq) {
			adev->userq_funcs[AMDGPU_HW_IP_GFX] = &userq_mes_funcs;
			adev->userq_funcs[AMDGPU_HW_IP_COMPUTE] = &userq_mes_funcs;
		}
@@ -5211,8 +5211,22 @@ static int gfx_v11_0_early_init(struct amdgpu_ip_block *ip_block)
{
	struct amdgpu_device *adev = ip_block->adev;

	if (amdgpu_disable_kq == 1)
	switch (amdgpu_user_queue) {
	case -1:
	case 0:
	default:
		adev->gfx.disable_kq = false;
		adev->gfx.disable_uq = true;
		break;
	case 1:
		adev->gfx.disable_kq = false;
		adev->gfx.disable_uq = false;
		break;
	case 2:
		adev->gfx.disable_kq = true;
		adev->gfx.disable_uq = false;
		break;
	}

	adev->gfx.funcs = &gfx_v11_0_gfx_funcs;

Loading