Thread (28 messages) 28 messages, 4 authors, 2020-01-05

Re: [PATCH v2 10/10] usb: chipidea: tegra: Add USB_TEGRA_PHY module to driver's dependencies

From: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Date: 2020-01-03 07:25:43
Also in: linux-tegra, linux-usb, lkml

On Thu, Jan 02, 2020 at 06:17:47PM +0300, Dmitry Osipenko wrote:
31.12.2019 00:02, Michał Mirosław пишет:
quoted
On Tue, Dec 24, 2019 at 07:21:05AM +0300, Dmitry Osipenko wrote:
quoted
24.12.2019 00:32, Michał Mirosław пишет:
quoted
On Fri, Dec 20, 2019 at 07:31:08AM +0300, Dmitry Osipenko wrote:
quoted
20.12.2019 06:56, Peter Chen пишет:
quoted
On 19-12-20 04:52:38, Dmitry Osipenko wrote:
[...]
quoted
quoted
quoted
--- a/drivers/usb/chipidea/ci_hdrc_tegra.c
+++ b/drivers/usb/chipidea/ci_hdrc_tegra.c
@@ -53,6 +53,12 @@ static int tegra_udc_probe(struct platform_device *pdev)
 	struct tegra_udc *udc;
 	int err;
 
+	if (IS_MODULE(CONFIG_USB_TEGRA_PHY)) {
+		err = request_module("phy_tegra_usb");
+		if (err)
+			return err;
+	}
+
Why you do this dependency, if this controller driver can't
get USB PHY, it should return error. What's the return value
after calling below:

	udc->phy = devm_usb_get_phy_by_phandle(&pdev->dev, "nvidia,phy", 0);
It returns -EPROBE_DEFER when phy_tegra_usb isn't loaded.
How are other driver modules autoloaded? Isn't there an appropriate
MODALIAS or MODULE_DEVICE_TABLE in there?
Hello Michał,

The phy_tegra_usb module is fine by itself, it's getting autoloaded.

The problem is that ci_hdrc_tegra module depends on the phy_tegra_usb
module and thus the PHY module should be loaded before the CI module,
otherwise CI driver fails with the EPROBE_DEFER.
Why, then, is CI driver not being probed again after PHY driver loads?
EPROBE_DEFER is what should cause driver core to re-probe a device after
other devices appear (PHY in this case).
CI driver is getting re-probed just fine if PHY's driver module is
loaded manually after loading the CI's module. This patch removes this
necessity to manually load PHY's module.

This is just a minor convenience change that brings the CI's driver
loading behaviour on par with the behaviour of loading Tegra's EHCI
driver module.
I fully understand the goal, but what I'm missing is that why this
doesn't work out of the box? If the PHY module is autoloaded, and so is
CI driver, and (as I understand) the driver's probe() correctly returns
EPROBE_DEFER when PHY is not probed yet, then I guess that means bug
somewhere else and the patch just covers it up.

Best Regards,
Michał Mirosław
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help