From: Roger Quadros <rogerq@ti.com>
To: Felipe Balbi <balbi@kernel.org>
Cc: tony@atomide.com, Joao.Pinto@synopsys.com,
sergei.shtylyov@cogentembedded.com, peter.chen@freescale.com,
jun.li@freescale.com, grygorii.strashko@ti.com,
yoshihiro.shimoda.uh@renesas.com, nsekhar@ti.com, b-liu@ti.com,
linux-usb@vger.kernel.org, linux-omap@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v7 5/5] usb: dwc3: core: cleanup IRQ resources
Date: Tue, 10 May 2016 13:10:29 +0300 [thread overview]
Message-ID: <5731B395.4010201@ti.com> (raw)
In-Reply-To: <877ff2i61f.fsf@linux.intel.com>
On 10/05/16 13:03, Felipe Balbi wrote:
>
> Hi,
>
> Roger Quadros <rogerq@ti.com> writes:
>> Implementations might use different IRQs for
>> host, gadget and OTG so use named interrupt resources
>> to allow Device tree to specify the 3 interrupts.
>>
>> Following are the interrupt names
>>
>> Peripheral Interrupt - peripheral
>> HOST Interrupt - host
>> OTG Interrupt - otg
>>
>> We still maintain backward compatibility for a single named
>> interrupt for all 3 interrupts (e.g. for dwc3-pci) and
>> single unnamed interrupt for all 3 interrupts (e.g. old DT).
>
> cool :-)
>
>> @@ -748,6 +750,20 @@ static int dwc3_core_init_mode(struct dwc3 *dwc)
>> }
>> break;
>> case USB_DR_MODE_OTG:
>> + dwc->otg_irq = platform_get_irq_byname(dwc3_pdev, "otg");
>> + if (dwc->otg_irq <= 0) {
>> + dwc->otg_irq = platform_get_irq_byname(dwc3_pdev,
>> + "dwc_usb3");
>> + if (dwc->otg_irq <= 0) {
>> + res = platform_get_resource(dwc3_pdev,
>> + IORESOURCE_IRQ, 0);
>> + if (!res) {
>> + dev_err(dwc->dev, "missing otg IRQ\n");
>> + return -ENODEV;
>> + }
>> + dwc->otg_irq = res->start;
>> + }
>> + }
>
> I suppose this part can be removed and added only when OTG is
> supported. Then dwc3_otg_init() (or whatever) can do this.
Sure.
>
>> diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
>> index 186a886..2e20892 100644
>> --- a/drivers/usb/dwc3/core.h
>> +++ b/drivers/usb/dwc3/core.h
>> @@ -716,6 +716,8 @@ struct dwc3_scratchpad_array {
>> * @maximum_speed: maximum speed requested (mainly for testing purposes)
>> * @revision: revision register contents
>> * @dr_mode: requested mode of operation
>> + * @gadget_irq: IRQ number for Peripheral IRQs
>> + * @otg_irq: IRQ number for OTG IRQs
>> * @usb2_phy: pointer to USB2 PHY
>> * @usb3_phy: pointer to USB3 PHY
>> * @usb2_generic_phy: pointer to USB2 PHY
>> @@ -817,6 +819,9 @@ struct dwc3 {
>>
>> enum usb_dr_mode dr_mode;
>>
>> + int gadget_irq;
>> + int otg_irq;
>
> while at that, let's add host_irq too and do proper changes to dwc3/host.c
Sure. So we add host_irq here, and manually create an irq resource
in dwc3_host_init?
>
>> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
>> index c3b0d01..8db8d13 100644
>> --- a/drivers/usb/dwc3/gadget.c
>> +++ b/drivers/usb/dwc3/gadget.c
>> @@ -1605,7 +1605,7 @@ static int dwc3_gadget_start(struct usb_gadget *g,
>> int irq;
>> u32 reg;
>>
>> - irq = platform_get_irq(to_platform_device(dwc->dev), 0);
>> + irq = dwc->gadget_irq;
>> ret = request_threaded_irq(irq, dwc3_interrupt, dwc3_thread_interrupt,
>> IRQF_SHARED, "dwc3", dwc->ev_buf);
>> if (ret) {
>> @@ -2781,6 +2781,23 @@ static irqreturn_t dwc3_interrupt(int irq, void *_evt)
>> int dwc3_gadget_init(struct dwc3 *dwc)
>> {
>> int ret;
>> + struct resource *res;
>> + struct platform_device *dwc3_pdev = to_platform_device(dwc->dev);
>> +
>> + dwc->gadget_irq = platform_get_irq_byname(dwc3_pdev, "peripheral");
>> + if (dwc->gadget_irq <= 0) {
>> + dwc->gadget_irq = platform_get_irq_byname(dwc3_pdev,
>> + "dwc_usb3");
>> + if (dwc->gadget_irq <= 0) {
>> + res = platform_get_resource(dwc3_pdev, IORESOURCE_IRQ,
>> + 0);
>> + if (!res) {
>> + dev_err(dwc->dev, "missing peripheral IRQ\n");
>> + return -ENODEV;
>> + }
>> + dwc->gadget_irq = res->start;
>> + }
>> + }
>>
>> dwc->ctrl_req = dma_alloc_coherent(dwc->dev, sizeof(*dwc->ctrl_req),
>> &dwc->ctrl_req_addr, GFP_KERNEL);
>
> you're regressing dwc3_gadget_stop().
>
ah, good catch.
cheers,
-roger
WARNING: multiple messages have this Message-ID (diff)
From: Roger Quadros <rogerq@ti.com>
To: Felipe Balbi <balbi@kernel.org>
Cc: <tony@atomide.com>, <Joao.Pinto@synopsys.com>,
<sergei.shtylyov@cogentembedded.com>, <peter.chen@freescale.com>,
<jun.li@freescale.com>, <grygorii.strashko@ti.com>,
<yoshihiro.shimoda.uh@renesas.com>, <nsekhar@ti.com>,
<b-liu@ti.com>, <linux-usb@vger.kernel.org>,
<linux-omap@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v7 5/5] usb: dwc3: core: cleanup IRQ resources
Date: Tue, 10 May 2016 13:10:29 +0300 [thread overview]
Message-ID: <5731B395.4010201@ti.com> (raw)
In-Reply-To: <877ff2i61f.fsf@linux.intel.com>
On 10/05/16 13:03, Felipe Balbi wrote:
>
> Hi,
>
> Roger Quadros <rogerq@ti.com> writes:
>> Implementations might use different IRQs for
>> host, gadget and OTG so use named interrupt resources
>> to allow Device tree to specify the 3 interrupts.
>>
>> Following are the interrupt names
>>
>> Peripheral Interrupt - peripheral
>> HOST Interrupt - host
>> OTG Interrupt - otg
>>
>> We still maintain backward compatibility for a single named
>> interrupt for all 3 interrupts (e.g. for dwc3-pci) and
>> single unnamed interrupt for all 3 interrupts (e.g. old DT).
>
> cool :-)
>
>> @@ -748,6 +750,20 @@ static int dwc3_core_init_mode(struct dwc3 *dwc)
>> }
>> break;
>> case USB_DR_MODE_OTG:
>> + dwc->otg_irq = platform_get_irq_byname(dwc3_pdev, "otg");
>> + if (dwc->otg_irq <= 0) {
>> + dwc->otg_irq = platform_get_irq_byname(dwc3_pdev,
>> + "dwc_usb3");
>> + if (dwc->otg_irq <= 0) {
>> + res = platform_get_resource(dwc3_pdev,
>> + IORESOURCE_IRQ, 0);
>> + if (!res) {
>> + dev_err(dwc->dev, "missing otg IRQ\n");
>> + return -ENODEV;
>> + }
>> + dwc->otg_irq = res->start;
>> + }
>> + }
>
> I suppose this part can be removed and added only when OTG is
> supported. Then dwc3_otg_init() (or whatever) can do this.
Sure.
>
>> diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
>> index 186a886..2e20892 100644
>> --- a/drivers/usb/dwc3/core.h
>> +++ b/drivers/usb/dwc3/core.h
>> @@ -716,6 +716,8 @@ struct dwc3_scratchpad_array {
>> * @maximum_speed: maximum speed requested (mainly for testing purposes)
>> * @revision: revision register contents
>> * @dr_mode: requested mode of operation
>> + * @gadget_irq: IRQ number for Peripheral IRQs
>> + * @otg_irq: IRQ number for OTG IRQs
>> * @usb2_phy: pointer to USB2 PHY
>> * @usb3_phy: pointer to USB3 PHY
>> * @usb2_generic_phy: pointer to USB2 PHY
>> @@ -817,6 +819,9 @@ struct dwc3 {
>>
>> enum usb_dr_mode dr_mode;
>>
>> + int gadget_irq;
>> + int otg_irq;
>
> while at that, let's add host_irq too and do proper changes to dwc3/host.c
Sure. So we add host_irq here, and manually create an irq resource
in dwc3_host_init?
>
>> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
>> index c3b0d01..8db8d13 100644
>> --- a/drivers/usb/dwc3/gadget.c
>> +++ b/drivers/usb/dwc3/gadget.c
>> @@ -1605,7 +1605,7 @@ static int dwc3_gadget_start(struct usb_gadget *g,
>> int irq;
>> u32 reg;
>>
>> - irq = platform_get_irq(to_platform_device(dwc->dev), 0);
>> + irq = dwc->gadget_irq;
>> ret = request_threaded_irq(irq, dwc3_interrupt, dwc3_thread_interrupt,
>> IRQF_SHARED, "dwc3", dwc->ev_buf);
>> if (ret) {
>> @@ -2781,6 +2781,23 @@ static irqreturn_t dwc3_interrupt(int irq, void *_evt)
>> int dwc3_gadget_init(struct dwc3 *dwc)
>> {
>> int ret;
>> + struct resource *res;
>> + struct platform_device *dwc3_pdev = to_platform_device(dwc->dev);
>> +
>> + dwc->gadget_irq = platform_get_irq_byname(dwc3_pdev, "peripheral");
>> + if (dwc->gadget_irq <= 0) {
>> + dwc->gadget_irq = platform_get_irq_byname(dwc3_pdev,
>> + "dwc_usb3");
>> + if (dwc->gadget_irq <= 0) {
>> + res = platform_get_resource(dwc3_pdev, IORESOURCE_IRQ,
>> + 0);
>> + if (!res) {
>> + dev_err(dwc->dev, "missing peripheral IRQ\n");
>> + return -ENODEV;
>> + }
>> + dwc->gadget_irq = res->start;
>> + }
>> + }
>>
>> dwc->ctrl_req = dma_alloc_coherent(dwc->dev, sizeof(*dwc->ctrl_req),
>> &dwc->ctrl_req_addr, GFP_KERNEL);
>
> you're regressing dwc3_gadget_stop().
>
ah, good catch.
cheers,
-roger
next prev parent reply other threads:[~2016-05-10 10:10 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-10 9:51 [PATCH v7 0/5] dwc3: omap: fixes and dual-role preparation Roger Quadros
2016-05-10 9:51 ` Roger Quadros
2016-05-10 9:51 ` [PATCH v7 1/5] usb: dwc3: omap: use request_threaded_irq() Roger Quadros
2016-05-10 9:51 ` Roger Quadros
[not found] ` <1462873919-20532-2-git-send-email-rogerq-l0cyMroinI0@public.gmane.org>
2016-05-10 9:58 ` Felipe Balbi
2016-05-10 9:58 ` Felipe Balbi
2016-05-10 10:04 ` Roger Quadros
2016-05-10 10:04 ` Roger Quadros
2016-05-10 10:12 ` Felipe Balbi
[not found] ` <87y47igr1g.fsf-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2016-05-10 10:21 ` Roger Quadros
2016-05-10 10:21 ` Roger Quadros
2016-05-11 8:17 ` Roger Quadros
2016-05-11 8:17 ` Roger Quadros
2016-05-11 9:47 ` Felipe Balbi
2016-05-11 11:46 ` Roger Quadros
2016-05-11 11:46 ` Roger Quadros
2016-05-11 12:39 ` Felipe Balbi
2016-05-11 13:52 ` Roger Quadros
2016-05-11 13:52 ` Roger Quadros
2016-05-10 9:51 ` [PATCH v7 2/5] usb: dwc3: omap: Mark the interrupt handler as shared Roger Quadros
2016-05-10 9:51 ` Roger Quadros
2016-05-10 9:51 ` [PATCH v7 3/5] usb: dwc3: omap: Don't set POWERPRESENT Roger Quadros
2016-05-10 9:51 ` Roger Quadros
[not found] ` <1462873919-20532-4-git-send-email-rogerq-l0cyMroinI0@public.gmane.org>
2016-05-10 9:54 ` Felipe Balbi
2016-05-10 9:54 ` Felipe Balbi
2016-05-10 9:59 ` Roger Quadros
2016-05-10 9:59 ` Roger Quadros
2016-05-10 10:04 ` Felipe Balbi
2016-05-10 10:23 ` Roger Quadros
2016-05-10 10:23 ` Roger Quadros
2016-05-10 10:33 ` Felipe Balbi
2016-05-10 10:24 ` Roger Quadros
2016-05-10 10:24 ` Roger Quadros
2016-05-10 9:51 ` [PATCH v7 4/5] usb: dwc3: omap: Pass VBUS and ID events transparently Roger Quadros
2016-05-10 9:51 ` Roger Quadros
[not found] ` <1462873919-20532-5-git-send-email-rogerq-l0cyMroinI0@public.gmane.org>
2016-05-10 9:55 ` Felipe Balbi
2016-05-10 9:55 ` Felipe Balbi
2016-05-10 10:00 ` Roger Quadros
2016-05-10 10:00 ` Roger Quadros
2016-05-10 10:05 ` Felipe Balbi
[not found] ` <871t5ai5ye.fsf-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2016-05-10 10:13 ` Roger Quadros
2016-05-10 10:13 ` Roger Quadros
2016-05-10 10:13 ` Felipe Balbi
2016-05-10 9:51 ` [PATCH v7 5/5] usb: dwc3: core: cleanup IRQ resources Roger Quadros
2016-05-10 9:51 ` Roger Quadros
2016-05-10 10:03 ` Felipe Balbi
2016-05-10 10:03 ` Felipe Balbi
2016-05-10 10:10 ` Roger Quadros [this message]
2016-05-10 10:10 ` Roger Quadros
2016-05-10 10:14 ` Felipe Balbi
[not found] ` <87shxqgqyw.fsf-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2016-05-10 11:45 ` Roger Quadros
2016-05-10 11:45 ` Roger Quadros
2016-05-10 11:48 ` Felipe Balbi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5731B395.4010201@ti.com \
--to=rogerq@ti.com \
--cc=Joao.Pinto@synopsys.com \
--cc=b-liu@ti.com \
--cc=balbi@kernel.org \
--cc=grygorii.strashko@ti.com \
--cc=jun.li@freescale.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=nsekhar@ti.com \
--cc=peter.chen@freescale.com \
--cc=sergei.shtylyov@cogentembedded.com \
--cc=tony@atomide.com \
--cc=yoshihiro.shimoda.uh@renesas.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.