xref: /linux/drivers/gpu/drm/xe/xe_module.c (revision dd08ebf6c3525a7ea2186e636df064ea47281987)
1 // SPDX-License-Identifier: MIT
2 /*
3  * Copyright © 2021 Intel Corporation
4  */
5 
6 #include <linux/init.h>
7 #include <linux/module.h>
8 
9 #include "xe_drv.h"
10 #include "xe_hw_fence.h"
11 #include "xe_module.h"
12 #include "xe_pci.h"
13 #include "xe_sched_job.h"
14 
15 bool enable_guc = true;
16 module_param_named_unsafe(enable_guc, enable_guc, bool, 0444);
17 MODULE_PARM_DESC(enable_guc, "Enable GuC submission");
18 
19 u32 xe_force_lmem_bar_size;
20 module_param_named(lmem_bar_size, xe_force_lmem_bar_size, uint, 0600);
21 MODULE_PARM_DESC(lmem_bar_size, "Set the lmem bar size(in MiB)");
22 
23 int xe_guc_log_level = 5;
24 module_param_named(guc_log_level, xe_guc_log_level, int, 0600);
25 MODULE_PARM_DESC(guc_log_level, "GuC firmware logging level (0=disable, 1..5=enable with verbosity min..max)");
26 
27 char *xe_param_force_probe = CONFIG_DRM_XE_FORCE_PROBE;
28 module_param_named_unsafe(force_probe, xe_param_force_probe, charp, 0400);
29 MODULE_PARM_DESC(force_probe,
30 		 "Force probe options for specified devices. See CONFIG_DRM_XE_FORCE_PROBE for details.");
31 
32 struct init_funcs {
33 	int (*init)(void);
34 	void (*exit)(void);
35 };
36 #define MAKE_INIT_EXIT_FUNCS(name)		\
37 	{ .init = xe_##name##_module_init,	\
38 	  .exit = xe_##name##_module_exit, }
39 static const struct init_funcs init_funcs[] = {
40 	MAKE_INIT_EXIT_FUNCS(hw_fence),
41 	MAKE_INIT_EXIT_FUNCS(sched_job),
42 };
43 
44 static int __init xe_init(void)
45 {
46 	int err, i;
47 
48 	for (i = 0; i < ARRAY_SIZE(init_funcs); i++) {
49 		err = init_funcs[i].init();
50 		if (err) {
51 			while (i--)
52 				init_funcs[i].exit();
53 			return err;
54 		}
55 	}
56 
57 	return xe_register_pci_driver();
58 }
59 
60 static void __exit xe_exit(void)
61 {
62 	int i;
63 
64 	xe_unregister_pci_driver();
65 
66 	for (i = ARRAY_SIZE(init_funcs) - 1; i >= 0; i--)
67 		init_funcs[i].exit();
68 }
69 
70 module_init(xe_init);
71 module_exit(xe_exit);
72 
73 MODULE_AUTHOR("Intel Corporation");
74 
75 MODULE_DESCRIPTION(DRIVER_DESC);
76 MODULE_LICENSE("GPL and additional rights");
77