1 // SPDX-License-Identifier: MIT 2 /* 3 * Copyright © 2021 Intel Corporation 4 */ 5 6 #include "xe_module.h" 7 8 #include <linux/init.h> 9 #include <linux/module.h> 10 11 #include "xe_drv.h" 12 #include "xe_hw_fence.h" 13 #include "xe_module.h" 14 #include "xe_pci.h" 15 #include "xe_pmu.h" 16 #include "xe_sched_job.h" 17 18 bool force_execlist = false; 19 module_param_named_unsafe(force_execlist, force_execlist, bool, 0444); 20 MODULE_PARM_DESC(force_execlist, "Force Execlist submission"); 21 22 u32 xe_force_vram_bar_size; 23 module_param_named(vram_bar_size, xe_force_vram_bar_size, uint, 0600); 24 MODULE_PARM_DESC(vram_bar_size, "Set the vram bar size(in MiB)"); 25 26 int xe_guc_log_level = 5; 27 module_param_named(guc_log_level, xe_guc_log_level, int, 0600); 28 MODULE_PARM_DESC(guc_log_level, "GuC firmware logging level (0=disable, 1..5=enable with verbosity min..max)"); 29 30 char *xe_guc_firmware_path; 31 module_param_named_unsafe(guc_firmware_path, xe_guc_firmware_path, charp, 0400); 32 MODULE_PARM_DESC(guc_firmware_path, 33 "GuC firmware path to use instead of the default one"); 34 35 char *xe_huc_firmware_path; 36 module_param_named_unsafe(huc_firmware_path, xe_huc_firmware_path, charp, 0400); 37 MODULE_PARM_DESC(huc_firmware_path, 38 "HuC firmware path to use instead of the default one - empty string disables"); 39 40 char *xe_param_force_probe = CONFIG_DRM_XE_FORCE_PROBE; 41 module_param_named_unsafe(force_probe, xe_param_force_probe, charp, 0400); 42 MODULE_PARM_DESC(force_probe, 43 "Force probe options for specified devices. See CONFIG_DRM_XE_FORCE_PROBE for details."); 44 45 struct init_funcs { 46 int (*init)(void); 47 void (*exit)(void); 48 }; 49 50 static const struct init_funcs init_funcs[] = { 51 { 52 .init = xe_hw_fence_module_init, 53 .exit = xe_hw_fence_module_exit, 54 }, 55 { 56 .init = xe_sched_job_module_init, 57 .exit = xe_sched_job_module_exit, 58 }, 59 { 60 .init = xe_pmu_init, 61 .exit = xe_pmu_exit, 62 }, 63 { 64 .init = xe_register_pci_driver, 65 .exit = xe_unregister_pci_driver, 66 }, 67 }; 68 69 static int __init xe_init(void) 70 { 71 int err, i; 72 73 for (i = 0; i < ARRAY_SIZE(init_funcs); i++) { 74 err = init_funcs[i].init(); 75 if (err) { 76 while (i--) 77 init_funcs[i].exit(); 78 return err; 79 } 80 } 81 82 return 0; 83 } 84 85 static void __exit xe_exit(void) 86 { 87 int i; 88 89 for (i = ARRAY_SIZE(init_funcs) - 1; i >= 0; i--) 90 init_funcs[i].exit(); 91 } 92 93 module_init(xe_init); 94 module_exit(xe_exit); 95 96 MODULE_AUTHOR("Intel Corporation"); 97 98 MODULE_DESCRIPTION(DRIVER_DESC); 99 MODULE_LICENSE("GPL and additional rights"); 100