14 Feb
2023
14 Feb
'23
2:21 p.m.
+static void amd_sdw_probe_work(struct work_struct *work) +{
- struct amd_sdw_manager *amd_manager = container_of(work, struct amd_sdw_manager,
probe_work);
- struct sdw_master_prop *prop;
- int ret;
- prop = &amd_manager->bus.prop;
- if (!prop->hw_disabled) {
amd_enable_sdw_pads(amd_manager);
ret = amd_init_sdw_manager(amd_manager);
if (ret)
return;
amd_enable_sdw_interrupts(amd_manager);
ret = amd_enable_sdw_manager(amd_manager);
if (ret)
return;
amd_sdw_set_frameshape(amd_manager);
- }
+}
There should be an explanation as to why you need a workqueue to complete the probe.
We want to separate the manager probe sequence and start up sequence. we will add the comment.
Do you need to split in two? For Intel, on some platforms we had a clear power dependency, we had to wait until parts of the DSP were powered before accessing SHIM registers, so we called the startup() when those dependencies were resolved.
I am not sure you can count on the probe_work to enforce any kind of delay, worst case the work function could be scheduled immediately.