[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ZLpn5xEoZRJcNYT1@hovoldconsulting.com>
Date: Fri, 21 Jul 2023 13:11:35 +0200
From: Johan Hovold <johan@...nel.org>
To: Krishna Kurapati PSSNV <quic_kriskura@...cinc.com>
Cc: Bjorn Andersson <andersson@...nel.org>,
Konrad Dybcio <konrad.dybcio@...aro.org>,
Thinh Nguyen <Thinh.Nguyen@...opsys.com>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Philipp Zabel <p.zabel@...gutronix.de>,
Andy Gross <agross@...nel.org>,
Rob Herring <robh+dt@...nel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@...aro.org>,
Felipe Balbi <balbi@...nel.org>,
Wesley Cheng <quic_wcheng@...cinc.com>,
linux-usb@...r.kernel.org, linux-kernel@...r.kernel.org,
linux-arm-msm@...r.kernel.org, devicetree@...r.kernel.org,
quic_pkondeti@...cinc.com, quic_ppratap@...cinc.com,
quic_jackp@...cinc.com, quic_harshq@...cinc.com,
ahalaney@...hat.com, quic_shazhuss@...cinc.com
Subject: Re: [PATCH v9 06/10] usb: dwc3: qcom: Add support to read IRQ's
related to multiport
On Fri, Jul 21, 2023 at 03:05:36PM +0530, Krishna Kurapati PSSNV wrote:
> On 7/21/2023 2:51 PM, Johan Hovold wrote:
> > As I wrote above, I think you should instead add a common helper for
> > setting up all the interrupts for a port. For example, along the lines
> > of:
> >
> > dwc3_setup_port_irq(int index)
> > {
> > if (index == 0)
> > try non-mp name
> > else
> > generate mp name
> >
> > lookup and request hs irqs
> > lookup and request ss irq
> > lookup and request power irq
> > }
> >
> > dwc3_setup_irq()
> > {
> > determine if MP (num_ports)
> >
> > for each port
> > dwc3_setup_port_irq(port index)
> > }
> > The port irq helper can either be told using a second argument that this
> > is a non-mp controller, or you can first try looking up one of the
> > non-mp names.
> I think I did something similar. I prepared a helper to request IRQ in
> the patch and the main logic would reside in setup_irq where i would try
> and get IRQ's.
No, you only added a wrapper around request_irq() but no helper to
setup all irqs for a port, so that's not really similar.
> Irrespective of whether we are MP capable or not, how about we read all
> IRQ's like in the patch attached previously. And the implementation
> facilitates addition of ACPI to multiport also if required. I am just
> trying to cover all cases like this by declaring IRQ info in global section.
>
> static int dwc3_qcom_prep_irq(struct dwc3_qcom *qcom, char *irq_name,
> char *disp_name, int irq)
> {
> int ret;
>
> /* Keep wakeup interrupts disabled until suspend */
> irq_set_status_flags(irq, IRQ_NOAUTOEN);
> ret = devm_request_threaded_irq(/* Give inouts here*/);
> if (ret)
> dev_err(qcom->dev, "%s failed: %d\n", irq_name, ret);
>
> return ret;
> }
>
>
> static int dwc3_qcom_setup_irq(struct platform_device *pdev)
> {
> for (DP_IRQ[ i = 0-3] {
> try getting dp_irq_i using MP_IRQ strings
> if ((ret < 0) and (i == 0))
> try getting dp_irq_i using NON_MP_IRQ strings
>
> call prep_irq accordingly.
> }
>
> //Run same loop for DM and SS
> }
So again, the above is not setting up all irqs for a port in one place
which seems like the natural way to add support for multiport.
It should be possible to reuse a per-port setup function also for ACPI.
> The second patch was just enabling IRQ's for all ports to support wakeup.
>
> > My mailer discarded your second patch, but you cannot assume that the
> > devices connected to each port are of the same type (e.g. HS or SS)
> > based on what is connected to the first port.
> >
> Are you referring to enabling IRQ's for different ports before going to
> suspend ? Meaning get the speed of enum on each port and accordingly
> enable IRQ's ?
Exactly. That will be needed.
Johan
Powered by blists - more mailing lists