From: Tomasz Michalec tmichalec@google.com
[ Upstream commit df9a825f330e76c72d1985bc9bdc4b8981e3d15f ]
If pmc_usb_probe is called before SCU IPC is registered, pmc_usb_probe will fail.
Return -EPROBE_DEFER when pmc_usb_probe doesn't get SCU IPC device, so the probe function can be called again after SCU IPC is initialized.
Signed-off-by: Tomasz Michalec tmichalec@google.com Reviewed-by: Heikki Krogerus heikki.krogerus@linux.intel.com Link: https://lore.kernel.org/r/20250610154058.1859812-1-tmichalec@google.com Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org Signed-off-by: Sasha Levin sashal@kernel.org ---
LLM Generated explanations, may be completely bogus:
Based on my analysis of the commit and the kernel codebase, here's my assessment:
**Backport Status: YES**
This commit should be backported to stable kernel trees for the following reasons:
1. **Clear Bug Fix**: The commit fixes a real probe ordering issue where `pmc_usb_probe` fails if called before the SCU IPC driver is initialized. The current code returns `-ENODEV` which prevents the driver from ever loading, while `-EPROBE_DEFER` allows the kernel to retry probing later.
2. **Established Pattern**: Looking at the codebase, other Intel platform drivers that depend on SCU IPC already use this pattern: - `drivers/watchdog/intel-mid_wdt.c`: Returns `-EPROBE_DEFER` when `devm_intel_scu_ipc_dev_get()` returns NULL - `drivers/mfd/intel_soc_pmic_bxtwc.c`: Returns `-EPROBE_DEFER` in the same scenario - `drivers/platform/x86/intel/telemetry/pltdrv.c`: Also uses `-EPROBE_DEFER`
3. **Small and Contained Change**: The fix is a one-line change (`-ENODEV` → `-EPROBE_DEFER`) that only affects the error handling path during probe. It doesn't introduce new functionality or change any existing behavior when SCU IPC is available.
4. **No Architecture Changes**: This is purely a bug fix that corrects incorrect error handling. It doesn't introduce new features or make architectural changes to the driver.
5. **Minimal Risk**: The change is extremely low risk - it only affects the error path when SCU IPC isn't yet available, and the deferred probe mechanism is a well-established kernel pattern designed specifically for handling driver dependencies.
6. **Real-World Impact**: Without this fix, users could experience USB Type-C functionality failures on Intel platforms if the drivers happen to probe in the wrong order. This is particularly problematic on systems where driver probe order is non-deterministic.
The commit follows the stable tree rules by fixing an important bug (probe failure due to ordering) with minimal risk and no new features. The fact that other Intel drivers already use this pattern confirms this is the correct approach for handling SCU IPC dependencies.
drivers/usb/typec/mux/intel_pmc_mux.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/usb/typec/mux/intel_pmc_mux.c b/drivers/usb/typec/mux/intel_pmc_mux.c index 60ed1f809130..a174ff7a9abd 100644 --- a/drivers/usb/typec/mux/intel_pmc_mux.c +++ b/drivers/usb/typec/mux/intel_pmc_mux.c @@ -730,7 +730,7 @@ static int pmc_usb_probe(struct platform_device *pdev)
pmc->ipc = devm_intel_scu_ipc_dev_get(&pdev->dev); if (!pmc->ipc) - return -ENODEV; + return -EPROBE_DEFER;
pmc->dev = &pdev->dev;