|
19 | 19 | #define CREATE_TRACE_POINTS |
20 | 20 | #include <trace/events/sof.h> |
21 | 21 |
|
| 22 | +/* Module parameters for firmware, topology and IPC type override */ |
| 23 | +static char *override_fw_path; |
| 24 | +module_param_named(fw_path, override_fw_path, charp, 0444); |
| 25 | +MODULE_PARM_DESC(fw_path, "alternate path for SOF firmware."); |
| 26 | + |
| 27 | +static char *override_fw_filename; |
| 28 | +module_param_named(fw_filename, override_fw_filename, charp, 0444); |
| 29 | +MODULE_PARM_DESC(fw_filename, "alternate filename for SOF firmware."); |
| 30 | + |
| 31 | +static char *override_lib_path; |
| 32 | +module_param_named(lib_path, override_lib_path, charp, 0444); |
| 33 | +MODULE_PARM_DESC(lib_path, "alternate path for SOF firmware libraries."); |
| 34 | + |
| 35 | +static char *override_tplg_path; |
| 36 | +module_param_named(tplg_path, override_tplg_path, charp, 0444); |
| 37 | +MODULE_PARM_DESC(tplg_path, "alternate path for SOF topology."); |
| 38 | + |
| 39 | +static char *override_tplg_filename; |
| 40 | +module_param_named(tplg_filename, override_tplg_filename, charp, 0444); |
| 41 | +MODULE_PARM_DESC(tplg_filename, "alternate filename for SOF topology."); |
| 42 | + |
| 43 | +static int override_ipc_type = -1; |
| 44 | +module_param_named(ipc_type, override_ipc_type, int, 0444); |
| 45 | +MODULE_PARM_DESC(ipc_type, "Force SOF IPC type. 0 - IPC3, 1 - IPC4"); |
| 46 | + |
22 | 47 | /* see SOF_DBG_ flags */ |
23 | 48 | static int sof_core_debug = IS_ENABLED(CONFIG_SND_SOC_SOF_DEBUG_ENABLE_FIRMWARE_TRACE); |
24 | 49 | module_param_named(sof_debug, sof_core_debug, int, 0444); |
@@ -581,6 +606,23 @@ static void sof_probe_work(struct work_struct *work) |
581 | 606 | } |
582 | 607 | } |
583 | 608 |
|
| 609 | +static void |
| 610 | +sof_apply_profile_override(struct sof_loadable_file_profile *path_override) |
| 611 | +{ |
| 612 | + if (override_ipc_type >= 0 && override_ipc_type < SOF_IPC_TYPE_COUNT) |
| 613 | + path_override->ipc_type = override_ipc_type; |
| 614 | + if (override_fw_path) |
| 615 | + path_override->fw_path = override_fw_path; |
| 616 | + if (override_fw_filename) |
| 617 | + path_override->fw_name = override_fw_filename; |
| 618 | + if (override_lib_path) |
| 619 | + path_override->fw_lib_path = override_lib_path; |
| 620 | + if (override_tplg_path) |
| 621 | + path_override->tplg_path = override_tplg_path; |
| 622 | + if (override_tplg_filename) |
| 623 | + path_override->tplg_name = override_tplg_filename; |
| 624 | +} |
| 625 | + |
584 | 626 | int snd_sof_device_probe(struct device *dev, struct snd_sof_pdata *plat_data) |
585 | 627 | { |
586 | 628 | struct snd_sof_dev *sdev; |
@@ -612,6 +654,8 @@ int snd_sof_device_probe(struct device *dev, struct snd_sof_pdata *plat_data) |
612 | 654 | } |
613 | 655 | } |
614 | 656 |
|
| 657 | + sof_apply_profile_override(&plat_data->ipc_file_profile_base); |
| 658 | + |
615 | 659 | /* Initialize sof_ops based on the initial selected IPC version */ |
616 | 660 | ret = sof_init_sof_ops(sdev); |
617 | 661 | if (ret) |
|
0 commit comments