Am Samstag, 9. Juli 2016, 11:38:00 schrieb William.wu:Ah yesï it seems very good to me, very explicit.
Dear Heiko & Balbiïselect 8-bit
On 2016/7/8 21:29, Felipe Balbi wrote:
Hi,
Heiko Stuebner <heiko@xxxxxxxxx> writes:
Am Donnerstag, 7. Juli 2016, 10:54:24 schrieb William Wu:
Add a quirk to configure the core to support the[...]
UTMI+ PHY with an 8- or 16-bit interface. UTMI+ PHY
interface is hardware property, and it's platform
dependent. Normall, the PHYIf can be configured
during coreconsultant. But for some specific usb
cores(e.g. rk3399 soc dwc3), the default PHYIf
configuration value is fault, so we need to
reconfigure it by software.
And refer to the dwc3 databook, the GUSB2PHYCFG.USBTRDTIM
must be set to the corresponding value according to
the UTMI+ PHY interface.
Signed-off-by: William Wu <william.wu@xxxxxxxxxxxxxx>
---
diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt
b/Documentation/devicetree/bindings/usb/dwc3.txt index
020b0e9..8d7317d
100644
--- a/Documentation/devicetree/bindings/usb/dwc3.txt
+++ b/Documentation/devicetree/bindings/usb/dwc3.txt
@@ -42,6 +42,10 @@ Optional properties:
- snps,dis-u2-freeclk-exists-quirk: when set, clear the
u2_freeclk_exists in GUSB2PHYCFG, specify that USB2 PHY doesn't
provide
a free-running PHY clock.
+ - snps,phyif-utmi-quirk: when set core will set phyif UTMI+
interface.
+ - snps,phyif-utmi: the value to configure the core to support a
UTMI+
PHY + with an 8- or 16-bit interface. Value 0
or you could just store the actual width value read from the dts and makeThanks for your suggestion:-)+ interface, value 1 select 16-bit interface.maybe
snps,phyif-utmi-width = <8> or <16>;
devicetree is about describing the hardware, not the things that get
written to registers :-) . The conversion from the described width to
the register value can easily be done in the driver.
Yesï âsnps,phyif-utmi-width = <8> or <16>â is much clearer and easier to
understand.
And I have considered the same dts property for phyif-utmi, but I have
no good idea about
the conversion from described width to the registers value for the time
being.
About phyif utmi width configurationï we need to set two places in
GUSB2PHYCFG registerï
according to DWC3 USB3.0 controller databook version3.00aï6.3.46
GUSB2PHYCFG
--------------------------------------------------------------------------
-------------------- Bits | Name | Description
--------------------------------------------------------------------------
-------------------- 13:10 | USBTRDTIM | Sets the turnaround
time in PHY clocks.
| | 4'h5: When the MAC
interface is 16-bit UTMI+
| | 4'h9: When the MAC
interface is 8-bit UTMI+/ULPI.
--------------------------------------------------------------------------
-------------------- 3 | PHYIF | If UTMI+ is
selected, the application uses this bit to configure
| | core to support a UTMI+
PHY with an 8- or 16-bit interface.
| | 1'b0: 8 bits
| | 1'b1: 16 bits
--------------------------------------------------------------------------
--------------------
And I think maybe I can try to do this:
change it in dts:
snps,phyif-utmi-width = <8> or <16>;
Then convert to register value like thisï
device_property_read_u8(dev, "snps,phyif-utmi-width",
&phyif_utmi_width);
dwc->phyif_utmi = phyif_utmi_width >> 4;
Ater the conversionï dwc->phyif_utmi value 0 means 8 bits, value 1
means 16 bits,
and it's easier for us to config GUSB2PHYCFG.
Is it OK?
the core handle accordingly, making everything a bit more explicit.
I guess personally I'd do something like:
make dwc->phyif_utmi a regular unsigned int
in probe:
ret = device_property_read_u8(dev, "snps,phyif-utmi-width",
&dwc->phyif_utmi);
if (ret < 0) {
dwc->phyif_utmi = 0;
else if (dwc->phyif_utmi != 16 && dwc->phyif_utmi != 8) {
dev_err(dev, "unsupported utmi interface width %d\n",
dwc->phyif_utmi);
return -EINVAL;
}
when setting your GUSB2PHYCFG register:
if (dwc->phyif_utmi > 0) {
reg &= ~(DWC3_GUSB2PHYCFG_PHYIF_MASK |
DWC3_GUSB2PHYCFG_USBTRDTIM_MASK);
usbtrdtim = (dwc->phyif_utmi == 16) ? USBTRDTIM_UTMI_16_BIT :
USBTRDTIM_UTMI_8_BIT;
phyif = (dwc->phyif_utmi == 16) ? 1 : 0;
reg |= DWC3_GUSB2PHYCFG_PHYIF(phyif) |
DWC3_GUSB2PHYCFG_USBTRDTIM(usbtrdtim) |
}
yes, but please name it snps,phyif-utmi-width :-)Ah, it seems very good to me. One dts property "snps,phyif-utmi" can helpAlso I don't think you need two properties for this. If the
snps,phyif-utmi property is specified it indicates that you want to
manually set the width and if it is absent you want to use the IC
default. All functions reading property-values indicate if the
property is missing.
to reconfig phyif utmi width. And it seems that Felipe likes it very much
too. :-D
Heiko