From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [RFC,v2,05/15] usb:cdns3: Added DRD support From: Roger Quadros Message-Id: <5BFBBF65.7090204@ti.com> Date: Mon, 26 Nov 2018 11:39:49 +0200 To: Pawel Laszczak , "devicetree@vger.kernel.org" Cc: "gregkh@linuxfoundation.org" , "linux-usb@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Alan Douglas , "jbergsagel@ti.com" , "nsekhar@ti.com" , "nm@ti.com" , Suresh Punnoose , "peter.chen@nxp.com" , Pawel Jez , Rahul Kumar List-ID: T24gMjYvMTEvMTggMTA6MzksIFBhd2VsIExhc3pjemFrIHdyb3RlOgo+Pgo+PiBQYXdlbCwKPj4K Pj4gT24gMjYvMTEvMTggMDk6MjMsIFBhd2VsIExhc3pjemFrIHdyb3RlOgo+Pj4gSGkgUm9nZXIs Cj4+Pgo+Pj4+IE9uIDE4LzExLzE4IDEyOjA5LCBQYXdlbCBMYXN6Y3phayB3cm90ZToKPj4+Pj4g UGF0Y2ggYWRkcyBzdXBwb3J0cyBmb3IgZGV0ZWN0aW5nIEhvc3QvRGV2aWNlIG1vZGUuCj4+Pj4+ IENvbnRyb2xsZXIgaGFzIGFkZGl0aW9uYWwgT1RHIHJlZ2lzdGVyIHRoYXQgYWxsb3cKPj4+Pj4g aW1wbGVtZW50IGV2ZW4gd2hvbGUgT1RHIGZ1bmN0aW9uYWxpdHkuCj4+Pj4+IEF0IHRoaXMgbW9t ZW50IHBhdGNoIGFkZHMgc3VwcG9ydCBvbmx5IGZvciBkZXRlY3RpbmcKPj4+Pj4gdGhlIGFwcHJv cHJpYXRlIG1vZGUgYmFzZWQgb24gc3RyYXAgcGlucyBhbmQgSUQgcGluLgo+Pj4+Pgo+Pj4+PiBT aWduZWQtb2ZmLWJ5OiBQYXdlbCBMYXN6Y3phayA8cGF3ZWxsQGNhZGVuY2UuY29tPgo+Pj4+PiAt LS0KPj4+Pj4gIGRyaXZlcnMvdXNiL2NkbnMzL01ha2VmaWxlIHwgICAyICstCj4+Pj4+ICBkcml2 ZXJzL3VzYi9jZG5zMy9jb3JlLmMgICB8ICAyNyArKystLQo+Pj4+PiAgZHJpdmVycy91c2IvY2Ru czMvZHJkLmMgICAgfCAyMjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ Pj4+PiAgZHJpdmVycy91c2IvY2RuczMvZHJkLmggICAgfCAxMjIgKysrKysrKysrKysrKysrKysr KysKPj4+Pj4gIDQgZmlsZXMgY2hhbmdlZCwgMzcyIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25z KC0pCj4+Pj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvY2RuczMvZHJkLmMKPj4+ Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9kcmQuaAo+Pj4+Pgo+Pj4+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2RuczMvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9j ZG5zMy9NYWtlZmlsZQo+Pj4+PiBpbmRleCAwMmQyNWIyM2M1ZDMuLmU3NzliMmEyZjhlYiAxMDA2 NDQKPj4+Pj4gLS0tIGEvZHJpdmVycy91c2IvY2RuczMvTWFrZWZpbGUKPj4+Pj4gKysrIGIvZHJp dmVycy91c2IvY2RuczMvTWFrZWZpbGUKPj4+Pj4gQEAgLTEsNSArMSw1IEBACj4+Pj4+ICBvYmot JChDT05GSUdfVVNCX0NETlMzKQkJCSs9IGNkbnMzLm8KPj4+Pj4gIG9iai0kKENPTkZJR19VU0Jf Q0ROUzNfUENJX1dSQVApCSs9IGNkbnMzLXBjaS5vCj4+Pj4+Cj4+Pj4+IC1jZG5zMy15CQkJCQk6 PSBjb3JlLm8KPj4+Pj4gK2NkbnMzLXkJCQkJCTo9IGNvcmUubyBkcmQubwo+Pj4+PiAgY2RuczMt cGNpLXkJCSAJCTo9IGNkbnMzLXBjaS13cmFwLm8KPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv dXNiL2NkbnMzL2NvcmUuYyBiL2RyaXZlcnMvdXNiL2NkbnMzL2NvcmUuYwo+Pj4+PiBpbmRleCBm OTA1NWQ0ZGE2N2YuLmRiZWU0MzI1ZGE3ZiAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJpdmVycy91c2Iv Y2RuczMvY29yZS5jCj4+Pj4+ICsrKyBiL2RyaXZlcnMvdXNiL2NkbnMzL2NvcmUuYwo+Pj4+PiBA QCAtMTcsNiArMTcsNyBAQAo+Pj4+Pgo+Pj4+PiAgI2luY2x1ZGUgImdhZGdldC5oIgo+Pj4+PiAg I2luY2x1ZGUgImNvcmUuaCIKPj4+Pj4gKyNpbmNsdWRlICJkcmQuaCIKPj4+Pj4KPj4+Pj4gIHN0 YXRpYyBpbmxpbmUgc3RydWN0IGNkbnMzX3JvbGVfZHJpdmVyICpjZG5zM19nZXRfY3VycmVudF9y b2xlX2RyaXZlcihzdHJ1Y3QgY2RuczMgKmNkbnMpCj4+Pj4+ICB7Cj4+Pj4+IEBAIC01Nyw4ICs1 OCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2RuczNfcm9sZV9zdG9wKHN0cnVjdCBjZG5zMyAq Y2RucykKPj4+Pj4gIHN0YXRpYyBlbnVtIGNkbnMzX3JvbGVzIGNkbnMzX2dldF9yb2xlKHN0cnVj dCBjZG5zMyAqY2RucykKPj4+Pj4gIHsKPj4+Pj4gIAlpZiAoY2Rucy0+cm9sZXNbQ0ROUzNfUk9M RV9IT1NUXSAmJiBjZG5zLT5yb2xlc1tDRE5TM19ST0xFX0dBREdFVF0pIHsKPj4+Pj4gLQkJLy9U T0RPOiBpbXBsZW1lbnRzIHNlbGVjdGluZyBkZXZpY2UvaG9zdCBtb2RlCj4+Pj4+IC0JCXJldHVy biBDRE5TM19ST0xFX0hPU1Q7Cj4+Pj4+ICsJCWlmIChjZG5zM19pc19ob3N0KGNkbnMpKQo+Pj4+ PiArCQkJcmV0dXJuIENETlMzX1JPTEVfSE9TVDsKPj4+Pj4gKwkJaWYgKGNkbnMzX2lzX2Rldmlj ZShjZG5zKSkKPj4+Pj4gKwkJCXJldHVybiBDRE5TM19ST0xFX0dBREdFVDsKPj4+Pj4gIAl9Cj4+ Pj4+ICAJcmV0dXJuIGNkbnMtPnJvbGVzW0NETlMzX1JPTEVfSE9TVF0KPj4+Pj4gIAkJPyBDRE5T M19ST0xFX0hPU1QKPj4+Pj4gQEAgLTEyNCw2ICsxMjcsMTIgQEAgc3RhdGljIGlycXJldHVybl90 IGNkbnMzX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQo+Pj4+PiAgCXN0cnVjdCBjZG5zMyAqY2Ru cyA9IGRhdGE7Cj4+Pj4+ICAJaXJxcmV0dXJuX3QgcmV0ID0gSVJRX05PTkU7Cj4+Pj4+Cj4+Pj4+ ICsJaWYgKGNkbnMtPmRyX21vZGUgPT0gVVNCX0RSX01PREVfT1RHKSB7Cj4+Pj4+ICsJCXJldCA9 IGNkbnMzX2RyZF9pcnEoY2Rucyk7Cj4+Pj4+ICsJCWlmIChyZXQgPT0gSVJRX0hBTkRMRUQpCj4+ Pj4+ICsJCQlyZXR1cm4gcmV0Owo+Pj4+PiArCX0KPj4+Pgo+Pj4+IFRoZSBrZXJuZWwncyBzaGFy ZWQgSVJRIG1vZGVsIHRha2VzIGNhcmUgb2Ygc2hhcmluZyB0aGUgc2FtZSBpbnRlcnJ1cHQKPj4+ PiBiZXR3ZWVuIGRpZmZlcmVudCBkZXZpY2VzIGFuZCB0aGVpciBkcml2ZXJzLiBZb3UgZG9uJ3Qg bmVlZCB0byBtYW51YWxseQo+Pj4+IGhhbmRsZSBpdCBoZXJlLiBKdXN0IGxldCBhbGwgMyBkcml2 ZXJzIGRvIGEgcmVxdWVzdF9pcnEoKSBhbmQgaGF2ZQo+Pj4+IGhhbmRsZXJzIGNoZWNrIGlmIHRo ZSBJUlEgd2FzIHRoZWlycyBvciBub3QgYW5kIHJldHVybiBJUlFfSEFORExFRCBvcgo+Pj4+IElS UV9OT05FIGFjY29yZGluZ2x5Lgo+Pj4+Cj4+Pj4gTG9va3MgbGlrZSB5b3UgY2FuIGRvIGF3YXkg d2l0aCBpcnEgbWVtYmVyIG9mIHRoZSByb2xlIGRyaXZlciBzdHJ1Y3QuCj4+Pgo+Pj4gT2ssIEkg d2lsbCBzcGxpdCBpdCBpbnRvIDMgc2VwYXJhdGUgcGFydCwgYnV0IGluIHRoaXMgY2FzZSwgSSBh ZGRpdGlvbmFsbHkgaGF2ZSB0byBjaGVjayB0aGUgY3VycmVudAo+Pj4gcm9sZSBpbiBJU1IgZnVu Y3Rpb24uIERyaXZlciBjYW4ndCByZWFkIGhvc3Qgc2lkZSByZWdpc3RlcnMgd2hlbiBjb250cm9s bGVyIHdvcmtzIGluIGRldmljZSByb2xlCj4+PiBhbmQgdmljZSB2ZXJzYS4gT25lIHBhcnQgb2Yg Y29udHJvbGxlciBpcyBrZXB0IGluIHJlc2V0LiBPbmx5IERSRCByZWdpc3RlcnMgYXJlIGNvbW1v biBhbmQgYXJlIGFsbCBhY2Nlc3NpYmxlLgo+Pj4KPj4KPj4gSW4gd2hpY2ggSVNSIGRvIHlvdSBu ZWVkIHRvIGNoZWNrIGN1cnJlbnQgcm9sZT8KPj4KPj4gSSdtIG5vdCBzdXJlIGlmIHdlIGFyZSBv biB0aGUgc2FtZSBwYWdlLgo+PiBDb3JlIChkcmQpIGRyaXZlciBzaG91bGRuJ3QgcmVhZCBob3N0 L2RldmljZSBzaWRlIHJlZ2lzdGVycy4gQWxsIDMgZHJpdmVycywKPj4gaS5lLiBEUkQoY29yZSks IEhvc3QgKHhoY2kpIGFuZCBkZXZpY2UgKGNkbnMzKSBzaG91bGQgZG8gYSByZXF1ZXN0X2lycSgp Cj4+IGFuZCBwcm9jZXNzIHRoZWlyIHJlc3BlY3RpdmUgSVJRIGV2ZW50cy4KPiAKPiBZZXMsIEkg dW5kZXJzdGFuZC4gCj4gSSBuZWVkIHRvIGNoZWNrIHRoaXMgaW4gY2RuczNfaXJxX2hhbmRsZXJf dGhyZWFkIGFuZCBjZG5zM19ob3N0X2lycS4KPiAKPiBDb3JlIChkcmQpIGhhcyByZWdpc3RlciB0 aGF0IGFyZSBhbHdheXMgYWNjZXNzaWJsZS4gCj4gQ29yZSAoZGV2aWNlKSAgLSByZWdpc3RlcnMg YXJlIGF2YWlsYWJsZSBhbHNvIGluIGRldmljZSBtb2RlCj4gQ29yZSAoaG9zdCkgIC0gcmVnaXN0 ZXJzICBhcmUgYXZhaWxhYmxlIG9ubHkgaW4gaG9zdCBtb2RlIAo+IAo+IFNvIHdlIGNhbiB1c2Ug c2VwYXJhdGUgcmVxdWVzdF9pcnEgIGZvciBkcmQsIGRldmljZSBhbmQgaG9zdCBzaWRlLCBidXQg Cj4gd2UgbmVlZCBlbnN1cmUgdGhhdCBpbiBob3N0IHNpZGUgZHJpdmVyIHdpbGwgbm90IHRvdWNo IHRoZSBkZXZpY2UgcmVnaXN0ZXIuIAoKVGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuIGFzIGhvc3Qg c2lkZSBkb2Vzbid0IGhhdmUgdmlzaWJpbGl0eSB0byBkZXZpY2UgcmVnaXN0ZXJzLgo+IAo+IFdl IGRvZXNuJ3Qga25vdyB0aGUgb3JkZXIgaW4gd2hpY2ggIHRoZSBzeXN0ZW0gd2lsbCBjYWxsIGlu dGVycnVwdHMgZnVuY3Rpb24gcmVsYXRlZCB0byAKPiAgdGhlIHNoYXJlZCBpbnRlcnJ1cHQgbGlu ZS4KCk9yZGVyIHNob3VsZG4ndCBtYXR0ZXIuIEVhY2ggdXNlciB3aWxsIGNoZWNrIGl0cyBvd24g ZXZlbnRzIHJldHVybiBJUlFfTk9ORSBpZiB0aGV5CmRpZG4ndCBjYXVzZSB0aGUgSVJRLgo+IAoK PHNuaXA+CgpjaGVlcnMsCi1yb2dlcgo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Quadros Subject: Re: [RFC PATCH v2 05/15] usb:cdns3: Added DRD support Date: Mon, 26 Nov 2018 11:39:49 +0200 Message-ID: <5BFBBF65.7090204@ti.com> References: <1542535751-16079-1-git-send-email-pawell@cadence.com> <1542535751-16079-6-git-send-email-pawell@cadence.com> <5BF8140C.7000605@ti.com> <5BFBA9BC.20306@ti.com> Mime-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org To: Pawel Laszczak , "devicetree@vger.kernel.org" Cc: "gregkh@linuxfoundation.org" , "linux-usb@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Alan Douglas , "jbergsagel@ti.com" , "nsekhar@ti.com" , "nm@ti.com" , Suresh Punnoose , "peter.chen@nxp.com" , Pawel Jez , Rahul Kumar List-Id: devicetree@vger.kernel.org On 26/11/18 10:39, Pawel Laszczak wrote: >> >> Pawel, >> >> On 26/11/18 09:23, Pawel Laszczak wrote: >>> Hi Roger, >>> >>>> On 18/11/18 12:09, Pawel Laszczak wrote: >>>>> Patch adds supports for detecting Host/Device mode. >>>>> Controller has additional OTG register that allow >>>>> implement even whole OTG functionality. >>>>> At this moment patch adds support only for detecting >>>>> the appropriate mode based on strap pins and ID pin. >>>>> >>>>> Signed-off-by: Pawel Laszczak >>>>> --- >>>>> drivers/usb/cdns3/Makefile | 2 +- >>>>> drivers/usb/cdns3/core.c | 27 +++-- >>>>> drivers/usb/cdns3/drd.c | 229 +++++++++++++++++++++++++++++++++++++ >>>>> drivers/usb/cdns3/drd.h | 122 ++++++++++++++++++++ >>>>> 4 files changed, 372 insertions(+), 8 deletions(-) >>>>> create mode 100644 drivers/usb/cdns3/drd.c >>>>> create mode 100644 drivers/usb/cdns3/drd.h >>>>> >>>>> diff --git a/drivers/usb/cdns3/Makefile b/drivers/usb/cdns3/Makefile >>>>> index 02d25b23c5d3..e779b2a2f8eb 100644 >>>>> --- a/drivers/usb/cdns3/Makefile >>>>> +++ b/drivers/usb/cdns3/Makefile >>>>> @@ -1,5 +1,5 @@ >>>>> obj-$(CONFIG_USB_CDNS3) += cdns3.o >>>>> obj-$(CONFIG_USB_CDNS3_PCI_WRAP) += cdns3-pci.o >>>>> >>>>> -cdns3-y := core.o >>>>> +cdns3-y := core.o drd.o >>>>> cdns3-pci-y := cdns3-pci-wrap.o >>>>> diff --git a/drivers/usb/cdns3/core.c b/drivers/usb/cdns3/core.c >>>>> index f9055d4da67f..dbee4325da7f 100644 >>>>> --- a/drivers/usb/cdns3/core.c >>>>> +++ b/drivers/usb/cdns3/core.c >>>>> @@ -17,6 +17,7 @@ >>>>> >>>>> #include "gadget.h" >>>>> #include "core.h" >>>>> +#include "drd.h" >>>>> >>>>> static inline struct cdns3_role_driver *cdns3_get_current_role_driver(struct cdns3 *cdns) >>>>> { >>>>> @@ -57,8 +58,10 @@ static inline void cdns3_role_stop(struct cdns3 *cdns) >>>>> static enum cdns3_roles cdns3_get_role(struct cdns3 *cdns) >>>>> { >>>>> if (cdns->roles[CDNS3_ROLE_HOST] && cdns->roles[CDNS3_ROLE_GADGET]) { >>>>> - //TODO: implements selecting device/host mode >>>>> - return CDNS3_ROLE_HOST; >>>>> + if (cdns3_is_host(cdns)) >>>>> + return CDNS3_ROLE_HOST; >>>>> + if (cdns3_is_device(cdns)) >>>>> + return CDNS3_ROLE_GADGET; >>>>> } >>>>> return cdns->roles[CDNS3_ROLE_HOST] >>>>> ? CDNS3_ROLE_HOST >>>>> @@ -124,6 +127,12 @@ static irqreturn_t cdns3_irq(int irq, void *data) >>>>> struct cdns3 *cdns = data; >>>>> irqreturn_t ret = IRQ_NONE; >>>>> >>>>> + if (cdns->dr_mode == USB_DR_MODE_OTG) { >>>>> + ret = cdns3_drd_irq(cdns); >>>>> + if (ret == IRQ_HANDLED) >>>>> + return ret; >>>>> + } >>>> >>>> The kernel's shared IRQ model takes care of sharing the same interrupt >>>> between different devices and their drivers. You don't need to manually >>>> handle it here. Just let all 3 drivers do a request_irq() and have >>>> handlers check if the IRQ was theirs or not and return IRQ_HANDLED or >>>> IRQ_NONE accordingly. >>>> >>>> Looks like you can do away with irq member of the role driver struct. >>> >>> Ok, I will split it into 3 separate part, but in this case, I additionally have to check the current >>> role in ISR function. Driver can't read host side registers when controller works in device role >>> and vice versa. One part of controller is kept in reset. Only DRD registers are common and are all accessible. >>> >> >> In which ISR do you need to check current role? >> >> I'm not sure if we are on the same page. >> Core (drd) driver shouldn't read host/device side registers. All 3 drivers, >> i.e. DRD(core), Host (xhci) and device (cdns3) should do a request_irq() >> and process their respective IRQ events. > > Yes, I understand. > I need to check this in cdns3_irq_handler_thread and cdns3_host_irq. > > Core (drd) has register that are always accessible. > Core (device) - registers are available also in device mode > Core (host) - registers are available only in host mode > > So we can use separate request_irq for drd, device and host side, but > we need ensure that in host side driver will not touch the device register. That should never happen as host side doesn't have visibility to device registers. > > We doesn't know the order in which the system will call interrupts function related to > the shared interrupt line. Order shouldn't matter. Each user will check its own events return IRQ_NONE if they didn't cause the IRQ. > cheers, -roger -- Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki