From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kever Yang Subject: Re: [PATCH v2 07/10] usb: dwc3: Add phy interface for dwc3_uboot Date: Sat, 23 Nov 2019 22:21:45 +0800 Message-ID: <44578402-9771-0458-6110-bb41f8de708c@rock-chips.com> References: <20191119082623.6165-1-jagan@amarulasolutions.com> <20191119082623.6165-8-jagan@amarulasolutions.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20191119082623.6165-8-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+glpar-linux-rockchip=m.gmane.org-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org To: Jagan Teki , Simon Glass , Philipp Tomsich Cc: Marek Vasut , u-boot-0aAXYlwwYIKGBzrmiIFOJg@public.gmane.org, Levin Du , linux-amarula-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org, linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org List-Id: linux-rockchip.vger.kernel.org Ck9uIDIwMTkvMTEvMTkg5LiL5Y2INDoyNiwgSmFnYW4gVGVraSB3cm90ZToKPiBVLUJvb3QgaGFz IHR3byBkaWZmZXJlbnQgdmFyaWFudHMgb2YgZHdjMyBpbml0aWFsaXphdGlvbnMsCj4gLSB3aXRo IGRtIHZhcmlhbnQgZ2FkZ2V0LCBzbyB0aGUgcmVzcGVjdGl2ZSBkbSBkcml2ZXIgd291bGQKPiAg ICBjYWxsIHRoZSBkd2MzX2luaXQgaW4gY29yZS4KPiAtIHdpdGggbm9uLWRtIHZhcmlhbnQgZ2Fk Z2V0LCBzbyB0aGUgdXNhZ2UgYm9hcmQgZmlsZSB3b3VsZAo+ICAgIGNhbGwgZHdjM191Ym9vdF9p bml0IGluIGNvcmUuCj4KPiBUaGUgZHJpdmVyIHByb2JlIHdvdWxkIGhhbmRsZSBhbGwgcmVzcGVj dGl2ZSBnYWRnZXQgcHJvcGVydGllcwo+IGluY2x1ZGluZyBwaHkgaW50ZXJmYWNlIHZpYSBwaHlf dHlwZSBwcm9wZXJ0eSBhbmQgdGhlbiB0cmlnZ2VyCj4gZHdjM19pbml0IGZvciBkbS12YXJpYW50 IGdhZGdldHMuCj4KPiBTbywgdG8gc3VwcG9ydCB0aGUgcGh5IGludGVyZmFjZSBmb3Igbm9uLWRt IHZhcmlhbnQgZ2FkZ2V0cywKPiB0aGUgYmV0dGVyIG9wdGlvbiBpcyBkd2MzX3Vib290X2luaXQg c2luY2UgdGhlcmUgaXMgbm8KPiBkZWRpY2F0ZWQgY29udHJvbGxlciBmb3Igbm9uLWRtIHZhcmlh bnQgZ2FkZ2V0cy4KPgo+IFRoaXMgcGF0Y2ggc3VwcG9ydCBmb3IgYWRkaW5nIHBoeSBpbnRlcmZh Y2UgbGlrZSA4LzE2LWJpdCBVVE1JKwo+IGNvZGUgZm9yIGR3YzNfdWJvb3QuCj4KPiBUaGlzIGNo YW5nZSB1c2VkIExpbnV4IHBoeS5oIGVudW0gbGlzdCwgdG8gbWFrZSBwcm9wZXIgY29kZQo+IGNv bXBhdGliaWxpdHkuCj4KPiBDYzogTWFyZWsgVmFzdXQgPG1hcmV4QGRlbnguZGU+Cj4gVGVzdGVk LWJ5OiBMZXZpbiBEdSA8ZGp3QHQtY2hpcC5jb20uY24+Cj4gU2lnbmVkLW9mZi1ieTogSmFnYW4g VGVraSA8amFnYW5AYW1hcnVsYXNvbHV0aW9ucy5jb20+CgpSZXZpZXdlZC1ieTogS2V2ZXIgWWFu ZyA8a2V2ZXIueWFuZ0Byb2NrLWNoaXBzLmNvbT4KClRoYW5rcywKLSBLZXZlcgo+IC0tLQo+ICAg ZHJpdmVycy91c2IvZHdjMy9jb3JlLmMgfCAyNyArKysrKysrKysrKysrKysrKysrKysrKysrKysK PiAgIGRyaXZlcnMvdXNiL2R3YzMvY29yZS5oIHwgMTIgKysrKysrKysrKysrCj4gICBpbmNsdWRl L2R3YzMtdWJvb3QuaCAgICB8ICAyICsrCj4gICBpbmNsdWRlL2xpbnV4L3VzYi9waHkuaCB8IDE5 ICsrKysrKysrKysrKysrKysrKysKPiAgIDQgZmlsZXMgY2hhbmdlZCwgNjAgaW5zZXJ0aW9ucygr KQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvdXNiL3BoeS5oCj4KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMy9jb3JlLmMgYi9kcml2ZXJzL3VzYi9kd2MzL2NvcmUu Ywo+IGluZGV4IDIzYWY2MGM5OGQuLmY3Nzk1NjJkZTIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy91 c2IvZHdjMy9jb3JlLmMKPiArKysgYi9kcml2ZXJzL3VzYi9kd2MzL2NvcmUuYwo+IEBAIC02MTMs NiArNjEzLDMxIEBAIHN0YXRpYyB2b2lkIGR3YzNfY29yZV9leGl0X21vZGUoc3RydWN0IGR3YzMg KmR3YykKPiAgIAlkd2MzX2dhZGdldF9ydW4oZHdjKTsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgdm9p ZCBkd2MzX3Vib290X2hzcGh5X21vZGUoc3RydWN0IGR3YzNfZGV2aWNlICpkd2MzX2RldiwKPiAr CQkJCSAgc3RydWN0IGR3YzMgKmR3YykKPiArewo+ICsJZW51bSB1c2JfcGh5X2ludGVyZmFjZSBo c3BoeV9tb2RlID0gZHdjM19kZXYtPmhzcGh5X21vZGU7Cj4gKwl1MzIgcmVnOwo+ICsKPiArCS8q IFNldCBkd2MzIHVzYjIgcGh5IGNvbmZpZyAqLwo+ICsJcmVnID0gZHdjM19yZWFkbChkd2MtPnJl Z3MsIERXQzNfR1VTQjJQSFlDRkcoMCkpOwo+ICsJcmVnIHw9IERXQzNfR1VTQjJQSFlDRkdfUEhZ SUY7Cj4gKwlyZWcgJj0gfkRXQzNfR1VTQjJQSFlDRkdfVVNCVFJEVElNX01BU0s7Cj4gKwo+ICsJ c3dpdGNoIChoc3BoeV9tb2RlKSB7Cj4gKwljYXNlIFVTQlBIWV9JTlRFUkZBQ0VfTU9ERV9VVE1J Ogo+ICsJCXJlZyB8PSBEV0MzX0dVU0IyUEhZQ0ZHX1VTQlRSRFRJTV84QklUOwo+ICsJCWJyZWFr Owo+ICsJY2FzZSBVU0JQSFlfSU5URVJGQUNFX01PREVfVVRNSVc6Cj4gKwkJcmVnIHw9IERXQzNf R1VTQjJQSFlDRkdfVVNCVFJEVElNXzE2QklUOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiAr CQlicmVhazsKPiArCX0KPiArCj4gKwlkd2MzX3dyaXRlbChkd2MtPnJlZ3MsIERXQzNfR1VTQjJQ SFlDRkcoMCksIHJlZyk7Cj4gK30KPiArCj4gICAjZGVmaW5lIERXQzNfQUxJR05fTUFTSwkJKDE2 IC0gMSkKPiAgIAo+ICAgLyoqCj4gQEAgLTcyMSw2ICs3NDYsOCBAQCBpbnQgZHdjM191Ym9vdF9p bml0KHN0cnVjdCBkd2MzX2RldmljZSAqZHdjM19kZXYpCj4gICAJCWdvdG8gZXJyMDsKPiAgIAl9 Cj4gICAKPiArCWR3YzNfdWJvb3RfaHNwaHlfbW9kZShkd2MzX2RldiwgZHdjKTsKPiArCj4gICAJ cmV0ID0gZHdjM19ldmVudF9idWZmZXJzX3NldHVwKGR3Yyk7Cj4gICAJaWYgKHJldCkgewo+ICAg CQlkZXZfZXJyKGR3Yy0+ZGV2LCAiZmFpbGVkIHRvIHNldHVwIGV2ZW50IGJ1ZmZlcnNcbiIpOwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2MzL2NvcmUuaCBiL2RyaXZlcnMvdXNiL2R3YzMv Y29yZS5oCj4gaW5kZXggYmU5NjcyMjY2YS4uYmZmNTNlMDcyYiAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL3VzYi9kd2MzL2NvcmUuaAo+ICsrKyBiL2RyaXZlcnMvdXNiL2R3YzMvY29yZS5oCj4gQEAg LTE2Miw2ICsxNjIsMTggQEAKPiAgIC8qIEdsb2JhbCBVU0IyIFBIWSBDb25maWd1cmF0aW9uIFJl Z2lzdGVyICovCj4gICAjZGVmaW5lIERXQzNfR1VTQjJQSFlDRkdfUEhZU09GVFJTVAkoMSA8PCAz MSkKPiAgICNkZWZpbmUgRFdDM19HVVNCMlBIWUNGR19TVVNQSFkJCSgxIDw8IDYpCj4gKyNkZWZp bmUgRFdDM19HVVNCMlBIWUNGR19QSFlJRgkJQklUKDMpCj4gKwo+ICsvKiBHbG9iYWwgVVNCMiBQ SFkgQ29uZmlndXJhdGlvbiBNYXNrICovCj4gKyNkZWZpbmUgRFdDM19HVVNCMlBIWUNGR19VU0JU UkRUSU1fTUFTSwkJKDB4ZiA8PCAxMCkKPiArCj4gKy8qIEdsb2JhbCBVU0IyIFBIWSBDb25maWd1 cmF0aW9uIE9mZnNldCAqLwo+ICsjZGVmaW5lIERXQzNfR1VTQjJQSFlDRkdfVVNCVFJEVElNX09G RlNFVAkxMAo+ICsKPiArI2RlZmluZSBEV0MzX0dVU0IyUEhZQ0ZHX1VTQlRSRFRJTV8xNkJJVAko MHg1IDw8IFwKPiArCQlEV0MzX0dVU0IyUEhZQ0ZHX1VTQlRSRFRJTV9PRkZTRVQpCj4gKyNkZWZp bmUgRFdDM19HVVNCMlBIWUNGR19VU0JUUkRUSU1fOEJJVAkJKDB4OSA8PCBcCj4gKwkJRFdDM19H VVNCMlBIWUNGR19VU0JUUkRUSU1fT0ZGU0VUKQo+ICAgCj4gICAvKiBHbG9iYWwgVVNCMyBQSVBF IENvbnRyb2wgUmVnaXN0ZXIgKi8KPiAgICNkZWZpbmUgRFdDM19HVVNCM1BJUEVDVExfUEhZU09G VFJTVAkoMSA8PCAzMSkKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kd2MzLXVib290LmggYi9pbmNs dWRlL2R3YzMtdWJvb3QuaAo+IGluZGV4IDk5NDFjYzM3YTMuLjNjOWUyMDRjZjAgMTAwNjQ0Cj4g LS0tIGEvaW5jbHVkZS9kd2MzLXVib290LmgKPiArKysgYi9pbmNsdWRlL2R3YzMtdWJvb3QuaAo+ IEBAIC0xMCwxMCArMTAsMTIgQEAKPiAgICNkZWZpbmUgX19EV0MzX1VCT09UX0hfCj4gICAKPiAg ICNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC91c2IvcGh5Lmg+ Cj4gICAKPiAgIHN0cnVjdCBkd2MzX2RldmljZSB7Cj4gICAJdW5zaWduZWQgbG9uZyBiYXNlOwo+ ICAgCWVudW0gdXNiX2RyX21vZGUgZHJfbW9kZTsKPiArCWVudW0gdXNiX3BoeV9pbnRlcmZhY2Ug aHNwaHlfbW9kZTsKPiAgIAl1MzIgbWF4aW11bV9zcGVlZDsKPiAgIAl1bnNpZ25lZCB0eF9maWZv X3Jlc2l6ZToxOwo+ICAgCXVuc2lnbmVkIGhhc19scG1fZXJyYXR1bTsKPiBkaWZmIC0tZ2l0IGEv aW5jbHVkZS9saW51eC91c2IvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3VzYi9waHkuaAo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uMTU4Y2E5Y2Q4NQo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9waHkuaAo+IEBAIC0wLDAgKzEsMTkgQEAK PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KPiArLyoKPiArICogVVNC IFBIWSBkZWZpbmVzCj4gKyAqCj4gKyAqIFRoZXNlIEFQSXMgbWF5IGJlIHVzZWQgYmV0d2VlbiBV U0IgY29udHJvbGxlcnMuICBVU0IgZGV2aWNlIGRyaXZlcnMKPiArICogKGZvciBlaXRoZXIgaG9z dCBvciBwZXJpcGhlcmFsIHJvbGVzKSBkb24ndCB1c2UgdGhlc2UgY2FsbHM7IHRoZXkKPiArICog Y29udGludWUgdG8gdXNlIGp1c3QgdXNiX2RldmljZSBhbmQgdXNiX2dhZGdldC4KPiArICovCj4g Kwo+ICsjaWZuZGVmIF9fTElOVVhfVVNCX1BIWV9ICj4gKyNkZWZpbmUgX19MSU5VWF9VU0JfUEhZ X0gKPiArCj4gK2VudW0gdXNiX3BoeV9pbnRlcmZhY2Ugewo+ICsJVVNCUEhZX0lOVEVSRkFDRV9N T0RFX1VOS05PV04sCj4gKwlVU0JQSFlfSU5URVJGQUNFX01PREVfVVRNSSwKPiArCVVTQlBIWV9J TlRFUkZBQ0VfTU9ERV9VVE1JVywKPiArfTsKPiArCj4gKyNlbmRpZiAvKiBfX0xJTlVYX1VTQl9Q SFlfSCAqLwoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpMaW51eC1yb2NrY2hpcCBtYWlsaW5nIGxpc3QKTGludXgtcm9ja2NoaXBAbGlzdHMuaW5mcmFk ZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LXJvY2tjaGlwCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kever Yang Date: Sat, 23 Nov 2019 22:21:45 +0800 Subject: [U-Boot] [PATCH v2 07/10] usb: dwc3: Add phy interface for dwc3_uboot In-Reply-To: <20191119082623.6165-8-jagan@amarulasolutions.com> References: <20191119082623.6165-1-jagan@amarulasolutions.com> <20191119082623.6165-8-jagan@amarulasolutions.com> Message-ID: <44578402-9771-0458-6110-bb41f8de708c@rock-chips.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit To: u-boot@lists.denx.de On 2019/11/19 下午4:26, Jagan Teki wrote: > U-Boot has two different variants of dwc3 initializations, > - with dm variant gadget, so the respective dm driver would > call the dwc3_init in core. > - with non-dm variant gadget, so the usage board file would > call dwc3_uboot_init in core. > > The driver probe would handle all respective gadget properties > including phy interface via phy_type property and then trigger > dwc3_init for dm-variant gadgets. > > So, to support the phy interface for non-dm variant gadgets, > the better option is dwc3_uboot_init since there is no > dedicated controller for non-dm variant gadgets. > > This patch support for adding phy interface like 8/16-bit UTMI+ > code for dwc3_uboot. > > This change used Linux phy.h enum list, to make proper code > compatibility. > > Cc: Marek Vasut > Tested-by: Levin Du > Signed-off-by: Jagan Teki Reviewed-by: Kever Yang Thanks, - Kever > --- > drivers/usb/dwc3/core.c | 27 +++++++++++++++++++++++++++ > drivers/usb/dwc3/core.h | 12 ++++++++++++ > include/dwc3-uboot.h | 2 ++ > include/linux/usb/phy.h | 19 +++++++++++++++++++ > 4 files changed, 60 insertions(+) > create mode 100644 include/linux/usb/phy.h > > diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c > index 23af60c98d..f779562de2 100644 > --- a/drivers/usb/dwc3/core.c > +++ b/drivers/usb/dwc3/core.c > @@ -613,6 +613,31 @@ static void dwc3_core_exit_mode(struct dwc3 *dwc) > dwc3_gadget_run(dwc); > } > > +static void dwc3_uboot_hsphy_mode(struct dwc3_device *dwc3_dev, > + struct dwc3 *dwc) > +{ > + enum usb_phy_interface hsphy_mode = dwc3_dev->hsphy_mode; > + u32 reg; > + > + /* Set dwc3 usb2 phy config */ > + reg = dwc3_readl(dwc->regs, DWC3_GUSB2PHYCFG(0)); > + reg |= DWC3_GUSB2PHYCFG_PHYIF; > + reg &= ~DWC3_GUSB2PHYCFG_USBTRDTIM_MASK; > + > + switch (hsphy_mode) { > + case USBPHY_INTERFACE_MODE_UTMI: > + reg |= DWC3_GUSB2PHYCFG_USBTRDTIM_8BIT; > + break; > + case USBPHY_INTERFACE_MODE_UTMIW: > + reg |= DWC3_GUSB2PHYCFG_USBTRDTIM_16BIT; > + break; > + default: > + break; > + } > + > + dwc3_writel(dwc->regs, DWC3_GUSB2PHYCFG(0), reg); > +} > + > #define DWC3_ALIGN_MASK (16 - 1) > > /** > @@ -721,6 +746,8 @@ int dwc3_uboot_init(struct dwc3_device *dwc3_dev) > goto err0; > } > > + dwc3_uboot_hsphy_mode(dwc3_dev, dwc); > + > ret = dwc3_event_buffers_setup(dwc); > if (ret) { > dev_err(dwc->dev, "failed to setup event buffers\n"); > diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h > index be9672266a..bff53e072b 100644 > --- a/drivers/usb/dwc3/core.h > +++ b/drivers/usb/dwc3/core.h > @@ -162,6 +162,18 @@ > /* Global USB2 PHY Configuration Register */ > #define DWC3_GUSB2PHYCFG_PHYSOFTRST (1 << 31) > #define DWC3_GUSB2PHYCFG_SUSPHY (1 << 6) > +#define DWC3_GUSB2PHYCFG_PHYIF BIT(3) > + > +/* Global USB2 PHY Configuration Mask */ > +#define DWC3_GUSB2PHYCFG_USBTRDTIM_MASK (0xf << 10) > + > +/* Global USB2 PHY Configuration Offset */ > +#define DWC3_GUSB2PHYCFG_USBTRDTIM_OFFSET 10 > + > +#define DWC3_GUSB2PHYCFG_USBTRDTIM_16BIT (0x5 << \ > + DWC3_GUSB2PHYCFG_USBTRDTIM_OFFSET) > +#define DWC3_GUSB2PHYCFG_USBTRDTIM_8BIT (0x9 << \ > + DWC3_GUSB2PHYCFG_USBTRDTIM_OFFSET) > > /* Global USB3 PIPE Control Register */ > #define DWC3_GUSB3PIPECTL_PHYSOFTRST (1 << 31) > diff --git a/include/dwc3-uboot.h b/include/dwc3-uboot.h > index 9941cc37a3..3c9e204cf0 100644 > --- a/include/dwc3-uboot.h > +++ b/include/dwc3-uboot.h > @@ -10,10 +10,12 @@ > #define __DWC3_UBOOT_H_ > > #include > +#include > > struct dwc3_device { > unsigned long base; > enum usb_dr_mode dr_mode; > + enum usb_phy_interface hsphy_mode; > u32 maximum_speed; > unsigned tx_fifo_resize:1; > unsigned has_lpm_erratum; > diff --git a/include/linux/usb/phy.h b/include/linux/usb/phy.h > new file mode 100644 > index 0000000000..158ca9cd85 > --- /dev/null > +++ b/include/linux/usb/phy.h > @@ -0,0 +1,19 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +/* > + * USB PHY defines > + * > + * These APIs may be used between USB controllers. USB device drivers > + * (for either host or peripheral roles) don't use these calls; they > + * continue to use just usb_device and usb_gadget. > + */ > + > +#ifndef __LINUX_USB_PHY_H > +#define __LINUX_USB_PHY_H > + > +enum usb_phy_interface { > + USBPHY_INTERFACE_MODE_UNKNOWN, > + USBPHY_INTERFACE_MODE_UTMI, > + USBPHY_INTERFACE_MODE_UTMIW, > +}; > + > +#endif /* __LINUX_USB_PHY_H */