diff mbox

[U-Boot,v2] drivers: usb: xhci-fsl: Implement Erratum A-010151 for FSL USB3 controller

Message ID 1472035175-24052-1-git-send-email-sriram.dash@nxp.com
State Superseded
Delegated to: Marek Vasut
Headers show

Commit Message

Sriram Dash Aug. 24, 2016, 10:39 a.m. UTC
Currently the controller by default enables the Receive Detect feature in P3
mode in USB 3.0 PHY. However, USB 3.0 PHY does not reliably support receive
detection in P3 mode.
Enabling the USB3 controller to configure USB in P2 mode whenever the Receive
Detect feature is required.

Signed-off-by: Sriram Dash <sriram.dash@nxp.com>
Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
---
Changes in v2:
  - Do Soc ver checking for applying erratum

 drivers/usb/common/fsl-errata.c | 26 ++++++++++++++++++++++++++
 drivers/usb/host/xhci-dwc3.c    |  5 +++++
 drivers/usb/host/xhci-fsl.c     |  8 ++++++++
 include/fsl_usb.h               |  1 +
 include/linux/usb/dwc3.h        |  2 ++
 5 files changed, 42 insertions(+)

Comments

Marek Vasut Aug. 24, 2016, 2:59 p.m. UTC | #1
On 08/24/2016 12:39 PM, Sriram Dash wrote:
> Currently the controller by default enables the Receive Detect feature in P3
> mode in USB 3.0 PHY. However, USB 3.0 PHY does not reliably support receive
> detection in P3 mode.
> Enabling the USB3 controller to configure USB in P2 mode whenever the Receive
> Detect feature is required.
> 
> Signed-off-by: Sriram Dash <sriram.dash@nxp.com>
> Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
> ---
> Changes in v2:
>   - Do Soc ver checking for applying erratum
> 
>  drivers/usb/common/fsl-errata.c | 26 ++++++++++++++++++++++++++
>  drivers/usb/host/xhci-dwc3.c    |  5 +++++
>  drivers/usb/host/xhci-fsl.c     |  8 ++++++++
>  include/fsl_usb.h               |  1 +
>  include/linux/usb/dwc3.h        |  2 ++
>  5 files changed, 42 insertions(+)
> 
> diff --git a/drivers/usb/common/fsl-errata.c b/drivers/usb/common/fsl-errata.c
> index 183bf2b..f2bffba 100644
> --- a/drivers/usb/common/fsl-errata.c
> +++ b/drivers/usb/common/fsl-errata.c
> @@ -190,4 +190,30 @@ bool has_erratum_a008751(void)
>  	return false;
>  }
>  
> +bool has_erratum_a010151(void)
> +{
> +	u32 svr = get_svr();
> +	u32 soc = SVR_SOC_VER(svr);
> +
> +	switch (soc) {
> +#ifdef CONFIG_ARM64
> +	case SVR_LS2080A:
> +	case SVR_LS2085A:
> +	case SVR_LS1046A:
> +	case SVR_LS1012A:
> +		return IS_SVR_REV(svr, 1, 0);
> +	case SVR_LS1043A:
> +		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
> +#endif
> +#ifdef CONFIG_LS102XA
> +	case SOC_VER_LS1020:
> +	case SOC_VER_LS1021:
> +	case SOC_VER_LS1022:
> +	case SOC_VER_SLS1020:
> +		return IS_SVR_REV(svr, 2, 0);
> +#endif
> +	}

Is the ifdef really needed ?
Sriram Dash Aug. 25, 2016, 6:47 a.m. UTC | #2
>From: Marek Vasut [mailto:marex@denx.de]
>On 08/24/2016 12:39 PM, Sriram Dash wrote:
>> Currently the controller by default enables the Receive Detect feature
>> in P3 mode in USB 3.0 PHY. However, USB 3.0 PHY does not reliably
>> support receive detection in P3 mode.
>> Enabling the USB3 controller to configure USB in P2 mode whenever the
>> Receive Detect feature is required.
>>
>> Signed-off-by: Sriram Dash <sriram.dash@nxp.com>
>> Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
>> ---
>> Changes in v2:
>>   - Do Soc ver checking for applying erratum
>>
>>  drivers/usb/common/fsl-errata.c | 26 ++++++++++++++++++++++++++
>>  drivers/usb/host/xhci-dwc3.c    |  5 +++++
>>  drivers/usb/host/xhci-fsl.c     |  8 ++++++++
>>  include/fsl_usb.h               |  1 +
>>  include/linux/usb/dwc3.h        |  2 ++
>>  5 files changed, 42 insertions(+)
>>
>> diff --git a/drivers/usb/common/fsl-errata.c
>> b/drivers/usb/common/fsl-errata.c index 183bf2b..f2bffba 100644
>> --- a/drivers/usb/common/fsl-errata.c
>> +++ b/drivers/usb/common/fsl-errata.c
>> @@ -190,4 +190,30 @@ bool has_erratum_a008751(void)
>>  	return false;
>>  }
>>
>> +bool has_erratum_a010151(void)
>> +{
>> +	u32 svr = get_svr();
>> +	u32 soc = SVR_SOC_VER(svr);
>> +
>> +	switch (soc) {
>> +#ifdef CONFIG_ARM64
>> +	case SVR_LS2080A:
>> +	case SVR_LS2085A:
>> +	case SVR_LS1046A:
>> +	case SVR_LS1012A:
>> +		return IS_SVR_REV(svr, 1, 0);
>> +	case SVR_LS1043A:
>> +		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1); #endif
>> +#ifdef CONFIG_LS102XA
>> +	case SOC_VER_LS1020:
>> +	case SOC_VER_LS1021:
>> +	case SOC_VER_LS1022:
>> +	case SOC_VER_SLS1020:
>> +		return IS_SVR_REV(svr, 2, 0);
>> +#endif
>> +	}
>
>Is the ifdef really needed ?
>

Yes. The SVR (SVR_LS2080A, SOC_VER_LS1020) are defined in different ARCH
specific files. So, we have used the ifdefs.

>--
>Best regards,
>Marek Vasut
Marek Vasut Aug. 26, 2016, 9:06 a.m. UTC | #3
On 08/25/2016 08:47 AM, Sriram Dash wrote:
>> From: Marek Vasut [mailto:marex@denx.de]
>> On 08/24/2016 12:39 PM, Sriram Dash wrote:
>>> Currently the controller by default enables the Receive Detect feature
>>> in P3 mode in USB 3.0 PHY. However, USB 3.0 PHY does not reliably
>>> support receive detection in P3 mode.
>>> Enabling the USB3 controller to configure USB in P2 mode whenever the
>>> Receive Detect feature is required.
>>>
>>> Signed-off-by: Sriram Dash <sriram.dash@nxp.com>
>>> Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
>>> ---
>>> Changes in v2:
>>>   - Do Soc ver checking for applying erratum
>>>
>>>  drivers/usb/common/fsl-errata.c | 26 ++++++++++++++++++++++++++
>>>  drivers/usb/host/xhci-dwc3.c    |  5 +++++
>>>  drivers/usb/host/xhci-fsl.c     |  8 ++++++++
>>>  include/fsl_usb.h               |  1 +
>>>  include/linux/usb/dwc3.h        |  2 ++
>>>  5 files changed, 42 insertions(+)
>>>
>>> diff --git a/drivers/usb/common/fsl-errata.c
>>> b/drivers/usb/common/fsl-errata.c index 183bf2b..f2bffba 100644
>>> --- a/drivers/usb/common/fsl-errata.c
>>> +++ b/drivers/usb/common/fsl-errata.c
>>> @@ -190,4 +190,30 @@ bool has_erratum_a008751(void)
>>>  	return false;
>>>  }
>>>
>>> +bool has_erratum_a010151(void)
>>> +{
>>> +	u32 svr = get_svr();
>>> +	u32 soc = SVR_SOC_VER(svr);
>>> +
>>> +	switch (soc) {
>>> +#ifdef CONFIG_ARM64
>>> +	case SVR_LS2080A:
>>> +	case SVR_LS2085A:
>>> +	case SVR_LS1046A:
>>> +	case SVR_LS1012A:
>>> +		return IS_SVR_REV(svr, 1, 0);
>>> +	case SVR_LS1043A:
>>> +		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1); #endif
>>> +#ifdef CONFIG_LS102XA
>>> +	case SOC_VER_LS1020:
>>> +	case SOC_VER_LS1021:
>>> +	case SOC_VER_LS1022:
>>> +	case SOC_VER_SLS1020:
>>> +		return IS_SVR_REV(svr, 2, 0);
>>> +#endif
>>> +	}
>>
>> Is the ifdef really needed ?
>>
> 
> Yes. The SVR (SVR_LS2080A, SOC_VER_LS1020) are defined in different ARCH
> specific files. So, we have used the ifdefs.

Or you can just include all of the headers and then you don't need the
ifdef, no ?
Sriram Dash Aug. 26, 2016, 10:31 a.m. UTC | #4
>From: Marek Vasut [mailto:marex@denx.de]
>On 08/25/2016 08:47 AM, Sriram Dash wrote:
>>> From: Marek Vasut [mailto:marex@denx.de] On 08/24/2016 12:39 PM,
>>> Sriram Dash wrote:
>>>> Currently the controller by default enables the Receive Detect
>>>> feature in P3 mode in USB 3.0 PHY. However, USB 3.0 PHY does not
>>>> reliably support receive detection in P3 mode.
>>>> Enabling the USB3 controller to configure USB in P2 mode whenever
>>>> the Receive Detect feature is required.
>>>>
>>>> Signed-off-by: Sriram Dash <sriram.dash@nxp.com>
>>>> Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
>>>> ---
>>>> Changes in v2:
>>>>   - Do Soc ver checking for applying erratum
>>>>
>>>>  drivers/usb/common/fsl-errata.c | 26 ++++++++++++++++++++++++++
>>>>  drivers/usb/host/xhci-dwc3.c    |  5 +++++
>>>>  drivers/usb/host/xhci-fsl.c     |  8 ++++++++
>>>>  include/fsl_usb.h               |  1 +
>>>>  include/linux/usb/dwc3.h        |  2 ++
>>>>  5 files changed, 42 insertions(+)
>>>>
>>>> diff --git a/drivers/usb/common/fsl-errata.c
>>>> b/drivers/usb/common/fsl-errata.c index 183bf2b..f2bffba 100644
>>>> --- a/drivers/usb/common/fsl-errata.c
>>>> +++ b/drivers/usb/common/fsl-errata.c
>>>> @@ -190,4 +190,30 @@ bool has_erratum_a008751(void)
>>>>  	return false;
>>>>  }
>>>>
>>>> +bool has_erratum_a010151(void)
>>>> +{
>>>> +	u32 svr = get_svr();
>>>> +	u32 soc = SVR_SOC_VER(svr);
>>>> +
>>>> +	switch (soc) {
>>>> +#ifdef CONFIG_ARM64
>>>> +	case SVR_LS2080A:
>>>> +	case SVR_LS2085A:
>>>> +	case SVR_LS1046A:
>>>> +	case SVR_LS1012A:
>>>> +		return IS_SVR_REV(svr, 1, 0);
>>>> +	case SVR_LS1043A:
>>>> +		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1); #endif
>>>> +#ifdef CONFIG_LS102XA
>>>> +	case SOC_VER_LS1020:
>>>> +	case SOC_VER_LS1021:
>>>> +	case SOC_VER_LS1022:
>>>> +	case SOC_VER_SLS1020:
>>>> +		return IS_SVR_REV(svr, 2, 0);
>>>> +#endif
>>>> +	}
>>>
>>> Is the ifdef really needed ?
>>>
>>
>> Yes. The SVR (SVR_LS2080A, SOC_VER_LS1020) are defined in different
>> ARCH specific files. So, we have used the ifdefs.
>
>Or you can just include all of the headers and then you don't need the ifdef, no ?
>

The headers for the respective ARCHs are included in fsl_errata.h file. But,
there are some macros/structs/variables which are common across
the ARCHs, for example: DCFG_DCSR_PORCR1, RCW_SB_EN_REG_INDEX,
sys_info, etc. So, they are also kept inside the ifdefs.

>--
>Best regards,
>Marek Vasut
Marek Vasut Aug. 26, 2016, 10:51 a.m. UTC | #5
On 08/26/2016 12:31 PM, Sriram Dash wrote:
>> From: Marek Vasut [mailto:marex@denx.de]
>> On 08/25/2016 08:47 AM, Sriram Dash wrote:
>>>> From: Marek Vasut [mailto:marex@denx.de] On 08/24/2016 12:39 PM,
>>>> Sriram Dash wrote:
>>>>> Currently the controller by default enables the Receive Detect
>>>>> feature in P3 mode in USB 3.0 PHY. However, USB 3.0 PHY does not
>>>>> reliably support receive detection in P3 mode.
>>>>> Enabling the USB3 controller to configure USB in P2 mode whenever
>>>>> the Receive Detect feature is required.
>>>>>
>>>>> Signed-off-by: Sriram Dash <sriram.dash@nxp.com>
>>>>> Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
>>>>> ---
>>>>> Changes in v2:
>>>>>   - Do Soc ver checking for applying erratum
>>>>>
>>>>>  drivers/usb/common/fsl-errata.c | 26 ++++++++++++++++++++++++++
>>>>>  drivers/usb/host/xhci-dwc3.c    |  5 +++++
>>>>>  drivers/usb/host/xhci-fsl.c     |  8 ++++++++
>>>>>  include/fsl_usb.h               |  1 +
>>>>>  include/linux/usb/dwc3.h        |  2 ++
>>>>>  5 files changed, 42 insertions(+)
>>>>>
>>>>> diff --git a/drivers/usb/common/fsl-errata.c
>>>>> b/drivers/usb/common/fsl-errata.c index 183bf2b..f2bffba 100644
>>>>> --- a/drivers/usb/common/fsl-errata.c
>>>>> +++ b/drivers/usb/common/fsl-errata.c
>>>>> @@ -190,4 +190,30 @@ bool has_erratum_a008751(void)
>>>>>  	return false;
>>>>>  }
>>>>>
>>>>> +bool has_erratum_a010151(void)
>>>>> +{
>>>>> +	u32 svr = get_svr();
>>>>> +	u32 soc = SVR_SOC_VER(svr);
>>>>> +
>>>>> +	switch (soc) {
>>>>> +#ifdef CONFIG_ARM64
>>>>> +	case SVR_LS2080A:
>>>>> +	case SVR_LS2085A:
>>>>> +	case SVR_LS1046A:
>>>>> +	case SVR_LS1012A:
>>>>> +		return IS_SVR_REV(svr, 1, 0);
>>>>> +	case SVR_LS1043A:
>>>>> +		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1); #endif
>>>>> +#ifdef CONFIG_LS102XA
>>>>> +	case SOC_VER_LS1020:
>>>>> +	case SOC_VER_LS1021:
>>>>> +	case SOC_VER_LS1022:
>>>>> +	case SOC_VER_SLS1020:
>>>>> +		return IS_SVR_REV(svr, 2, 0);
>>>>> +#endif
>>>>> +	}
>>>>
>>>> Is the ifdef really needed ?
>>>>
>>>
>>> Yes. The SVR (SVR_LS2080A, SOC_VER_LS1020) are defined in different
>>> ARCH specific files. So, we have used the ifdefs.
>>
>> Or you can just include all of the headers and then you don't need the ifdef, no ?
>>
> 
> The headers for the respective ARCHs are included in fsl_errata.h file. But,
> there are some macros/structs/variables which are common across
> the ARCHs, for example: DCFG_DCSR_PORCR1, RCW_SB_EN_REG_INDEX,
> sys_info, etc. So, they are also kept inside the ifdefs.

I don't understand your argument. What happens if you remove the ifdefs?
Sriram Dash Aug. 26, 2016, 10:57 a.m. UTC | #6
>From: Marek Vasut [mailto:marex@denx.de]
>On 08/26/2016 12:31 PM, Sriram Dash wrote:
>>> From: Marek Vasut [mailto:marex@denx.de] On 08/25/2016 08:47 AM,
>>> Sriram Dash wrote:
>>>>> From: Marek Vasut [mailto:marex@denx.de] On 08/24/2016 12:39 PM,
>>>>> Sriram Dash wrote:
>>>>>> Currently the controller by default enables the Receive Detect
>>>>>> feature in P3 mode in USB 3.0 PHY. However, USB 3.0 PHY does not
>>>>>> reliably support receive detection in P3 mode.
>>>>>> Enabling the USB3 controller to configure USB in P2 mode whenever
>>>>>> the Receive Detect feature is required.
>>>>>>
>>>>>> Signed-off-by: Sriram Dash <sriram.dash@nxp.com>
>>>>>> Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
>>>>>> ---
>>>>>> Changes in v2:
>>>>>>   - Do Soc ver checking for applying erratum
>>>>>>
>>>>>>  drivers/usb/common/fsl-errata.c | 26 ++++++++++++++++++++++++++
>>>>>>  drivers/usb/host/xhci-dwc3.c    |  5 +++++
>>>>>>  drivers/usb/host/xhci-fsl.c     |  8 ++++++++
>>>>>>  include/fsl_usb.h               |  1 +
>>>>>>  include/linux/usb/dwc3.h        |  2 ++
>>>>>>  5 files changed, 42 insertions(+)
>>>>>>
>>>>>> diff --git a/drivers/usb/common/fsl-errata.c
>>>>>> b/drivers/usb/common/fsl-errata.c index 183bf2b..f2bffba 100644
>>>>>> --- a/drivers/usb/common/fsl-errata.c
>>>>>> +++ b/drivers/usb/common/fsl-errata.c
>>>>>> @@ -190,4 +190,30 @@ bool has_erratum_a008751(void)
>>>>>>  	return false;
>>>>>>  }
>>>>>>
>>>>>> +bool has_erratum_a010151(void)
>>>>>> +{
>>>>>> +	u32 svr = get_svr();
>>>>>> +	u32 soc = SVR_SOC_VER(svr);
>>>>>> +
>>>>>> +	switch (soc) {
>>>>>> +#ifdef CONFIG_ARM64
>>>>>> +	case SVR_LS2080A:
>>>>>> +	case SVR_LS2085A:
>>>>>> +	case SVR_LS1046A:
>>>>>> +	case SVR_LS1012A:
>>>>>> +		return IS_SVR_REV(svr, 1, 0);
>>>>>> +	case SVR_LS1043A:
>>>>>> +		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1); #endif
>>>>>> +#ifdef CONFIG_LS102XA
>>>>>> +	case SOC_VER_LS1020:
>>>>>> +	case SOC_VER_LS1021:
>>>>>> +	case SOC_VER_LS1022:
>>>>>> +	case SOC_VER_SLS1020:
>>>>>> +		return IS_SVR_REV(svr, 2, 0);
>>>>>> +#endif
>>>>>> +	}
>>>>>
>>>>> Is the ifdef really needed ?
>>>>>
>>>>
>>>> Yes. The SVR (SVR_LS2080A, SOC_VER_LS1020) are defined in different
>>>> ARCH specific files. So, we have used the ifdefs.
>>>
>>> Or you can just include all of the headers and then you don't need the ifdef, no ?
>>>
>>
>> The headers for the respective ARCHs are included in fsl_errata.h
>> file. But, there are some macros/structs/variables which are common
>> across the ARCHs, for example: DCFG_DCSR_PORCR1, RCW_SB_EN_REG_INDEX,
>> sys_info, etc. So, they are also kept inside the ifdefs.
>
>I don't understand your argument. What happens if you remove the ifdefs?
>

The fsl_errata.h file includes the headers asm/processor.h(for PPC),
asm/arch-ls102xa/immap_ls102xa.h( for LS1), asm/arch/soc.h(for Layerscape).
As some macros/structs are common across the ARCH, if we remove the ifdefs,
we may experience compilation error on redefinition of the macros and structs.
So, the ifdefs are necessary.

>--
>Best regards,
>Marek Vasut
Marek Vasut Aug. 26, 2016, 11:02 a.m. UTC | #7
On 08/26/2016 12:57 PM, Sriram Dash wrote:
>> From: Marek Vasut [mailto:marex@denx.de]
>> On 08/26/2016 12:31 PM, Sriram Dash wrote:
>>>> From: Marek Vasut [mailto:marex@denx.de] On 08/25/2016 08:47 AM,
>>>> Sriram Dash wrote:
>>>>>> From: Marek Vasut [mailto:marex@denx.de] On 08/24/2016 12:39 PM,
>>>>>> Sriram Dash wrote:
>>>>>>> Currently the controller by default enables the Receive Detect
>>>>>>> feature in P3 mode in USB 3.0 PHY. However, USB 3.0 PHY does not
>>>>>>> reliably support receive detection in P3 mode.
>>>>>>> Enabling the USB3 controller to configure USB in P2 mode whenever
>>>>>>> the Receive Detect feature is required.
>>>>>>>
>>>>>>> Signed-off-by: Sriram Dash <sriram.dash@nxp.com>
>>>>>>> Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
>>>>>>> ---
>>>>>>> Changes in v2:
>>>>>>>   - Do Soc ver checking for applying erratum
>>>>>>>
>>>>>>>  drivers/usb/common/fsl-errata.c | 26 ++++++++++++++++++++++++++
>>>>>>>  drivers/usb/host/xhci-dwc3.c    |  5 +++++
>>>>>>>  drivers/usb/host/xhci-fsl.c     |  8 ++++++++
>>>>>>>  include/fsl_usb.h               |  1 +
>>>>>>>  include/linux/usb/dwc3.h        |  2 ++
>>>>>>>  5 files changed, 42 insertions(+)
>>>>>>>
>>>>>>> diff --git a/drivers/usb/common/fsl-errata.c
>>>>>>> b/drivers/usb/common/fsl-errata.c index 183bf2b..f2bffba 100644
>>>>>>> --- a/drivers/usb/common/fsl-errata.c
>>>>>>> +++ b/drivers/usb/common/fsl-errata.c
>>>>>>> @@ -190,4 +190,30 @@ bool has_erratum_a008751(void)
>>>>>>>  	return false;
>>>>>>>  }
>>>>>>>
>>>>>>> +bool has_erratum_a010151(void)
>>>>>>> +{
>>>>>>> +	u32 svr = get_svr();
>>>>>>> +	u32 soc = SVR_SOC_VER(svr);
>>>>>>> +
>>>>>>> +	switch (soc) {
>>>>>>> +#ifdef CONFIG_ARM64
>>>>>>> +	case SVR_LS2080A:
>>>>>>> +	case SVR_LS2085A:
>>>>>>> +	case SVR_LS1046A:
>>>>>>> +	case SVR_LS1012A:
>>>>>>> +		return IS_SVR_REV(svr, 1, 0);
>>>>>>> +	case SVR_LS1043A:
>>>>>>> +		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1); #endif
>>>>>>> +#ifdef CONFIG_LS102XA
>>>>>>> +	case SOC_VER_LS1020:
>>>>>>> +	case SOC_VER_LS1021:
>>>>>>> +	case SOC_VER_LS1022:
>>>>>>> +	case SOC_VER_SLS1020:
>>>>>>> +		return IS_SVR_REV(svr, 2, 0);
>>>>>>> +#endif
>>>>>>> +	}
>>>>>>
>>>>>> Is the ifdef really needed ?
>>>>>>
>>>>>
>>>>> Yes. The SVR (SVR_LS2080A, SOC_VER_LS1020) are defined in different
>>>>> ARCH specific files. So, we have used the ifdefs.
>>>>
>>>> Or you can just include all of the headers and then you don't need the ifdef, no ?
>>>>
>>>
>>> The headers for the respective ARCHs are included in fsl_errata.h
>>> file. But, there are some macros/structs/variables which are common
>>> across the ARCHs, for example: DCFG_DCSR_PORCR1, RCW_SB_EN_REG_INDEX,
>>> sys_info, etc. So, they are also kept inside the ifdefs.
>>
>> I don't understand your argument. What happens if you remove the ifdefs?
>>
> 
> The fsl_errata.h file includes the headers asm/processor.h(for PPC),
> asm/arch-ls102xa/immap_ls102xa.h( for LS1), asm/arch/soc.h(for Layerscape).
> As some macros/structs are common across the ARCH, if we remove the ifdefs,
> we may

may or will ?

> experience compilation error on redefinition of the macros and structs.

And these are not easy to fix ?

> So, the ifdefs are necessary.
> 
>> --
>> Best regards,
>> Marek Vasut
Sriram Dash Aug. 26, 2016, 11:21 a.m. UTC | #8
>From: Marek Vasut [mailto:marex@denx.de]
>On 08/26/2016 12:57 PM, Sriram Dash wrote:
>>> From: Marek Vasut [mailto:marex@denx.de] On 08/26/2016 12:31 PM,
>>> Sriram Dash wrote:
>>>>> From: Marek Vasut [mailto:marex@denx.de] On 08/25/2016 08:47 AM,
>>>>> Sriram Dash wrote:
>>>>>>> From: Marek Vasut [mailto:marex@denx.de] On 08/24/2016 12:39 PM,
>>>>>>> Sriram Dash wrote:
>>>>>>>> Currently the controller by default enables the Receive Detect
>>>>>>>> feature in P3 mode in USB 3.0 PHY. However, USB 3.0 PHY does not
>>>>>>>> reliably support receive detection in P3 mode.
>>>>>>>> Enabling the USB3 controller to configure USB in P2 mode
>>>>>>>> whenever the Receive Detect feature is required.
>>>>>>>>
>>>>>>>> Signed-off-by: Sriram Dash <sriram.dash@nxp.com>
>>>>>>>> Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
>>>>>>>> ---
>>>>>>>> Changes in v2:
>>>>>>>>   - Do Soc ver checking for applying erratum
>>>>>>>>
>>>>>>>>  drivers/usb/common/fsl-errata.c | 26 ++++++++++++++++++++++++++
>>>>>>>>  drivers/usb/host/xhci-dwc3.c    |  5 +++++
>>>>>>>>  drivers/usb/host/xhci-fsl.c     |  8 ++++++++
>>>>>>>>  include/fsl_usb.h               |  1 +
>>>>>>>>  include/linux/usb/dwc3.h        |  2 ++
>>>>>>>>  5 files changed, 42 insertions(+)
>>>>>>>>
>>>>>>>> diff --git a/drivers/usb/common/fsl-errata.c
>>>>>>>> b/drivers/usb/common/fsl-errata.c index 183bf2b..f2bffba 100644
>>>>>>>> --- a/drivers/usb/common/fsl-errata.c
>>>>>>>> +++ b/drivers/usb/common/fsl-errata.c
>>>>>>>> @@ -190,4 +190,30 @@ bool has_erratum_a008751(void)
>>>>>>>>  	return false;
>>>>>>>>  }
>>>>>>>>
>>>>>>>> +bool has_erratum_a010151(void)
>>>>>>>> +{
>>>>>>>> +	u32 svr = get_svr();
>>>>>>>> +	u32 soc = SVR_SOC_VER(svr);
>>>>>>>> +
>>>>>>>> +	switch (soc) {
>>>>>>>> +#ifdef CONFIG_ARM64
>>>>>>>> +	case SVR_LS2080A:
>>>>>>>> +	case SVR_LS2085A:
>>>>>>>> +	case SVR_LS1046A:
>>>>>>>> +	case SVR_LS1012A:
>>>>>>>> +		return IS_SVR_REV(svr, 1, 0);
>>>>>>>> +	case SVR_LS1043A:
>>>>>>>> +		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
>#endif
>>>>>>>> +#ifdef CONFIG_LS102XA
>>>>>>>> +	case SOC_VER_LS1020:
>>>>>>>> +	case SOC_VER_LS1021:
>>>>>>>> +	case SOC_VER_LS1022:
>>>>>>>> +	case SOC_VER_SLS1020:
>>>>>>>> +		return IS_SVR_REV(svr, 2, 0); #endif
>>>>>>>> +	}
>>>>>>>
>>>>>>> Is the ifdef really needed ?
>>>>>>>
>>>>>>
>>>>>> Yes. The SVR (SVR_LS2080A, SOC_VER_LS1020) are defined in
>>>>>> different ARCH specific files. So, we have used the ifdefs.
>>>>>
>>>>> Or you can just include all of the headers and then you don't need the ifdef, no
>?
>>>>>
>>>>
>>>> The headers for the respective ARCHs are included in fsl_errata.h
>>>> file. But, there are some macros/structs/variables which are common
>>>> across the ARCHs, for example: DCFG_DCSR_PORCR1,
>>>> RCW_SB_EN_REG_INDEX, sys_info, etc. So, they are also kept inside the ifdefs.
>>>
>>> I don't understand your argument. What happens if you remove the ifdefs?
>>>
>>
>> The fsl_errata.h file includes the headers asm/processor.h(for PPC),
>> asm/arch-ls102xa/immap_ls102xa.h( for LS1), asm/arch/soc.h(for Layerscape).
>> As some macros/structs are common across the ARCH, if we remove the
>> ifdefs, we may
>
>may or will ?
>

They will cause compilation issues.

>> experience compilation error on redefinition of the macros and structs.
>
>And these are not easy to fix ?
>

There will be many ARCH specific modifications required for carrying
out the changes involving a lot of affected Socs. We will take it up in
the near future.

>> So, the ifdefs are necessary.
>>
>>> --
>>> Best regards,
>>> Marek Vasut
>
>
>--
>Best regards,
>Marek Vasut
Marek Vasut Aug. 26, 2016, 12:02 p.m. UTC | #9
On 08/26/2016 01:21 PM, Sriram Dash wrote:
>> From: Marek Vasut [mailto:marex@denx.de]
>> On 08/26/2016 12:57 PM, Sriram Dash wrote:
>>>> From: Marek Vasut [mailto:marex@denx.de] On 08/26/2016 12:31 PM,
>>>> Sriram Dash wrote:
>>>>>> From: Marek Vasut [mailto:marex@denx.de] On 08/25/2016 08:47 AM,
>>>>>> Sriram Dash wrote:
>>>>>>>> From: Marek Vasut [mailto:marex@denx.de] On 08/24/2016 12:39 PM,
>>>>>>>> Sriram Dash wrote:
>>>>>>>>> Currently the controller by default enables the Receive Detect
>>>>>>>>> feature in P3 mode in USB 3.0 PHY. However, USB 3.0 PHY does not
>>>>>>>>> reliably support receive detection in P3 mode.
>>>>>>>>> Enabling the USB3 controller to configure USB in P2 mode
>>>>>>>>> whenever the Receive Detect feature is required.
>>>>>>>>>
>>>>>>>>> Signed-off-by: Sriram Dash <sriram.dash@nxp.com>
>>>>>>>>> Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
>>>>>>>>> ---
>>>>>>>>> Changes in v2:
>>>>>>>>>   - Do Soc ver checking for applying erratum
>>>>>>>>>
>>>>>>>>>  drivers/usb/common/fsl-errata.c | 26 ++++++++++++++++++++++++++
>>>>>>>>>  drivers/usb/host/xhci-dwc3.c    |  5 +++++
>>>>>>>>>  drivers/usb/host/xhci-fsl.c     |  8 ++++++++
>>>>>>>>>  include/fsl_usb.h               |  1 +
>>>>>>>>>  include/linux/usb/dwc3.h        |  2 ++
>>>>>>>>>  5 files changed, 42 insertions(+)
>>>>>>>>>
>>>>>>>>> diff --git a/drivers/usb/common/fsl-errata.c
>>>>>>>>> b/drivers/usb/common/fsl-errata.c index 183bf2b..f2bffba 100644
>>>>>>>>> --- a/drivers/usb/common/fsl-errata.c
>>>>>>>>> +++ b/drivers/usb/common/fsl-errata.c
>>>>>>>>> @@ -190,4 +190,30 @@ bool has_erratum_a008751(void)
>>>>>>>>>  	return false;
>>>>>>>>>  }
>>>>>>>>>
>>>>>>>>> +bool has_erratum_a010151(void)
>>>>>>>>> +{
>>>>>>>>> +	u32 svr = get_svr();
>>>>>>>>> +	u32 soc = SVR_SOC_VER(svr);
>>>>>>>>> +
>>>>>>>>> +	switch (soc) {
>>>>>>>>> +#ifdef CONFIG_ARM64
>>>>>>>>> +	case SVR_LS2080A:
>>>>>>>>> +	case SVR_LS2085A:
>>>>>>>>> +	case SVR_LS1046A:
>>>>>>>>> +	case SVR_LS1012A:
>>>>>>>>> +		return IS_SVR_REV(svr, 1, 0);
>>>>>>>>> +	case SVR_LS1043A:
>>>>>>>>> +		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
>> #endif
>>>>>>>>> +#ifdef CONFIG_LS102XA
>>>>>>>>> +	case SOC_VER_LS1020:
>>>>>>>>> +	case SOC_VER_LS1021:
>>>>>>>>> +	case SOC_VER_LS1022:
>>>>>>>>> +	case SOC_VER_SLS1020:
>>>>>>>>> +		return IS_SVR_REV(svr, 2, 0); #endif
>>>>>>>>> +	}
>>>>>>>>
>>>>>>>> Is the ifdef really needed ?
>>>>>>>>
>>>>>>>
>>>>>>> Yes. The SVR (SVR_LS2080A, SOC_VER_LS1020) are defined in
>>>>>>> different ARCH specific files. So, we have used the ifdefs.
>>>>>>
>>>>>> Or you can just include all of the headers and then you don't need the ifdef, no
>> ?
>>>>>>
>>>>>
>>>>> The headers for the respective ARCHs are included in fsl_errata.h
>>>>> file. But, there are some macros/structs/variables which are common
>>>>> across the ARCHs, for example: DCFG_DCSR_PORCR1,
>>>>> RCW_SB_EN_REG_INDEX, sys_info, etc. So, they are also kept inside the ifdefs.
>>>>
>>>> I don't understand your argument. What happens if you remove the ifdefs?
>>>>
>>>
>>> The fsl_errata.h file includes the headers asm/processor.h(for PPC),
>>> asm/arch-ls102xa/immap_ls102xa.h( for LS1), asm/arch/soc.h(for Layerscape).
>>> As some macros/structs are common across the ARCH, if we remove the
>>> ifdefs, we may
>>
>> may or will ?
>>
> 
> They will cause compilation issues.

I see.

>>> experience compilation error on redefinition of the macros and structs.
>>
>> And these are not easy to fix ?
>>
> 
> There will be many ARCH specific modifications required for carrying
> out the changes involving a lot of affected Socs. We will take it up in
> the near future.

Right.

>>> So, the ifdefs are necessary.
>>>
>>>> --
>>>> Best regards,
>>>> Marek Vasut
>>
>>
>> --
>> Best regards,
>> Marek Vasut
Marek Vasut Aug. 26, 2016, 12:05 p.m. UTC | #10
On 08/24/2016 12:39 PM, Sriram Dash wrote:
> Currently the controller by default enables the Receive Detect feature in P3
> mode in USB 3.0 PHY. However, USB 3.0 PHY does not reliably support receive
> detection in P3 mode.
> Enabling the USB3 controller to configure USB in P2 mode whenever the Receive
> Detect feature is required.
> 
> Signed-off-by: Sriram Dash <sriram.dash@nxp.com>
> Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
> ---
> Changes in v2:
>   - Do Soc ver checking for applying erratum

I tried applying this on u-boot-usb/next , but it fails to apply, please
fix and repost.
Sriram Dash Aug. 26, 2016, 2:27 p.m. UTC | #11
>From: Marek Vasut [mailto:marex@denx.de]
>On 08/24/2016 12:39 PM, Sriram Dash wrote:
>> Currently the controller by default enables the Receive Detect feature
>> in P3 mode in USB 3.0 PHY. However, USB 3.0 PHY does not reliably
>> support receive detection in P3 mode.
>> Enabling the USB3 controller to configure USB in P2 mode whenever the
>> Receive Detect feature is required.
>>
>> Signed-off-by: Sriram Dash <sriram.dash@nxp.com>
>> Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
>> ---
>> Changes in v2:
>>   - Do Soc ver checking for applying erratum
>
>I tried applying this on u-boot-usb/next , but it fails to apply, please fix and repost.
>

It might be conflicting with the patch for changing burst beat
"drivers: usb: xhci-fsl: Change burst beat and outstanding pipelined transfers requests".
https://patchwork.ozlabs.org/patch/661426/
I will repost with the burst beat setting applied earlier.

>--
>Best regards,
>Marek Vasut
Marek Vasut Aug. 26, 2016, 2:32 p.m. UTC | #12
On 08/26/2016 04:27 PM, Sriram Dash wrote:
>> From: Marek Vasut [mailto:marex@denx.de]
>> On 08/24/2016 12:39 PM, Sriram Dash wrote:
>>> Currently the controller by default enables the Receive Detect feature
>>> in P3 mode in USB 3.0 PHY. However, USB 3.0 PHY does not reliably
>>> support receive detection in P3 mode.
>>> Enabling the USB3 controller to configure USB in P2 mode whenever the
>>> Receive Detect feature is required.
>>>
>>> Signed-off-by: Sriram Dash <sriram.dash@nxp.com>
>>> Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
>>> ---
>>> Changes in v2:
>>>   - Do Soc ver checking for applying erratum
>>
>> I tried applying this on u-boot-usb/next , but it fails to apply, please fix and repost.
>>
> 
> It might be conflicting with the patch for changing burst beat
> "drivers: usb: xhci-fsl: Change burst beat and outstanding pipelined transfers requests".
> https://patchwork.ozlabs.org/patch/661426/

Great, I already applied that one.

> I will repost with the burst beat setting applied earlier.

No, please fix this patch.

>> --
>> Best regards,
>> Marek Vasut
diff mbox

Patch

diff --git a/drivers/usb/common/fsl-errata.c b/drivers/usb/common/fsl-errata.c
index 183bf2b..f2bffba 100644
--- a/drivers/usb/common/fsl-errata.c
+++ b/drivers/usb/common/fsl-errata.c
@@ -190,4 +190,30 @@  bool has_erratum_a008751(void)
 	return false;
 }
 
+bool has_erratum_a010151(void)
+{
+	u32 svr = get_svr();
+	u32 soc = SVR_SOC_VER(svr);
+
+	switch (soc) {
+#ifdef CONFIG_ARM64
+	case SVR_LS2080A:
+	case SVR_LS2085A:
+	case SVR_LS1046A:
+	case SVR_LS1012A:
+		return IS_SVR_REV(svr, 1, 0);
+	case SVR_LS1043A:
+		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
+#endif
+#ifdef CONFIG_LS102XA
+	case SOC_VER_LS1020:
+	case SOC_VER_LS1021:
+	case SOC_VER_LS1022:
+	case SOC_VER_SLS1020:
+		return IS_SVR_REV(svr, 2, 0);
+#endif
+	}
+	return false;
+}
+
 #endif
diff --git a/drivers/usb/host/xhci-dwc3.c b/drivers/usb/host/xhci-dwc3.c
index 33961cd..adbd9b5 100644
--- a/drivers/usb/host/xhci-dwc3.c
+++ b/drivers/usb/host/xhci-dwc3.c
@@ -97,3 +97,8 @@  void dwc3_set_fladj(struct dwc3 *dwc3_reg, u32 val)
 	setbits_le32(&dwc3_reg->g_fladj, GFLADJ_30MHZ_REG_SEL |
 			GFLADJ_30MHZ(val));
 }
+
+void dwc3_set_rxdetect_power_mode(struct dwc3 *dwc3_reg, u32 val)
+{
+	setbits_le32(&dwc3_reg->g_usb3pipectl[0], val);
+}
diff --git a/drivers/usb/host/xhci-fsl.c b/drivers/usb/host/xhci-fsl.c
index bdcd4f1..8392285 100644
--- a/drivers/usb/host/xhci-fsl.c
+++ b/drivers/usb/host/xhci-fsl.c
@@ -74,6 +74,14 @@  static int fsl_xhci_core_init(struct fsl_xhci *fsl_xhci)
 	/* Set GFLADJ_30MHZ as 20h as per XHCI spec default value */
 	dwc3_set_fladj(fsl_xhci->dwc3_reg, GFLADJ_30MHZ_DEFAULT);
 
+	/*
+	 * A-010151: USB controller to configure USB in P2 mode
+	 * whenever the Receive Detect feature is required
+	 */
+	if (has_erratum_a010151())
+		dwc3_set_rxdetect_power_mode(fsl_xhci->dwc3_reg,
+					     DWC3_GUSB3PIPECTL_DISRXDETP3);
+
 	return ret;
 }
 
diff --git a/include/fsl_usb.h b/include/fsl_usb.h
index fc72fb9..73235b8 100644
--- a/include/fsl_usb.h
+++ b/include/fsl_usb.h
@@ -95,5 +95,6 @@  bool has_erratum_a007792(void);
 bool has_erratum_a005697(void);
 bool has_erratum_a004477(void);
 bool has_erratum_a008751(void);
+bool has_erratum_a010151(void);
 #endif
 #endif /*_ASM_FSL_USB_H_ */
diff --git a/include/linux/usb/dwc3.h b/include/linux/usb/dwc3.h
index 6d1e365..f68cdd2 100644
--- a/include/linux/usb/dwc3.h
+++ b/include/linux/usb/dwc3.h
@@ -184,6 +184,7 @@  struct dwc3 {					/* offset: 0xC100 */
 
 /* Global USB3 PIPE Control Register */
 #define DWC3_GUSB3PIPECTL_PHYSOFTRST		(1 << 31)
+#define DWC3_GUSB3PIPECTL_DISRXDETP3		(1 << 28)
 #define DWC3_GUSB3PIPECTL_SUSPHY		(1 << 17)
 
 /* Global TX Fifo Size Register */
@@ -205,5 +206,6 @@  void dwc3_set_mode(struct dwc3 *dwc3_reg, u32 mode);
 void dwc3_core_soft_reset(struct dwc3 *dwc3_reg);
 int dwc3_core_init(struct dwc3 *dwc3_reg);
 void dwc3_set_fladj(struct dwc3 *dwc3_reg, u32 val);
+void dwc3_set_rxdetect_power_mode(struct dwc3 *dwc3_reg, u32 val);
 #endif
 #endif /* __DWC3_H_ */