linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] usb: dwc3: qcom: Provide stubs for dwc3_qcom_read_usb2_speed function
@ 2022-08-01  7:00 Krishna Kurapati
  2022-08-02 16:33 ` Johan Hovold
  2022-08-08 13:00 ` Greg Kroah-Hartman
  0 siblings, 2 replies; 4+ messages in thread
From: Krishna Kurapati @ 2022-08-01  7:00 UTC (permalink / raw)
  To: Andy Gross, Bjorn Andersson, Konrad Dybcio, Felipe Balbi,
	Greg Kroah-Hartman, Philipp Zabel
  Cc: Randy Dunlap, linux-arm-msm, linux-usb, linux-kernel, Krishna Kurapati

Dwc3 Qcom driver makes use of usb_hub_find_child API in its efforts
to get speed of connected devices (HS/LS/FS) and enable interrupts
accordingly. usb_hub_find_child API is a part of usb core compiled
either into the kernel or as a module (CONFIG_USB= Y or M). In some
builds (make randconfig for i386) CONFIG_USB is not enabled and the
usb core is not compiled resulting in linking errors.

Provide stubs for dwc3_qcom_read_usb2_speed function to use
usb_hub_find_child API only if CONFIG_USB is enabled. Else return
USB_SPEED_UNKNOWN.

Fixes: 6895ea55c385 (usb: dwc3: qcom: Configure wakeup interrupts during suspend)
Reported-by: Randy Dunlap <rdunlap@infradead.org>
Suggested-by: Randy Dunlap <rdunlap@infradead.org>
Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com>
Acked-by: Randy Dunlap <rdunlap@infradead.org>
Tested-by: Randy Dunlap <rdunlap@infradead.org>
---
v2: Updated commit text to include cases when CONFIG_USB=m as well.

 drivers/usb/dwc3/dwc3-qcom.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/usb/dwc3/dwc3-qcom.c b/drivers/usb/dwc3/dwc3-qcom.c
index c5e482f..bd8dc5a 100644
--- a/drivers/usb/dwc3/dwc3-qcom.c
+++ b/drivers/usb/dwc3/dwc3-qcom.c
@@ -299,6 +299,7 @@ static void dwc3_qcom_interconnect_exit(struct dwc3_qcom *qcom)
 	icc_put(qcom->icc_path_apps);
 }
 
+#ifdef CONFIG_USB
 static enum usb_device_speed dwc3_qcom_read_usb2_speed(struct dwc3_qcom *qcom)
 {
 	struct dwc3 *dwc = platform_get_drvdata(qcom->dwc3);
@@ -318,6 +319,12 @@ static enum usb_device_speed dwc3_qcom_read_usb2_speed(struct dwc3_qcom *qcom)
 
 	return udev->speed;
 }
+#else
+static enum usb_device_speed dwc3_qcom_read_usb2_speed(struct dwc3_qcom *qcom)
+{
+	return USB_SPEED_UNKNOWN;
+}
+#endif
 
 static void dwc3_qcom_enable_wakeup_irq(int irq, unsigned int polarity)
 {
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] usb: dwc3: qcom: Provide stubs for dwc3_qcom_read_usb2_speed function
  2022-08-01  7:00 [PATCH v2] usb: dwc3: qcom: Provide stubs for dwc3_qcom_read_usb2_speed function Krishna Kurapati
@ 2022-08-02 16:33 ` Johan Hovold
  2022-08-04 15:20   ` Johan Hovold
  2022-08-08 13:00 ` Greg Kroah-Hartman
  1 sibling, 1 reply; 4+ messages in thread
From: Johan Hovold @ 2022-08-02 16:33 UTC (permalink / raw)
  To: Krishna Kurapati
  Cc: Andy Gross, Bjorn Andersson, Konrad Dybcio, Felipe Balbi,
	Greg Kroah-Hartman, Philipp Zabel, Randy Dunlap, linux-arm-msm,
	linux-usb, linux-kernel

On Mon, Aug 01, 2022 at 12:30:15PM +0530, Krishna Kurapati wrote:
> Dwc3 Qcom driver makes use of usb_hub_find_child API in its efforts
> to get speed of connected devices (HS/LS/FS) and enable interrupts
> accordingly.

> usb_hub_find_child API is a part of usb core compiled
> either into the kernel or as a module (CONFIG_USB= Y or M). In some
> builds (make randconfig for i386) CONFIG_USB is not enabled and the
> usb core is not compiled resulting in linking errors.

Please replace the above with something more succinct. Whether USB core
is built as a module or not is completely irrelevant. The problem is
that the qcom dwc3 driver can be built and used without host support. 

> Provide stubs for dwc3_qcom_read_usb2_speed function to use
> usb_hub_find_child API only if CONFIG_USB is enabled. Else return
> USB_SPEED_UNKNOWN.

The fact that you need to do this is an indication that something is
wrong with the current implementation. The glue driver shouldn't be
touching the host driver internal state directly like this.

As pointed out here:

	https://lore.kernel.org/all/20220802151404.1797-4-johan+linaro@kernel.org/

dwc3_qcom_read_usb2_speed() is indeed broken and currently triggers a
NULL-pointer dereference when the controller is used in peripheral mode.

But for now I guess something like this is needed even if we try to
avoid stubs in implementation files.

Johan

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] usb: dwc3: qcom: Provide stubs for dwc3_qcom_read_usb2_speed function
  2022-08-02 16:33 ` Johan Hovold
@ 2022-08-04 15:20   ` Johan Hovold
  0 siblings, 0 replies; 4+ messages in thread
From: Johan Hovold @ 2022-08-04 15:20 UTC (permalink / raw)
  To: Krishna Kurapati
  Cc: Andy Gross, Bjorn Andersson, Konrad Dybcio, Felipe Balbi,
	Greg Kroah-Hartman, Philipp Zabel, Randy Dunlap, linux-arm-msm,
	linux-usb, linux-kernel

On Tue, Aug 02, 2022 at 06:33:36PM +0200, Johan Hovold wrote:
> On Mon, Aug 01, 2022 at 12:30:15PM +0530, Krishna Kurapati wrote:
> > Dwc3 Qcom driver makes use of usb_hub_find_child API in its efforts
> > to get speed of connected devices (HS/LS/FS) and enable interrupts
> > accordingly.
> 
> > usb_hub_find_child API is a part of usb core compiled
> > either into the kernel or as a module (CONFIG_USB= Y or M). In some
> > builds (make randconfig for i386) CONFIG_USB is not enabled and the
> > usb core is not compiled resulting in linking errors.
> 
> Please replace the above with something more succinct. Whether USB core
> is built as a module or not is completely irrelevant. The problem is
> that the qcom dwc3 driver can be built and used without host support. 
> 
> > Provide stubs for dwc3_qcom_read_usb2_speed function to use
> > usb_hub_find_child API only if CONFIG_USB is enabled. Else return
> > USB_SPEED_UNKNOWN.
> 
> The fact that you need to do this is an indication that something is
> wrong with the current implementation. The glue driver shouldn't be
> touching the host driver internal state directly like this.
> 
> As pointed out here:
> 
> 	https://lore.kernel.org/all/20220802151404.1797-4-johan+linaro@kernel.org/
> 
> dwc3_qcom_read_usb2_speed() is indeed broken and currently triggers a
> NULL-pointer dereference when the controller is used in peripheral mode.
> 
> But for now I guess something like this is needed even if we try to
> avoid stubs in implementation files.

This is how I think this should be fixed instead:

	https://lore.kernel.org/all/20220804151001.23612-4-johan+linaro@kernel.org/

and which keeps the ifdeffery minimal. I included the patch in v2 of the
series that addresses the other problems with this code.

Johan

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] usb: dwc3: qcom: Provide stubs for dwc3_qcom_read_usb2_speed function
  2022-08-01  7:00 [PATCH v2] usb: dwc3: qcom: Provide stubs for dwc3_qcom_read_usb2_speed function Krishna Kurapati
  2022-08-02 16:33 ` Johan Hovold
@ 2022-08-08 13:00 ` Greg Kroah-Hartman
  1 sibling, 0 replies; 4+ messages in thread
From: Greg Kroah-Hartman @ 2022-08-08 13:00 UTC (permalink / raw)
  To: Krishna Kurapati
  Cc: Andy Gross, Bjorn Andersson, Konrad Dybcio, Felipe Balbi,
	Philipp Zabel, Randy Dunlap, linux-arm-msm, linux-usb,
	linux-kernel

On Mon, Aug 01, 2022 at 12:30:15PM +0530, Krishna Kurapati wrote:
> Dwc3 Qcom driver makes use of usb_hub_find_child API in its efforts
> to get speed of connected devices (HS/LS/FS) and enable interrupts
> accordingly. usb_hub_find_child API is a part of usb core compiled
> either into the kernel or as a module (CONFIG_USB= Y or M). In some
> builds (make randconfig for i386) CONFIG_USB is not enabled and the
> usb core is not compiled resulting in linking errors.
> 
> Provide stubs for dwc3_qcom_read_usb2_speed function to use
> usb_hub_find_child API only if CONFIG_USB is enabled. Else return
> USB_SPEED_UNKNOWN.
> 
> Fixes: 6895ea55c385 (usb: dwc3: qcom: Configure wakeup interrupts during suspend)
> Reported-by: Randy Dunlap <rdunlap@infradead.org>
> Suggested-by: Randy Dunlap <rdunlap@infradead.org>
> Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com>
> Acked-by: Randy Dunlap <rdunlap@infradead.org>
> Tested-by: Randy Dunlap <rdunlap@infradead.org>
> ---
> v2: Updated commit text to include cases when CONFIG_USB=m as well.
> 
>  drivers/usb/dwc3/dwc3-qcom.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/drivers/usb/dwc3/dwc3-qcom.c b/drivers/usb/dwc3/dwc3-qcom.c
> index c5e482f..bd8dc5a 100644
> --- a/drivers/usb/dwc3/dwc3-qcom.c
> +++ b/drivers/usb/dwc3/dwc3-qcom.c
> @@ -299,6 +299,7 @@ static void dwc3_qcom_interconnect_exit(struct dwc3_qcom *qcom)
>  	icc_put(qcom->icc_path_apps);
>  }
>  
> +#ifdef CONFIG_USB

How is code for a USB host driver being built if CONFIG_USB is not
enabled?

Shouldn't this driver be split up cleaner to not be built at all if that
is not happening and this is a gadget-only configuration?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-08-08 13:01 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-01  7:00 [PATCH v2] usb: dwc3: qcom: Provide stubs for dwc3_qcom_read_usb2_speed function Krishna Kurapati
2022-08-02 16:33 ` Johan Hovold
2022-08-04 15:20   ` Johan Hovold
2022-08-08 13:00 ` Greg Kroah-Hartman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).