Add the macro definition for global soc bus configuration register 0/1
Signed-off-by: Changming Huang <redacted>
---
Changes in v3:
- no change
Changes in v2:
- split the patch
- add more macro definition for soc bus configuration register
drivers/usb/dwc3/core.h | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
Enable the undefined length INCR burst type and set INCRx.
Different platform may has the different burst size type.
In order to get best performance, we need to tune the burst size to
one special value, instead of the default value.
Signed-off-by: Changming Huang <redacted>
Signed-off-by: Rajesh Bhagat <redacted>
---
Changes in v3:
- add new property for INCR burst in usb node to reset GSBUSCFG0.
Changes in v2:
- split patch
- create one new function to handle soc bus configuration register.
drivers/usb/dwc3/core.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++
drivers/usb/dwc3/core.h | 7 +++++++
2 files changed, 58 insertions(+)
@@ -650,6 +650,55 @@ static void dwc3_core_setup_global_control(struct dwc3 *dwc)dwc3_writel(dwc->regs,DWC3_GCTL,reg);}+/* set global soc bus configuration registers */+staticvoiddwc3_set_soc_bus_cfg(structdwc3*dwc)+{+structdevice*dev=dwc->dev;+u32cfg;+intret;++cfg=dwc3_readl(dwc->regs,DWC3_GSBUSCFG0);++/* Get INCR burst type, if return !NULL, not to change this type */+ret=device_property_read_u32_array(dev,+"snps,incr-burst-type-adjustment",+dwc->incr_burst_type,2);+if(!ret){+/* Enable Undefined Length INCR Burst and Enable INCRx Burst */+cfg&=~DWC3_GSBUSCFG0_INCRBRST_MASK;+if(*dwc->incr_burst_type)+cfg|=DWC3_GSBUSCFG0_INCRBRSTENA;+switch(*(dwc->incr_burst_type+1)){+case256:+cfg|=DWC3_GSBUSCFG0_INCR256BRSTENA;+break;+case128:+cfg|=DWC3_GSBUSCFG0_INCR128BRSTENA;+break;+case64:+cfg|=DWC3_GSBUSCFG0_INCR64BRSTENA;+break;+case32:+cfg|=DWC3_GSBUSCFG0_INCR32BRSTENA;+break;+case16:+cfg|=DWC3_GSBUSCFG0_INCR16BRSTENA;+break;+case8:+cfg|=DWC3_GSBUSCFG0_INCR8BRSTENA;+break;+case4:+cfg|=DWC3_GSBUSCFG0_INCR4BRSTENA;+break;+default:+dev_err(dev,"Invalid property\n");+break;+}+}++dwc3_writel(dwc->regs,DWC3_GSBUSCFG0,cfg);+}+/***dwc3_core_init-Low-levelinitializationofDWC3Core*@dwc:Pointertoourcontrollercontextstructure
@@ -55,6 +55,10 @@ Optional properties: fladj_30mhz_sdbnd signal is invalid or incorrect. - <DEPRECATED> tx-fifo-resize: determines if the FIFO *has* to be reallocated.+ - snps,incr-burst-type-adjustment: Value for INCR burst type of GSBUSCFG0+ register, undefined length INCR burst type enable and INCRx type.+ First field is for undefined length INCR burst type enable or not.+ Second field is for largest INCRx type enabled. This is usually a subnode to DWC3 glue to which it is connected.
@@ -55,6 +55,10 @@ Optional properties: fladj_30mhz_sdbnd signal is invalid or incorrect. - <DEPRECATED> tx-fifo-resize: determines if the FIFO *has* to be reallocated.+ - snps,incr-burst-type-adjustment: Value for INCR burst type of GSBUSCFG0+ register, undefined length INCR burst type enable and INCRx type.+ First field is for undefined length INCR burst type enable or not.+ Second field is for largest INCRx type enabled.
Why do you need the first field? Is the 2nd field used if the 1st is 0?
If not, then just use the presence of the property to enable or not.
Rob
From: Jerry Huang <hidden> Date: 2016-12-23 02:52:54
Hi, Rob,
-----Original Message-----
From: Rob Herring [mailto:robh at kernel.org]
Sent: Friday, December 23, 2016 2:45 AM
To: Jerry Huang <redacted>
Cc: balbi at kernel.org; mark.rutland at arm.com; catalin.marinas at arm.com;
will.deacon at arm.com; linux at armlinux.org.uk; devicetree at vger.kernel.org;
linux-usb at vger.kernel.org; linux-kernel at vger.kernel.org; linux-arm-
kernel at lists.infradead.org
Subject: Re: [PATCH v3 2/3] USB3/DWC3: Add property "snps, incr-burst-
type-adjustment" for INCR burst type
On Mon, Dec 19, 2016 at 05:25:53PM +0800, Changming Huang wrote:
quoted
New property "snps,incr-burst-type-adjustment = <x>, <y>" for USB3.0
DWC3.
quoted
Field "x": 1/0 - undefined length INCR burst type enable or not; Field
"y": INCR4/INCR8/INCR16/INCR32/INCR64/INCR128/INCR256 burst type.
While enabling undefined length INCR burst type and INCR16 burst type,
get better write performance on NXP Layerscape platform:
around 3% improvement (from 364MB/s to 375MB/s).
Signed-off-by: Changming Huang <redacted>
---
Changes in v3:
- add new property for INCR burst in usb node.
Documentation/devicetree/bindings/usb/dwc3.txt | 5 +++++
arch/arm/boot/dts/ls1021a.dtsi | 1 +
arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 3 +++
arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 2 ++
4 files changed, 11 insertions(+)
@@ -55,6 +55,10 @@ Optional properties: fladj_30mhz_sdbnd signal is invalid or incorrect. - <DEPRECATED> tx-fifo-resize: determines if the FIFO *has* to be
reallocated.
quoted
+ - snps,incr-burst-type-adjustment: Value for INCR burst type of
GSBUSCFG0
quoted
+ register, undefined length INCR burst type enable and INCRx type.+ First field is for undefined length INCR burst type enable or not.+ Second field is for largest INCRx type enabled.
Why do you need the first field? Is the 2nd field used if the 1st is 0?
If not, then just use the presence of the property to enable or not.
The first field is one switch.
When it is 1, means undefined length INCR burst type enabled, we can use any length less than or equal to the largest-enabled burst length of INCR4/8/16/32/64/128/256.
When it is zero, means INCRx burst mode enabled, we can use one fixed burst length of 1/4/8/16/32/64/128/256 byte.
So, the 2nd field is used if the 1st is 0, we need to select one largest burst length the USB controller can support.
If we don't want to change the value of this register (use the default value), we don't need to add this property to usb node.
From: Rob Herring <robh@kernel.org> Date: 2017-01-03 21:49:33
On Thu, Dec 22, 2016 at 8:52 PM, Jerry Huang [off-list ref] wrote:
Hi, Rob,
quoted
-----Original Message-----
From: Rob Herring [mailto:robh at kernel.org]
Sent: Friday, December 23, 2016 2:45 AM
To: Jerry Huang <redacted>
Cc: balbi at kernel.org; mark.rutland at arm.com; catalin.marinas at arm.com;
will.deacon at arm.com; linux at armlinux.org.uk; devicetree at vger.kernel.org;
linux-usb at vger.kernel.org; linux-kernel at vger.kernel.org; linux-arm-
kernel at lists.infradead.org
Subject: Re: [PATCH v3 2/3] USB3/DWC3: Add property "snps, incr-burst-
type-adjustment" for INCR burst type
On Mon, Dec 19, 2016 at 05:25:53PM +0800, Changming Huang wrote:
quoted
New property "snps,incr-burst-type-adjustment = <x>, <y>" for USB3.0
DWC3.
quoted
Field "x": 1/0 - undefined length INCR burst type enable or not; Field
"y": INCR4/INCR8/INCR16/INCR32/INCR64/INCR128/INCR256 burst type.
While enabling undefined length INCR burst type and INCR16 burst type,
get better write performance on NXP Layerscape platform:
around 3% improvement (from 364MB/s to 375MB/s).
Signed-off-by: Changming Huang <redacted>
---
Changes in v3:
- add new property for INCR burst in usb node.
Documentation/devicetree/bindings/usb/dwc3.txt | 5 +++++
arch/arm/boot/dts/ls1021a.dtsi | 1 +
arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 3 +++
arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 2 ++
4 files changed, 11 insertions(+)
@@ -55,6 +55,10 @@ Optional properties: fladj_30mhz_sdbnd signal is invalid or incorrect. - <DEPRECATED> tx-fifo-resize: determines if the FIFO *has* to be
reallocated.
quoted
+ - snps,incr-burst-type-adjustment: Value for INCR burst type of
GSBUSCFG0
quoted
+ register, undefined length INCR burst type enable and INCRx type.+ First field is for undefined length INCR burst type enable or not.+ Second field is for largest INCRx type enabled.
Why do you need the first field? Is the 2nd field used if the 1st is 0?
If not, then just use the presence of the property to enable or not.
The first field is one switch.
When it is 1, means undefined length INCR burst type enabled, we can use any length less than or equal to the largest-enabled burst length of INCR4/8/16/32/64/128/256.
When it is zero, means INCRx burst mode enabled, we can use one fixed burst length of 1/4/8/16/32/64/128/256 byte.
So, the 2nd field is used if the 1st is 0, we need to select one largest burst length the USB controller can support.
If we don't want to change the value of this register (use the default value), we don't need to add this property to usb node.
Just make this a single value with 0 meaning INCR and 4/8/16/etc being INCRx.
Rob
From: Jerry Huang <hidden> Date: 2017-01-04 02:25:05
Hi, Rob,
-----Original Message-----
From: Rob Herring [mailto:robh at kernel.org]
Sent: Wednesday, January 04, 2017 5:24 AM
To: Jerry Huang <redacted>
Cc: balbi at kernel.org; mark.rutland at arm.com; catalin.marinas at arm.com;
will.deacon at arm.com; linux at armlinux.org.uk; devicetree at vger.kernel.org;
linux-usb at vger.kernel.org; linux-kernel at vger.kernel.org; linux-arm-
kernel at lists.infradead.org
Subject: Re: [PATCH v3 2/3] USB3/DWC3: Add property "snps, incr-burst-
type-adjustment" for INCR burst type
On Thu, Dec 22, 2016 at 8:52 PM, Jerry Huang [off-list ref] wrote:
quoted
Hi, Rob,
quoted
-----Original Message-----
From: Rob Herring [mailto:robh at kernel.org]
Sent: Friday, December 23, 2016 2:45 AM
To: Jerry Huang <redacted>
Cc: balbi at kernel.org; mark.rutland at arm.com; catalin.marinas at arm.com;
will.deacon at arm.com; linux at armlinux.org.uk;
devicetree at vger.kernel.org; linux-usb at vger.kernel.org;
linux-kernel at vger.kernel.org; linux-arm- kernel at lists.infradead.org
Subject: Re: [PATCH v3 2/3] USB3/DWC3: Add property "snps,
incr-burst- type-adjustment" for INCR burst type
On Mon, Dec 19, 2016 at 05:25:53PM +0800, Changming Huang wrote:
quoted
New property "snps,incr-burst-type-adjustment = <x>, <y>" for
USB3.0
DWC3.
quoted
Field "x": 1/0 - undefined length INCR burst type enable or not;
Field
"y": INCR4/INCR8/INCR16/INCR32/INCR64/INCR128/INCR256 burst type.
While enabling undefined length INCR burst type and INCR16 burst
type, get better write performance on NXP Layerscape platform:
around 3% improvement (from 364MB/s to 375MB/s).
Signed-off-by: Changming Huang <redacted>
---
Changes in v3:
- add new property for INCR burst in usb node.
Documentation/devicetree/bindings/usb/dwc3.txt | 5 +++++
arch/arm/boot/dts/ls1021a.dtsi | 1 +
arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 3 +++
arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 2 ++
4 files changed, 11 insertions(+)
@@ -55,6 +55,10 @@ Optional properties: fladj_30mhz_sdbnd signal is invalid or incorrect. - <DEPRECATED> tx-fifo-resize: determines if the FIFO *has* to be
reallocated.
quoted
+ - snps,incr-burst-type-adjustment: Value for INCR burst type of
GSBUSCFG0
quoted
+ register, undefined length INCR burst type enable and INCRx type.+ First field is for undefined length INCR burst type enable or not.+ Second field is for largest INCRx type enabled.
Why do you need the first field? Is the 2nd field used if the 1st is 0?
If not, then just use the presence of the property to enable or not.
The first field is one switch.
When it is 1, means undefined length INCR burst type enabled, we can use
any length less than or equal to the largest-enabled burst length of
INCR4/8/16/32/64/128/256.
quoted
When it is zero, means INCRx burst mode enabled, we can use one fixed
burst length of 1/4/8/16/32/64/128/256 byte.
quoted
So, the 2nd field is used if the 1st is 0, we need to select one largest burst
length the USB controller can support.
quoted
If we don't want to change the value of this register (use the default value),
we don't need to add this property to usb node.
Just make this a single value with 0 meaning INCR and 4/8/16/etc being INCRx.
Maybe, I didn't describe it clearly.
According to DWC3 spec, the value "0" of field INCRBrstEna means INCRx burst mode, 1 means INCR burst mode.
Regardless of the value of INCRBrstEna [bit0], we need to modify the other field bit[1,2,3,4,5,6,7] to one INCR burst type for the platform supported.
Ad you mentioned, if we just use a single value with 0 meaning INCR and 4/8/16/etc being INCRx.
I understand totally that when it is none-zero, we can use it for INCR burst mode.
Then, when it is 0, how to select the INCRx value?
So, I think we still need two vaue to specify INCRBrstEna and INCRx burst type.
From: Jerry Huang <hidden> Date: 2017-01-16 08:15:31
-----Original Message-----
From: Jerry Huang
Sent: Wednesday, January 04, 2017 10:25 AM
To: 'Rob Herring' <robh@kernel.org>
Cc: balbi at kernel.org; mark.rutland at arm.com; catalin.marinas at arm.com;
will.deacon at arm.com; linux at armlinux.org.uk; devicetree at vger.kernel.org;
linux-usb at vger.kernel.org; linux-kernel at vger.kernel.org; linux-arm-
kernel at lists.infradead.org
Subject: RE: [PATCH v3 2/3] USB3/DWC3: Add property "snps, incr-burst-
type-adjustment" for INCR burst type
Hi, Rob,
quoted
-----Original Message-----
From: Rob Herring [mailto:robh at kernel.org]
Sent: Wednesday, January 04, 2017 5:24 AM
To: Jerry Huang <redacted>
Cc: balbi at kernel.org; mark.rutland at arm.com; catalin.marinas at arm.com;
will.deacon at arm.com; linux at armlinux.org.uk;
devicetree at vger.kernel.org; linux-usb at vger.kernel.org;
linux-kernel at vger.kernel.org; linux-arm- kernel at lists.infradead.org
Subject: Re: [PATCH v3 2/3] USB3/DWC3: Add property "snps, incr-burst-
type-adjustment" for INCR burst type
On Thu, Dec 22, 2016 at 8:52 PM, Jerry Huang [off-list ref]
wrote:
quoted
quoted
Hi, Rob,
quoted
-----Original Message-----
From: Rob Herring [mailto:robh at kernel.org]
Sent: Friday, December 23, 2016 2:45 AM
To: Jerry Huang <redacted>
Cc: balbi at kernel.org; mark.rutland at arm.com;
catalin.marinas at arm.com; will.deacon at arm.com;
linux at armlinux.org.uk; devicetree at vger.kernel.org;
linux-usb at vger.kernel.org; linux-kernel at vger.kernel.org; linux-arm-
kernel at lists.infradead.org
Subject: Re: [PATCH v3 2/3] USB3/DWC3: Add property "snps,
incr-burst- type-adjustment" for INCR burst type
On Mon, Dec 19, 2016 at 05:25:53PM +0800, Changming Huang wrote:
quoted
New property "snps,incr-burst-type-adjustment = <x>, <y>" for
USB3.0
DWC3.
quoted
Field "x": 1/0 - undefined length INCR burst type enable or not;
Field
"y": INCR4/INCR8/INCR16/INCR32/INCR64/INCR128/INCR256 burst
type.
quoted
quoted
quoted
quoted
While enabling undefined length INCR burst type and INCR16 burst
type, get better write performance on NXP Layerscape platform:
around 3% improvement (from 364MB/s to 375MB/s).
Signed-off-by: Changming Huang <redacted>
---
Changes in v3:
- add new property for INCR burst in usb node.
Documentation/devicetree/bindings/usb/dwc3.txt | 5 +++++
arch/arm/boot/dts/ls1021a.dtsi | 1 +
arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 3 +++
arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 2 ++
4 files changed, 11 insertions(+)
@@ -55,6 +55,10 @@ Optional properties: fladj_30mhz_sdbnd signal is invalid or incorrect. - <DEPRECATED> tx-fifo-resize: determines if the FIFO *has* to
be
reallocated.
quoted
+ - snps,incr-burst-type-adjustment: Value for INCR burst type of
GSBUSCFG0
quoted
+ register, undefined length INCR burst type enable and INCRx type.+ First field is for undefined length INCR burst type enable or not.+ Second field is for largest INCRx type enabled.
Why do you need the first field? Is the 2nd field used if the 1st is 0?
If not, then just use the presence of the property to enable or not.
The first field is one switch.
When it is 1, means undefined length INCR burst type enabled, we can
use
any length less than or equal to the largest-enabled burst length of
INCR4/8/16/32/64/128/256.
quoted
When it is zero, means INCRx burst mode enabled, we can use one
fixed
burst length of 1/4/8/16/32/64/128/256 byte.
quoted
So, the 2nd field is used if the 1st is 0, we need to select one
largest burst
length the USB controller can support.
quoted
If we don't want to change the value of this register (use the
default value),
we don't need to add this property to usb node.
Just make this a single value with 0 meaning INCR and 4/8/16/etc being
INCRx.
Maybe, I didn't describe it clearly.
According to DWC3 spec, the value "0" of field INCRBrstEna means INCRx
burst mode, 1 means INCR burst mode.
Regardless of the value of INCRBrstEna [bit0], we need to modify the other
field bit[1,2,3,4,5,6,7] to one INCR burst type for the platform supported.
Ad you mentioned, if we just use a single value with 0 meaning INCR and
4/8/16/etc being INCRx.
I understand totally that when it is none-zero, we can use it for INCR burst
mode.
Then, when it is 0, how to select the INCRx value?
So, I think we still need two vaue to specify INCRBrstEna and INCRx burst
type.
Hi, Balbi,
It seems there is no feedback for my comment, so these patches can be accepted?
From: Felipe Balbi <balbi@kernel.org> Date: 2017-01-16 08:52:34
Hi,
Jerry Huang [off-list ref] writes:
quoted
quoted
On Thu, Dec 22, 2016 at 8:52 PM, Jerry Huang [off-list ref]
wrote:
quoted
quoted
Hi, Rob,
quoted
-----Original Message-----
From: Rob Herring [mailto:robh at kernel.org]
Sent: Friday, December 23, 2016 2:45 AM
To: Jerry Huang <redacted>
Cc: balbi at kernel.org; mark.rutland at arm.com;
catalin.marinas at arm.com; will.deacon at arm.com;
linux at armlinux.org.uk; devicetree at vger.kernel.org;
linux-usb at vger.kernel.org; linux-kernel at vger.kernel.org; linux-arm-
kernel at lists.infradead.org
Subject: Re: [PATCH v3 2/3] USB3/DWC3: Add property "snps,
incr-burst- type-adjustment" for INCR burst type
On Mon, Dec 19, 2016 at 05:25:53PM +0800, Changming Huang wrote:
quoted
New property "snps,incr-burst-type-adjustment = <x>, <y>" for
USB3.0
DWC3.
quoted
Field "x": 1/0 - undefined length INCR burst type enable or not;
Field
"y": INCR4/INCR8/INCR16/INCR32/INCR64/INCR128/INCR256 burst
type.
quoted
quoted
quoted
quoted
While enabling undefined length INCR burst type and INCR16 burst
type, get better write performance on NXP Layerscape platform:
around 3% improvement (from 364MB/s to 375MB/s).
Signed-off-by: Changming Huang <redacted>
---
Changes in v3:
- add new property for INCR burst in usb node.
Documentation/devicetree/bindings/usb/dwc3.txt | 5 +++++
arch/arm/boot/dts/ls1021a.dtsi | 1 +
arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 3 +++
arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 2 ++
4 files changed, 11 insertions(+)
@@ -55,6 +55,10 @@ Optional properties: fladj_30mhz_sdbnd signal is invalid or incorrect. - <DEPRECATED> tx-fifo-resize: determines if the FIFO *has* to
be
reallocated.
quoted
+ - snps,incr-burst-type-adjustment: Value for INCR burst type of
GSBUSCFG0
quoted
+ register, undefined length INCR burst type enable and INCRx type.+ First field is for undefined length INCR burst type enable or not.+ Second field is for largest INCRx type enabled.
Why do you need the first field? Is the 2nd field used if the 1st is 0?
If not, then just use the presence of the property to enable or not.
The first field is one switch.
When it is 1, means undefined length INCR burst type enabled, we can
use
any length less than or equal to the largest-enabled burst length of
INCR4/8/16/32/64/128/256.
quoted
When it is zero, means INCRx burst mode enabled, we can use one
fixed
burst length of 1/4/8/16/32/64/128/256 byte.
quoted
So, the 2nd field is used if the 1st is 0, we need to select one
largest burst
length the USB controller can support.
quoted
If we don't want to change the value of this register (use the
default value),
we don't need to add this property to usb node.
Just make this a single value with 0 meaning INCR and 4/8/16/etc being
INCRx.
Maybe, I didn't describe it clearly.
According to DWC3 spec, the value "0" of field INCRBrstEna means INCRx
burst mode, 1 means INCR burst mode.
Regardless of the value of INCRBrstEna [bit0], we need to modify the other
field bit[1,2,3,4,5,6,7] to one INCR burst type for the platform supported.
Ad you mentioned, if we just use a single value with 0 meaning INCR and
4/8/16/etc being INCRx.
I understand totally that when it is none-zero, we can use it for INCR burst
mode.
Then, when it is 0, how to select the INCRx value?
So, I think we still need two vaue to specify INCRBrstEna and INCRx burst
type.
Hi, Balbi,
It seems there is no feedback for my comment, so these patches can be accepted?
probably not, we need to really understand what information we need so
it can be described properly. The last thing we want is unnecessary DT
properties.
It seems to me that we can extrapolate INCRBrstEna based on which burst
modes are enabled. If only 0 is passed, then that bit should be 1, if 0
and any other size is passed, then that bit should be 0, no?
--
balbi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20170116/7f31264e/attachment-0001.sig>
From: Jerry Huang <hidden> Date: 2017-01-17 10:37:59
-----Original Message-----
From: Felipe Balbi [mailto:balbi at kernel.org]
Sent: Monday, January 16, 2017 4:50 PM
To: Jerry Huang <redacted>; Rob Herring <robh@kernel.org>
Cc: mark.rutland at arm.com; catalin.marinas at arm.com;
will.deacon at arm.com; linux at armlinux.org.uk; devicetree at vger.kernel.org;
linux-usb at vger.kernel.org; linux-kernel at vger.kernel.org; linux-arm-
kernel at lists.infradead.org
Subject: RE: [PATCH v3 2/3] USB3/DWC3: Add property "snps, incr-burst-
type-adjustment" for INCR burst type
Hi,
Jerry Huang [off-list ref] writes:
quoted
quoted
quoted
On Thu, Dec 22, 2016 at 8:52 PM, Jerry Huang [off-list ref]
wrote:
quoted
quoted
Hi, Rob,
quoted
-----Original Message-----
From: Rob Herring [mailto:robh at kernel.org]
Sent: Friday, December 23, 2016 2:45 AM
To: Jerry Huang <redacted>
Cc: balbi at kernel.org; mark.rutland at arm.com;
catalin.marinas at arm.com; will.deacon at arm.com;
linux at armlinux.org.uk; devicetree at vger.kernel.org;
linux-usb at vger.kernel.org; linux-kernel at vger.kernel.org;
linux-arm- kernel at lists.infradead.org
Subject: Re: [PATCH v3 2/3] USB3/DWC3: Add property "snps,
incr-burst- type-adjustment" for INCR burst type
On Mon, Dec 19, 2016 at 05:25:53PM +0800, Changming Huang wrote:
quoted
New property "snps,incr-burst-type-adjustment = <x>, <y>" for
USB3.0
DWC3.
quoted
Field "x": 1/0 - undefined length INCR burst type enable or
not; Field
"y": INCR4/INCR8/INCR16/INCR32/INCR64/INCR128/INCR256 burst
type.
quoted
quoted
quoted
quoted
While enabling undefined length INCR burst type and INCR16
burst type, get better write performance on NXP Layerscape
platform:
quoted
quoted
quoted
quoted
quoted
quoted
around 3% improvement (from 364MB/s to 375MB/s).
Signed-off-by: Changming Huang <redacted>
---
Changes in v3:
- add new property for INCR burst in usb node.
Documentation/devicetree/bindings/usb/dwc3.txt | 5 +++++
arch/arm/boot/dts/ls1021a.dtsi | 1 +
arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 3 +++
arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 2 ++
4 files changed, 11 insertions(+)
@@ -55,6 +55,10 @@ Optional properties: fladj_30mhz_sdbnd signal is invalid or incorrect. - <DEPRECATED> tx-fifo-resize: determines if the FIFO *has*
to be
reallocated.
quoted
+ - snps,incr-burst-type-adjustment: Value for INCR burst type
+ of
GSBUSCFG0
quoted
+ register, undefined length INCR burst type enable and INCRx
type.
quoted
quoted
quoted
quoted
quoted
quoted
+ First field is for undefined length INCR burst type enable or not.
+ Second field is for largest INCRx type enabled.
Why do you need the first field? Is the 2nd field used if the 1st is 0?
If not, then just use the presence of the property to enable or not.
The first field is one switch.
When it is 1, means undefined length INCR burst type enabled, we
can use
any length less than or equal to the largest-enabled burst length
of INCR4/8/16/32/64/128/256.
quoted
When it is zero, means INCRx burst mode enabled, we can use one
fixed
burst length of 1/4/8/16/32/64/128/256 byte.
quoted
So, the 2nd field is used if the 1st is 0, we need to select one
largest burst
length the USB controller can support.
quoted
If we don't want to change the value of this register (use the
default value),
we don't need to add this property to usb node.
Just make this a single value with 0 meaning INCR and 4/8/16/etc
being
INCRx.
Maybe, I didn't describe it clearly.
According to DWC3 spec, the value "0" of field INCRBrstEna means
INCRx burst mode, 1 means INCR burst mode.
Regardless of the value of INCRBrstEna [bit0], we need to modify the
other field bit[1,2,3,4,5,6,7] to one INCR burst type for the platform
supported.
quoted
quoted
Ad you mentioned, if we just use a single value with 0 meaning INCR
and 4/8/16/etc being INCRx.
I understand totally that when it is none-zero, we can use it for
INCR burst mode.
Then, when it is 0, how to select the INCRx value?
So, I think we still need two vaue to specify INCRBrstEna and INCRx
burst type.
Hi, Balbi,
It seems there is no feedback for my comment, so these patches can be
accepted?
probably not, we need to really understand what information we need so it
can be described properly. The last thing we want is unnecessary DT
properties.
It seems to me that we can extrapolate INCRBrstEna based on which burst
modes are enabled. If only 0 is passed, then that bit should be 1, if 0 and any
other size is passed, then that bit should be 0, no?
Hi, Balbi,
Below is the definition for this property,
snps,incr-burst-type-adjustment = <x>, <y>
x: Undefined Length INCR Burst Type Enable (INCRBrstEna)
0 - INCRX burst mode (not enable INCRBrstEna)
1 - INCR (undefined length) burst mode (enable INCRBrstEna)
y: the burst length
1> if x = 0: means INCRBrstEna not enabled, set bit0 to zero (or clear it) , we select one of INCR1/INCR4/INCR8/INCR16/INCR32/INCR64/INCR128/INCR256 (pass this value through "y")to set the fix burst length controller supported.
For example:
snps,incr-burst-type-adjustment = <0>, <16>
driver will set bit0 to zero and set bit3 to 1 (INCR16 Burst Type Enabled), controller will use INCR16 (with 16 bytes) to transfer data.
2> if x = 1: means INCRBrstEna enabled, we select one of INCR4/INCR8/INCR16/INCR32/INCR64/INCR128/INCR256 (pass this value through "y") to set the burst length, and controller will use any length less than or equal to that we selected.
For example:
snps,incr-burst-type-adjustment = <1>, <32>
driver will set bit0 to 1 and set bit4 to 1 (INCR32 Burst Type Enabled), controller will use any burst length less than (such as 4, 8, 16 byte) or equal to 32 byte to transfer data.
Therefore, I think this two fileds are needed. Do you think about it?
From: Felipe Balbi <balbi@kernel.org> Date: 2017-01-17 10:47:26
Hi,
Jerry Huang [off-list ref] writes:
<snip>
quoted
quoted
quoted
So, I think we still need two vaue to specify INCRBrstEna and INCRx
burst type.
Hi, Balbi,
It seems there is no feedback for my comment, so these patches can be
accepted?
probably not, we need to really understand what information we need so it
can be described properly. The last thing we want is unnecessary DT
properties.
It seems to me that we can extrapolate INCRBrstEna based on which burst
modes are enabled. If only 0 is passed, then that bit should be 1, if 0 and any
other size is passed, then that bit should be 0, no?
Hi, Balbi,
Below is the definition for this property,
snps,incr-burst-type-adjustment = <x>, <y>
x: Undefined Length INCR Burst Type Enable (INCRBrstEna)
0 - INCRX burst mode (not enable INCRBrstEna)
1 - INCR (undefined length) burst mode (enable INCRBrstEna)
y: the burst length
1> if x = 0: means INCRBrstEna not enabled, set bit0 to zero (or clear
it) , we select one of
INCR1/INCR4/INCR8/INCR16/INCR32/INCR64/INCR128/INCR256 (pass this
value through "y")to set the fix burst length controller supported.
For example:
snps,incr-burst-type-adjustment = <0>, <16>
driver will set bit0 to zero and set bit3 to 1 (INCR16 Burst Type
Enabled), controller will use INCR16 (with 16 bytes) to transfer data.
2> if x = 1: means INCRBrstEna enabled, we select one of
INCR4/INCR8/INCR16/INCR32/INCR64/INCR128/INCR256 (pass this value
through "y") to set the burst length, and controller will use any
length less than or equal to that we selected.
For example:
snps,incr-burst-type-adjustment = <1>, <32>
driver will set bit0 to 1 and set bit4 to 1 (INCR32 Burst Type
Enabled), controller will use any burst length less than (such as 4,
8, 16 byte) or equal to 32 byte to transfer data.
Therefore, I think this two fileds are needed. Do you think about it?
no, I don't think two values are needed, because first value can be
extrapolated from the second. Something like this:
snps,incr-burst-type-adjustment = <4>, <8>, <16>, <32>;
This is basically telling us that we can support anything in this
list. So INCRBrstEna should be set to 1.
If DT, on the other hand, says:
snps,incr-burst-type-adjustment = <32>;
this means that we can only support INCR32, so INCRBrstEna should be
cleared to 0.
--
balbi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20170117/596669fd/attachment.sig>
From: Jerry Huang <hidden> Date: 2017-01-17 11:09:27
-----Original Message-----
From: Felipe Balbi [mailto:balbi at kernel.org]
Sent: Tuesday, January 17, 2017 6:45 PM
To: Jerry Huang <redacted>; Rob Herring <robh@kernel.org>
Cc: mark.rutland at arm.com; catalin.marinas at arm.com;
will.deacon at arm.com; linux at armlinux.org.uk; devicetree at vger.kernel.org;
linux-usb at vger.kernel.org; linux-kernel at vger.kernel.org; linux-arm-
kernel at lists.infradead.org
Subject: RE: [PATCH v3 2/3] USB3/DWC3: Add property "snps, incr-burst-
type-adjustment" for INCR burst type
Hi,
Jerry Huang [off-list ref] writes:
<snip>
quoted
quoted
quoted
quoted
So, I think we still need two vaue to specify INCRBrstEna and
INCRx burst type.
Hi, Balbi,
It seems there is no feedback for my comment, so these patches can
be
accepted?
probably not, we need to really understand what information we need
so it can be described properly. The last thing we want is
unnecessary DT properties.
It seems to me that we can extrapolate INCRBrstEna based on which
burst modes are enabled. If only 0 is passed, then that bit should be
1, if 0 and any other size is passed, then that bit should be 0, no?
Hi, Balbi,
Below is the definition for this property,
snps,incr-burst-type-adjustment = <x>, <y>
x: Undefined Length INCR Burst Type Enable (INCRBrstEna)
0 - INCRX burst mode (not enable INCRBrstEna)
1 - INCR (undefined length) burst mode (enable INCRBrstEna)
y: the burst length
1> if x = 0: means INCRBrstEna not enabled, set bit0 to zero (or clear
it) , we select one of
INCR1/INCR4/INCR8/INCR16/INCR32/INCR64/INCR128/INCR256 (pass this
value through "y")to set the fix burst length controller supported.
For example:
snps,incr-burst-type-adjustment = <0>, <16>
driver will set bit0 to zero and set bit3 to 1 (INCR16 Burst Type
Enabled), controller will use INCR16 (with 16 bytes) to transfer data.
2> if x = 1: means INCRBrstEna enabled, we select one of
INCR4/INCR8/INCR16/INCR32/INCR64/INCR128/INCR256 (pass this value
through "y") to set the burst length, and controller will use any
length less than or equal to that we selected.
For example:
snps,incr-burst-type-adjustment = <1>, <32>
driver will set bit0 to 1 and set bit4 to 1 (INCR32 Burst Type
Enabled), controller will use any burst length less than (such as 4,
8, 16 byte) or equal to 32 byte to transfer data.
Therefore, I think this two fileds are needed. Do you think about it?
no, I don't think two values are needed, because first value can be
extrapolated from the second. Something like this:
snps,incr-burst-type-adjustment = <4>, <8>, <16>, <32>;
This is basically telling us that we can support anything in this list. So
INCRBrstEna should be set to 1.
If DT, on the other hand, says:
snps,incr-burst-type-adjustment = <32>;
this means that we can only support INCR32, so INCRBrstEna should be
cleared to 0.
Got it, I will try this mode.
Thanks a lot, Balbi,
From: Rob Herring <robh@kernel.org> Date: 2017-01-21 20:21:56
On Tue, Jan 3, 2017 at 8:24 PM, Jerry Huang [off-list ref] wrote:
Hi, Rob,
quoted
-----Original Message-----
From: Rob Herring [mailto:robh at kernel.org]
Sent: Wednesday, January 04, 2017 5:24 AM
To: Jerry Huang <redacted>
Cc: balbi at kernel.org; mark.rutland at arm.com; catalin.marinas at arm.com;
will.deacon at arm.com; linux at armlinux.org.uk; devicetree at vger.kernel.org;
linux-usb at vger.kernel.org; linux-kernel at vger.kernel.org; linux-arm-
kernel at lists.infradead.org
Subject: Re: [PATCH v3 2/3] USB3/DWC3: Add property "snps, incr-burst-
type-adjustment" for INCR burst type
On Thu, Dec 22, 2016 at 8:52 PM, Jerry Huang [off-list ref] wrote:
quoted
Hi, Rob,
quoted
-----Original Message-----
From: Rob Herring [mailto:robh at kernel.org]
Sent: Friday, December 23, 2016 2:45 AM
To: Jerry Huang <redacted>
Cc: balbi at kernel.org; mark.rutland at arm.com; catalin.marinas at arm.com;
will.deacon at arm.com; linux at armlinux.org.uk;
devicetree at vger.kernel.org; linux-usb at vger.kernel.org;
linux-kernel at vger.kernel.org; linux-arm- kernel at lists.infradead.org
Subject: Re: [PATCH v3 2/3] USB3/DWC3: Add property "snps,
incr-burst- type-adjustment" for INCR burst type
On Mon, Dec 19, 2016 at 05:25:53PM +0800, Changming Huang wrote:
quoted
New property "snps,incr-burst-type-adjustment = <x>, <y>" for
USB3.0
DWC3.
quoted
Field "x": 1/0 - undefined length INCR burst type enable or not;
Field
"y": INCR4/INCR8/INCR16/INCR32/INCR64/INCR128/INCR256 burst type.
While enabling undefined length INCR burst type and INCR16 burst
type, get better write performance on NXP Layerscape platform:
around 3% improvement (from 364MB/s to 375MB/s).
Signed-off-by: Changming Huang <redacted>
---
Changes in v3:
- add new property for INCR burst in usb node.
Documentation/devicetree/bindings/usb/dwc3.txt | 5 +++++
arch/arm/boot/dts/ls1021a.dtsi | 1 +
arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 3 +++
arch/arm64/boot/dts/freescale/fsl-ls2080a.dtsi | 2 ++
4 files changed, 11 insertions(+)
@@ -55,6 +55,10 @@ Optional properties: fladj_30mhz_sdbnd signal is invalid or incorrect. - <DEPRECATED> tx-fifo-resize: determines if the FIFO *has* to be
reallocated.
quoted
+ - snps,incr-burst-type-adjustment: Value for INCR burst type of
GSBUSCFG0
quoted
+ register, undefined length INCR burst type enable and INCRx type.+ First field is for undefined length INCR burst type enable or not.+ Second field is for largest INCRx type enabled.
Why do you need the first field? Is the 2nd field used if the 1st is 0?
If not, then just use the presence of the property to enable or not.
The first field is one switch.
When it is 1, means undefined length INCR burst type enabled, we can use
any length less than or equal to the largest-enabled burst length of
INCR4/8/16/32/64/128/256.
quoted
When it is zero, means INCRx burst mode enabled, we can use one fixed
burst length of 1/4/8/16/32/64/128/256 byte.
quoted
So, the 2nd field is used if the 1st is 0, we need to select one largest burst
length the USB controller can support.
quoted
If we don't want to change the value of this register (use the default value),
we don't need to add this property to usb node.
Just make this a single value with 0 meaning INCR and 4/8/16/etc being INCRx.
Maybe, I didn't describe it clearly.
According to DWC3 spec, the value "0" of field INCRBrstEna means INCRx burst mode, 1 means INCR burst mode.
Regardless of the value of INCRBrstEna [bit0], we need to modify the other field bit[1,2,3,4,5,6,7] to one INCR burst type for the platform supported.
Ad you mentioned, if we just use a single value with 0 meaning INCR and 4/8/16/etc being INCRx.
I understand totally that when it is none-zero, we can use it for INCR burst mode.
Then, when it is 0, how to select the INCRx value?
What I mean is:
<no prop> - burst disabled
0 - INCR burst. INCR is undefined length burst IIRC.
4/8/16/etc. - INCR4/INCR8/INCR16/etc.
What case does this not cover?
Rob
From: Jerry Huang <hidden> Date: 2017-02-10 15:17:44
quoted
quoted
quoted
quoted
Why do you need the first field? Is the 2nd field used if the 1st is 0?
If not, then just use the presence of the property to enable or not.
The first field is one switch.
When it is 1, means undefined length INCR burst type enabled, we
can use
any length less than or equal to the largest-enabled burst length of
INCR4/8/16/32/64/128/256.
quoted
When it is zero, means INCRx burst mode enabled, we can use one
fixed
burst length of 1/4/8/16/32/64/128/256 byte.
quoted
So, the 2nd field is used if the 1st is 0, we need to select one
largest burst
length the USB controller can support.
quoted
If we don't want to change the value of this register (use the
default value),
we don't need to add this property to usb node.
Just make this a single value with 0 meaning INCR and 4/8/16/etc being
INCRx.
quoted
Maybe, I didn't describe it clearly.
According to DWC3 spec, the value "0" of field INCRBrstEna means INCRx
burst mode, 1 means INCR burst mode.
quoted
Regardless of the value of INCRBrstEna [bit0], we need to modify the other
field bit[1,2,3,4,5,6,7] to one INCR burst type for the platform supported.
quoted
Ad you mentioned, if we just use a single value with 0 meaning INCR and
4/8/16/etc being INCRx.
quoted
I understand totally that when it is none-zero, we can use it for INCR burst
mode.
quoted
Then, when it is 0, how to select the INCRx value?
What I mean is:
<no prop> - burst disabled
Yes, I understand it.
0 - INCR burst. INCR is undefined length burst IIRC.
When INCR is undefined length, we need to set the max INCR type, too, such as when setting INCR16, controller can use any length less than or equal to the 16 byte.
4/8/16/etc. - INCR4/INCR8/INCR16/etc.
I understand it, too.
What case does this not cover?
According to Balbi's suggestion, I changed the property like below, you can see the detail in v4 (sent by 1/18/2017)
Property "snps,incr-burst-type-adjustment = <x>, <y>..." for USB3.0 DWC3.
When Just one value means INCRx mode with fix burst type.
When more than one value, means undefined length burst mode, USB controller can use the length less than or equal to the largest enabled burst length.