Supporting ARM v8 USB errata for FSL
Subsystems (3)
v3 cover Supporting ARM v8 USB errata for FSL
The patch-set does the following :
1. Adds support for ARM for USB Erratum Checking code for implementing the USB Erratum for fsl.
2. Performs code cleanup to reduce redundancy when adding fsl device tree fixup.
3. Implements Erratum A008751 for LS2 platform.
Sriram Dash (5):
arm64: fsl-layerscape: add get_svr and IS_SVR_REV helper
usb: xhci: fsl: code cleanup for device tree fixup for fsl usb
controllers
fsl: usb: make errata function common for PPC and ARM armv8/ls2080: Remove workaround for erratum A008751
usb: xhci: fsl: Add workaround for USB erratum A-008751
arch/arm/cpu/armv8/fsl-layerscape/cpu.c | 7 + arch/arm/cpu/armv8/fsl-layerscape/soc.c | 10 -- .../include/asm/arch-fsl-layerscape/immap_lsch2.h | 2 + .../include/asm/arch-fsl-layerscape/immap_lsch3.h | 4 + arch/arm/include/asm/arch-fsl-layerscape/soc.h | 2 + board/freescale/ls2080aqds/ls2080aqds.c | 2 + board/freescale/ls2080ardb/ls2080ardb.c | 2 + drivers/usb/common/Makefile | 4 +- drivers/usb/common/fsl-dt-fixup.c | 94 ++++++---- .../fsl_usb.h => drivers/usb/common/fsl-errata.c | 152 ++++------------ drivers/usb/host/xhci-fsl.c | 24 +++ include/fsl_usb.h | 198 ++------------------- 12 files changed, 153 insertions(+), 348 deletions(-) copy include/fsl_usb.h => drivers/usb/common/fsl-errata.c (50%)
Signature · 1 line
2.1.0
PATCH v3 1/5 arm64: fsl-layerscape: add get_svr and IS_SVR_REV helper
Adds get_svr and IS_SVR_REV helpers for ARMv8 platforms, similar to PPC and ARMv7.
---
Changes in v1:
- Added commit message
Changes in v2:
- No update
arch/arm/cpu/armv8/fsl-layerscape/cpu.c | 7 +++++++ arch/arm/include/asm/arch-fsl-layerscape/immap_lsch2.h | 2 ++ arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h | 3 +++ arch/arm/include/asm/arch-fsl-layerscape/soc.h | 2 ++ 4 files changed, 14 insertions(+)
arch/arm/cpu/armv8/fsl-layerscape/cpu.c +7 -0
@@ -528,6 +528,13 @@ u32 fsl_qoriq_core_to_type(unsigned int core)return -1 ;/* cannot identify the cluster */ } +uint get_svr (void ) +{ +struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR ); + +return gur_in32 (&gur->svr); +} +#ifdef CONFIG_DISPLAY_CPUINFO int print_cpuinfo (void ) {
arch/arm/include/asm/arch-fsl-layerscape/immap_lsch2.h +2 -0
@@ -596,4 +596,6 @@ struct ccsr_cci400 {#define SCR0_CLIENTPD_MASK 0x00000001#define SCR0_USFCFG_MASK 0x00000400 +uint get_svr (void ); +#endif /* __ARCH_FSL_LSCH2_IMMAP_H__*/
arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h +3 -0
@@ -319,4 +319,7 @@ struct ccsr_reset {u32 ip_rev1;/* 0xbf8 */ u32 ip_rev2; /* 0xbfc */ }; + +uint get_svr (void ); +#endif /* __ARCH_FSL_LSCH3_IMMAP_H_ */
arch/arm/include/asm/arch-fsl-layerscape/soc.h +2 -0
@@ -53,6 +53,8 @@ struct cpu_type {#define SVR_MIN (svr) (((svr) >> 0) & 0xf)#define SVR_SOC_VER (svr) (((svr) >> 8) & SVR_WO_E)#define IS_E_PROCESSOR (svr) (!((svr >> 8) & 0x1)) +#define IS_SVR_REV (svr, maj, min) \ + ((SVR_MAJ(svr) == maj) && (SVR_MIN(svr) == min))/* ahci port register default value */ #define AHCI_PORT_PHY_1_CFG 0xa003fffe
Signature · 1 line
2.1.0
PATCH v3 1/5 arm64: fsl-layerscape: add get_svr and IS_SVR_REV helper
Quoted 5 lines · Sriram Dash
Adds
get_svrandIS_SVR_REVhelpers for ARMv8 platforms, similar to PPC and ARMv7.Signed-off-by Sriram Dash <[email protected]>Signed-off-by Rajesh Bhagat <[email protected]>
Quoted 7 lines
---
Changes in v1:
- Added commit messageChanges in v2:
- No update
So what changed in V3 here ?
Quoted 52 lines
arch/arm/cpu/armv8/fsl-layerscape/cpu.c | 7 +++++++ arch/arm/include/asm/arch-fsl-layerscape/immap_lsch2.h | 2 ++ arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h | 3 +++ arch/arm/include/asm/arch-fsl-layerscape/soc.h | 2 ++ 4 files changed, 14 insertions(+)arch/arm/cpu/armv8/fsl-layerscape/cpu.c +7
-0@@ -528,6 +528,13 @@ u32 fsl_qoriq_core_to_type(unsigned int core)return -1 ;/* cannot identify the cluster */ } +uint get_svr (void ) +{ +struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR ); + +return gur_in32 (&gur->svr); +} +#ifdef CONFIG_DISPLAY_CPUINFO int print_cpuinfo (void ) {arch/arm/include/asm/arch-fsl-layerscape/immap_lsch2.h +2
-0@@ -596,4 +596,6 @@ struct ccsr_cci400 {#define SCR0_CLIENTPD_MASK 0x00000001#define SCR0_USFCFG_MASK 0x00000400 +uint get_svr (void ); +#endif /* __ARCH_FSL_LSCH2_IMMAP_H__*/ arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h +3
-0@@ -319,4 +319,7 @@ struct ccsr_reset {u32 ip_rev1;/* 0xbf8 */ u32 ip_rev2; /* 0xbfc */ }; + +uint get_svr (void ); +#endif /* __ARCH_FSL_LSCH3_IMMAP_H_ */ arch/arm/include/asm/arch-fsl-layerscape/soc.h +0
-0
arch/arm/include/asm/arch-fsl-layerscape/soc.h struct cpu_type { · line 57
Quoted 5 lines
arch/arm/include/asm/arch-fsl-layerscape/soc.h +2
-0@@ -53,6 +53,8 @@ struct cpu_type {#define SVR_MIN (svr) (((svr) >> 0) & 0xf)#define SVR_SOC_VER (svr) (((svr) >> 8) & SVR_WO_E)#define IS_E_PROCESSOR (svr) (!((svr >> 8) & 0x1)) +#define IS_SVR_REV (svr, maj, min) \ + ((SVR_MAJ(svr) == maj) && (SVR_MIN(svr) == min))
This is susceptible to macro expansion problems, you need parenthesis around all the macro args:
((SVR_MAJ(svr) == (maj)) && (SVR_MIN(svr) == (min)))
Quoted 3 lines
arch/arm/include/asm/arch-fsl-layerscape/soc.h +0
-0/* ahci port register default value */ #define AHCI_PORT_PHY_1_CFG 0xa003fffe
Signature · 2 lines
Best regards, Marek Vasut
PATCH v3 1/5 arm64: fsl-layerscape: add get_svr and IS_SVR_REV helper
Quoted 17 lines
-----Original Message-----
From: Marek Vasut [mailto:marex at denx.de]
Sent: Thursday, June 09, 2016 6:58 PM
To: Sriram Dash <[email protected]>; u-boot at lists.denx.de
Cc: york sun <[email protected]>; albert.u.boot at aribaud.net; Rajesh Bhagat <[email protected]>
Subject: Re: [PATCH v3 1/5] arm64: fsl-layerscape: addget_svrandIS_SVR_REVhelperQuoted 7 lines · Sriram Dash
Adds
get_svrandIS_SVR_REVhelpers for ARMv8 platforms, similar to PPC and ARMv7.Signed-off-by Sriram Dash <[email protected]>Signed-off-by Rajesh Bhagat <[email protected]>---
Quoted 8 lines
Quoted 5 lines
Changes in v1:
- Added commit messageChanges in v2:
- No updateSo what changed in V3 here ?
Typo mistake. Will take care in v4.
Quoted 57 lines
Quoted 57 lines
arch/arm/cpu/armv8/fsl-layerscape/cpu.c | 7 +++++++ arch/arm/include/asm/arch-fsl-layerscape/immap_lsch2.h | 2 ++ arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h | 3 +++ arch/arm/include/asm/arch-fsl-layerscape/soc.h | 2 ++ 4 files changed, 14 insertions(+)arch/arm/cpu/armv8/fsl-layerscape/cpu.c +7
-0@@ -528,6 +528,13 @@ u32 fsl_qoriq_core_to_type(unsigned int core)return -1 ;/* cannot identify the cluster */ } +uint get_svr (void ) +{ +struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR ); + +return gur_in32 (&gur->svr); +} +#ifdef CONFIG_DISPLAY_CPUINFO int print_cpuinfo (void ) {arch/arm/include/asm/arch-fsl-layerscape/immap_lsch2.h +2
-0@@ -596,4 +596,6 @@ struct ccsr_cci400 {#define SCR0_CLIENTPD_MASK 0x00000001#define SCR0_USFCFG_MASK 0x00000400 +uint get_svr (void ); +#endif /* __ARCH_FSL_LSCH2_IMMAP_H__*/ arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h +3
-0@@ -319,4 +319,7 @@ struct ccsr_reset {u32 ip_rev1;/* 0xbf8 */ u32 ip_rev2; /* 0xbfc */ }; + +uint get_svr (void ); +#endif /* __ARCH_FSL_LSCH3_IMMAP_H_ */ diff --git
a/arch/arm/include/asm/arch-fsl-layerscape/soc.hb/arch/arm/include/asm/arch-fsl-layerscape/soc.h
index 02ecc62..f244904 100644arch/arm/include/asm/arch-fsl-layerscape/soc.h +0
-0@@ -53,6 +53,8 @@ struct cpu_type {#define SVR_MIN (svr) (((svr) >> 0) & 0xf)
Quoted 9 lines
arch/arm/include/asm/arch-fsl-layerscape/soc.h struct cpu_type { · line 57
Quoted 4 lines
arch/arm/include/asm/arch-fsl-layerscape/soc.h +2
-0#define SVR_SOC_VER (svr) (((svr) >> 8) & SVR_WO_E)#define IS_E_PROCESSOR (svr) (!((svr >> 8) & 0x1)) +#define IS_SVR_REV (svr, maj, min) \ + ((SVR_MAJ(svr) == maj) && (SVR_MIN(svr) == min))This is susceptible to macro expansion problems, you need parenthesis around all the macro args:
((SVR_MAJ(svr)== (maj)) && (SVR_MIN(svr)== (min)))
Ok. Will take care in v4.
Quoted 8 lines
arch/arm/include/asm/arch-fsl-layerscape/soc.h struct cpu_type {
Quoted 3 lines
arch/arm/include/asm/arch-fsl-layerscape/soc.h +0
-0/* ahci port register default value */ #define AHCI_PORT_PHY_1_CFG 0xa003fffe--
Best regards,
Marek Vasut
PATCH v3 2/5 usb: xhci: fsl: code cleanup for device tree fixup for fsl usb controllers
In reply to Sriram DashPerforms code cleanup for device tree fixup for fsl usb controllers by making functions to handle these similar errata checking code.
---
Changes in v3:
- Inverted the condition for has_erratum for better readability
- If fdt_fixup_usb_erratum fails, return ENOSPC and exit the fixup
- Added logic for handling the condition with different controllers with different erratas
- first check if the errata is applicable for the SoC
- then check if it is applicable for the controller
- if both are successful, then fix dt.
Changes in v2:
- Added patch description
- Removed the MACRO and use fdt_fixup_erratum function instead
drivers/usb/common/fsl-dt-fixup.c | 88 ++++++++++++++++++++++----------------- include/fsl_usb.h | 6 +++ 2 files changed, 56 insertions(+), 38 deletions(-)
drivers/usb/common/fsl-dt-fixup.c +50 -38
@@ -20,9 +20,9 @@#endif static const char *const compat_usb_fsl[] = { -"fsl-usb2-mph" , -"fsl-usb2-dr" , -"snps,dwc3" , +FSL_USB2_MPH , +FSL_USB2_DR , +SNPS_DWC3 ,NULL };
@@ -80,16 +80,24 @@ static int fdt_fixup_usb_mode_phy_type(void *blob, const char *mode, }static int fdt_fixup_usb_erratum (void *blob,const char *prop_erratum, -int start_offset) +const char *controller_type,int start_offset) {int node_offset, err;const char *node_type =NULL ; +const char *node_name =NULL ; err =fdt_usb_get_node_type (blob, start_offset, &node_offset, &node_type);if (err <0 )return err; +if (!strcmp (node_type,FSL_USB2_MPH ) || !strcmp (node_type,FSL_USB2_DR )) + node_name =USB2_CI ; +else + node_name = node_type; +if (strcmp (node_name, controller_type)) +return err; + err =fdt_setprop (blob, node_offset, prop_erratum,NULL ,0 );if (err <0 ) { printf("ERROR: could not set %s for %s: %s.\n",
@@ -99,6 +107,23 @@ static int fdt_fixup_usb_erratum(void *blob, const char *prop_erratum,return node_offset; } +static int fdt_fixup_erratum (int *usb_erratum_off,void *blob, +const char *controller_type,char *str, +bool (*has_erratum)(void )) +{ +char buf[32 ] = {0 }; + +snprintf (buf,sizeof (buf),"fsl,usb-erratum-%s" , str); +if (!(has_erratum ())) +return -EINVAL ; + *usb_erratum_off =fdt_fixup_usb_erratum (blob, buf, controller_type, + *usb_erratum_off); +if (*usb_erratum_off <0 ) +return -ENOSPC ; +debug ("Adding USB erratum %s\n" , str); +return 0 ; +} +void fdt_fixup_dr_usb (void *blob,bd_t *bd) {static const char *const modes[] = {"host" ,"peripheral" ,"otg" };
@@ -111,6 +136,7 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)int usb_phy_off =-1 ;char str[5 ];int i, j; +int ret;for (i =1 ; i <=CONFIG_USB_MAX_CONTROLLER_COUNT ; i++) {const char *dr_mode_type =NULL ;
@@ -164,39 +190,25 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)if (usb_phy_off <0 )return ; -if (has_erratum_a006261 ()) { - usb_erratum_a006261_off =fdt_fixup_usb_erratum - (blob, -"fsl,usb-erratum-a006261" , - usb_erratum_a006261_off); -if (usb_erratum_a006261_off <0 ) -return ; - } - -if (has_erratum_a007075 ()) { - usb_erratum_a007075_off =fdt_fixup_usb_erratum - (blob, -"fsl,usb-erratum-a007075" , - usb_erratum_a007075_off); -if (usb_erratum_a007075_off <0 ) -return ; - } - -if (has_erratum_a007792 ()) { - usb_erratum_a007792_off =fdt_fixup_usb_erratum - (blob, -"fsl,usb-erratum-a007792" , - usb_erratum_a007792_off); -if (usb_erratum_a007792_off <0 ) -return ; - } -if (has_erratum_a005697 ()) { - usb_erratum_a005697_off =fdt_fixup_usb_erratum - (blob, -"fsl,usb-erratum-a005697" , - usb_erratum_a005697_off); -if (usb_erratum_a005697_off <0 ) -return ; - } + ret =fdt_fixup_erratum (&usb_erratum_a006261_off, blob, +USB2_CI ,"a006261" , + has_erratum_a006261); +if (ret == -ENOSPC ) +return ; + ret =fdt_fixup_erratum (&usb_erratum_a007075_off, blob, +USB2_CI ,"a007075" , + has_erratum_a007075); +if (ret == -ENOSPC ) +return ; + ret =fdt_fixup_erratum (&usb_erratum_a007792_off, blob, +USB2_CI ,"a007792" , + has_erratum_a007792); +if (ret == -ENOSPC ) +return ; + ret =fdt_fixup_erratum (&usb_erratum_a005697_off, blob, +USB2_CI ,"a005697" , + has_erratum_a005697); +if (ret == -ENOSPC ) +return ; } }
include/fsl_usb.h +6 -0
@@ -85,6 +85,12 @@ struct ccsr_usb_phy {#define CONFIG_SYS_FSL_USB_SQUELCH_PROG_MASK 0x07#endif +/* USB Controllers */ +#define FSL_USB2_MPH "fsl-usb2-mph" +#define FSL_USB2_DR "fsl-usb2-dr" +#define USB2_CI "usb2-ci" +#define SNPS_DWC3 "snps,dwc3" +/* USB Erratum Checking code */ #ifdef CONFIG_PPC static inline bool has_dual_phy (void )
Signature · 1 line
2.1.0
PATCH v3 2/5 usb: xhci: fsl: code cleanup for device tree fixup for fsl usb controllers
Quoted 69 lines · Sriram Dash
Performs code cleanup for device tree fixup for fsl usb controllers by making functions to handle these similar errata checking code.
Signed-off-by Rajesh Bhagat <[email protected]>Signed-off-by Sriram Dash <[email protected]>---
Changes in v3:
- Inverted the condition forhas_erratumfor better readability
- Iffdt_fixup_usb_erratumfails, return ENOSPC and exit the fixup
- Added logic for handling the condition with different controllers with different erratas
- first check if the errata is applicable for the SoC
- then check if it is applicable for the controller
- if both are successful, then fix dt.Changes in v2:
- Added patch description
- Removed the MACRO and usefdt_fixup_erratumfunction insteaddrivers/usb/common/fsl-dt-fixup.c | 88 ++++++++++++++++++++++----------------- include/fsl_usb.h | 6 +++ 2 files changed, 56 insertions(+), 38 deletions(-)drivers/usb/common/fsl-dt-fixup.c +12
-4@@ -20,9 +20,9 @@#endif static const char *const compat_usb_fsl[] = { -"fsl-usb2-mph" , -"fsl-usb2-dr" , -"snps,dwc3" , +FSL_USB2_MPH , +FSL_USB2_DR , +SNPS_DWC3 ,NULL };@@ -80,16 +80,24 @@ static int fdt_fixup_usb_mode_phy_type(void *blob, const char *mode, }static int fdt_fixup_usb_erratum (void *blob,const char *prop_erratum, -int start_offset) +const char *controller_type,int start_offset) {int node_offset, err;const char *node_type =NULL ; +const char *node_name =NULL ; err =fdt_usb_get_node_type (blob, start_offset, &node_offset, &node_type);if (err <0 )return err; +if (!strcmp (node_type,FSL_USB2_MPH ) || !strcmp (node_type,FSL_USB2_DR )) + node_name =USB2_CI ; +else + node_name = node_type; +if (strcmp (node_name, controller_type)) +return err; + err =fdt_setprop (blob, node_offset, prop_erratum,NULL ,0 );if (err <0 ) { printf("ERROR: could not set %s for %s: %s.\n",@@ -99,6 +107,23 @@ static int fdt_fixup_usb_erratum(void *blob, const char *prop_erratum,return node_offset;
drivers/usb/common/fsl-dt-fixup.c static int fdt_fixup_usb_erratum(void *blob, const char *prop_erratum, · line 117
Quoted 10 lines
drivers/usb/common/fsl-dt-fixup.c +8
-0} +static int fdt_fixup_erratum (int *usb_erratum_off,void *blob, +const char *controller_type,char *str, +bool (*has_erratum)(void )) +{ +char buf[32 ] = {0 }; + +snprintf (buf,sizeof (buf),"fsl,usb-erratum-%s" , str); +if (!(has_erratum ()))
No need for the extra parenthesis around has_erratum() .
Quoted 85 lines
drivers/usb/common/fsl-dt-fixup.c +30
-34+return -EINVAL ; + *usb_erratum_off =fdt_fixup_usb_erratum (blob, buf, controller_type, + *usb_erratum_off); +if (*usb_erratum_off <0 ) +return -ENOSPC ; +debug ("Adding USB erratum %s\n" , str); +return 0 ; +} +void fdt_fixup_dr_usb (void *blob,bd_t *bd) {static const char *const modes[] = {"host" ,"peripheral" ,"otg" };@@ -111,6 +136,7 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)int usb_phy_off =-1 ;char str[5 ];int i, j; +int ret;for (i =1 ; i <=CONFIG_USB_MAX_CONTROLLER_COUNT ; i++) {const char *dr_mode_type =NULL ;@@ -164,39 +190,25 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)if (usb_phy_off <0 )return ; -if (has_erratum_a006261 ()) { - usb_erratum_a006261_off =fdt_fixup_usb_erratum - (blob, -"fsl,usb-erratum-a006261" , - usb_erratum_a006261_off); -if (usb_erratum_a006261_off <0 ) -return ; - } - -if (has_erratum_a007075 ()) { - usb_erratum_a007075_off =fdt_fixup_usb_erratum - (blob, -"fsl,usb-erratum-a007075" , - usb_erratum_a007075_off); -if (usb_erratum_a007075_off <0 ) -return ; - } - -if (has_erratum_a007792 ()) { - usb_erratum_a007792_off =fdt_fixup_usb_erratum - (blob, -"fsl,usb-erratum-a007792" , - usb_erratum_a007792_off); -if (usb_erratum_a007792_off <0 ) -return ; - } -if (has_erratum_a005697 ()) { - usb_erratum_a005697_off =fdt_fixup_usb_erratum - (blob, -"fsl,usb-erratum-a005697" , - usb_erratum_a005697_off); -if (usb_erratum_a005697_off <0 ) -return ; - } + ret =fdt_fixup_erratum (&usb_erratum_a006261_off, blob, +USB2_CI ,"a006261" , + has_erratum_a006261); +if (ret == -ENOSPC ) +return ; + ret =fdt_fixup_erratum (&usb_erratum_a007075_off, blob, +USB2_CI ,"a007075" , + has_erratum_a007075); +if (ret == -ENOSPC ) +return ; + ret =fdt_fixup_erratum (&usb_erratum_a007792_off, blob, +USB2_CI ,"a007792" , + has_erratum_a007792); +if (ret == -ENOSPC ) +return ; + ret =fdt_fixup_erratum (&usb_erratum_a005697_off, blob, +USB2_CI ,"a005697" , + has_erratum_a005697); +if (ret == -ENOSPC ) +return ; } }include/fsl_usb.h +0
-0
include/fsl_usb.h struct ccsr_usb_phy { · line 92
Quoted 8 lines
include/fsl_usb.h +5
-0@@ -85,6 +85,12 @@ struct ccsr_usb_phy {#define CONFIG_SYS_FSL_USB_SQUELCH_PROG_MASK 0x07#endif +/* USB Controllers */ +#define FSL_USB2_MPH "fsl-usb2-mph" +#define FSL_USB2_DR "fsl-usb2-dr" +#define USB2_CI "usb2-ci" +#define SNPS_DWC3 "snps,dwc3"
Is this needed as a global macro or can it be local to fsl-dt-fixup.c ?
Quoted 4 lines
include/fsl_usb.h +0
-0/* USB Erratum Checking code */ #ifdef CONFIG_PPC static inline bool has_dual_phy (void )
Signature · 2 lines
Best regards, Marek Vasut
PATCH v3 2/5 usb: xhci: fsl: code cleanup for device tree fixup for fsl usb controllers
Quoted 84 lines
-----Original Message-----
From: Marek Vasut [mailto:marex at denx.de]
Sent: Thursday, June 09, 2016 7:01 PM
To: Sriram Dash <[email protected]>; u-boot at lists.denx.de
Cc: york sun <[email protected]>; albert.u.boot at aribaud.net; Rajesh Bhagat <[email protected]>
Subject: Re: [PATCH v3 2/5] usb: xhci: fsl: code cleanup for device tree fixup for fsl usb controllersQuoted 49 lines · Sriram Dash
Performs code cleanup for device tree fixup for fsl usb controllers by making functions to handle these similar errata checking code.
Signed-off-by Rajesh Bhagat <[email protected]>Signed-off-by Sriram Dash <[email protected]>---
Changes in v3:
- Inverted the condition forhas_erratumfor better readability
- Iffdt_fixup_usb_erratumfails, return ENOSPC and exit the fixup
- Added logic for handling the condition with different controllers with different erratas
- first check if the errata is applicable for the SoC
- then check if it is applicable for the controller
- if both are successful, then fix dt.Changes in v2:
- Added patch description
- Removed the MACRO and usefdt_fixup_erratumfunction insteaddrivers/usb/common/fsl-dt-fixup.c | 88 ++++++++++++++++++++++----------------- include/fsl_usb.h | 6 +++ 2 files changed, 56 insertions(+), 38 deletions(-)drivers/usb/common/fsl-dt-fixup.c +4
-4@@ -20,9 +20,9 @@#endif static const char *const compat_usb_fsl[] = { -"fsl-usb2-mph" , -"fsl-usb2-dr" , -"snps,dwc3" , +FSL_USB2_MPH , +FSL_USB2_DR , +SNPS_DWC3 ,NULL };@@ -80,16 +80,24 @@ static int fdt_fixup_usb_mode_phy_type(void *blob, const char *mode, }static int fdt_fixup_usb_erratum (void *blob,const char *prop_erratum, -int start_offset) +const char *controller_type,int start_offset) {drivers/usb/common/fsl-dt-fixup.c static int fdt_fixup_usb_mode_phy_type(void *blob, · line 94
Quoted 10 lines
drivers/usb/common/fsl-dt-fixup.c +2
-0int node_offset, err;const char *node_type =NULL ; +const char *node_name =NULL ; err =fdt_usb_get_node_type (blob, start_offset, &node_offset, &node_type);if (err <0 )return err; + if (!strcmp(node_type, FSL_USB2_MPH) || !strcmp(node_type,
FSL_USB2_DR))drivers/usb/common/fsl-dt-fixup.c static int fdt_fixup_usb_mode_phy_type(void *blob, const char *mode,
Quoted 9 lines
drivers/usb/common/fsl-dt-fixup.c +6
-0+ node_name =USB2_CI ; + else + node_name = node_type; +if (strcmp (node_name, controller_type)) +return err; + err =fdt_setprop (blob, node_offset, prop_erratum,NULL ,0 );if (err <0 ) { printf("ERROR: could not set %s for %s: %s.\n", @@ -99,6 +107,23@@
Quoted 4 lines
static int fdt_fixup_usb_erratum(void *blob, const char
*prop_erratum,
returnnode_offset;
}
Quoted 11 lines
drivers/usb/common/fsl-dt-fixup.c static int fdt_fixup_usb_erratum(void *blob, const char *prop_erratum, · line 117
Quoted 8 lines
drivers/usb/common/fsl-dt-fixup.c +8
-0+static int fdt_fixup_erratum (int *usb_erratum_off,void *blob, +const char *controller_type,char *str, +bool (*has_erratum)(void )) +{ +char buf[32 ] = {0 }; + +snprintf (buf,sizeof (buf),"fsl,usb-erratum-%s" , str); +if (!(has_erratum ()))No need for the extra parenthesis around
has_erratum().
Ok. Will remove parenthesis in v4.
Quoted 86 lines
Quoted 86 lines
drivers/usb/common/fsl-dt-fixup.c +30
-34+return -EINVAL ; + *usb_erratum_off =fdt_fixup_usb_erratum (blob, buf, controller_type, + *usb_erratum_off); +if (*usb_erratum_off <0 ) +return -ENOSPC ; +debug ("Adding USB erratum %s\n" , str); +return 0 ; +} +void fdt_fixup_dr_usb (void *blob,bd_t *bd) {static const char *const modes[] = {"host" ,"peripheral" ,"otg" };@@ -111,6 +136,7 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)int usb_phy_off =-1 ;char str[5 ];int i, j; +int ret;for (i =1 ; i <=CONFIG_USB_MAX_CONTROLLER_COUNT ; i++) {const char *dr_mode_type =NULL ;@@ -164,39 +190,25 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)if (usb_phy_off <0 )return ; -if (has_erratum_a006261 ()) { - usb_erratum_a006261_off =fdt_fixup_usb_erratum - (blob, -"fsl,usb-erratum-a006261" , - usb_erratum_a006261_off); -if (usb_erratum_a006261_off <0 ) -return ; - } - -if (has_erratum_a007075 ()) { - usb_erratum_a007075_off =fdt_fixup_usb_erratum - (blob, -"fsl,usb-erratum-a007075" , - usb_erratum_a007075_off); -if (usb_erratum_a007075_off <0 ) -return ; - } - -if (has_erratum_a007792 ()) { - usb_erratum_a007792_off =fdt_fixup_usb_erratum - (blob, -"fsl,usb-erratum-a007792" , - usb_erratum_a007792_off); -if (usb_erratum_a007792_off <0 ) -return ; - } -if (has_erratum_a005697 ()) { - usb_erratum_a005697_off =fdt_fixup_usb_erratum - (blob, -"fsl,usb-erratum-a005697" , - usb_erratum_a005697_off); -if (usb_erratum_a005697_off <0 ) -return ; - } + ret =fdt_fixup_erratum (&usb_erratum_a006261_off, blob, +USB2_CI ,"a006261" , + has_erratum_a006261); +if (ret == -ENOSPC ) +return ; + ret =fdt_fixup_erratum (&usb_erratum_a007075_off, blob, +USB2_CI ,"a007075" , + has_erratum_a007075); +if (ret == -ENOSPC ) +return ; + ret =fdt_fixup_erratum (&usb_erratum_a007792_off, blob, +USB2_CI ,"a007792" , + has_erratum_a007792); +if (ret == -ENOSPC ) +return ; + ret =fdt_fixup_erratum (&usb_erratum_a005697_off, blob, +USB2_CI ,"a005697" , + has_erratum_a005697); +if (ret == -ENOSPC ) +return ; } }include/fsl_usb.h index renamed from include/fsl_usb.h +0
-0187e384..882a5f5 100644
include/fsl_usb.h +0
-0@@ -85,6 +85,12 @@ struct ccsr_usb_phy { #define
CONFIG_SYS_FSL_USB_SQUELCH_PROG_MASK0x07#endif
Quoted 8 lines
include/fsl_usb.h struct ccsr_usb_phy { · line 92
Quoted 5 lines
include/fsl_usb.h +5
-0+/* USB Controllers */ +#define FSL_USB2_MPH "fsl-usb2-mph" +#define FSL_USB2_DR "fsl-usb2-dr" +#define USB2_CI "usb2-ci" +#define SNPS_DWC3 "snps,dwc3"Is this needed as a global macro or can it be local to
fsl-dt-fixup.c?
Currently, the macro are only being used for dt fixup for fsl usb. However, in the near future, they might be needed for some other purpose, for example, board specific settings.
So, i think i will stick with the global macro.
Quoted 9 lines
Quoted 4 lines
/* USB Erratum Checking code */
#ifdefCONFIG_PPC
static inline boolhas_dual_phy(void)--
Best regards,
Marek Vasut
PATCH v3 2/5 usb: xhci: fsl: code cleanup for device tree fixup for fsl usb controllers
Quoted 8 lines · Sriram Dash
Quoted 8 lines
-----Original Message-----
From: Marek Vasut [mailto:marex at denx.de]
Sent: Thursday, June 09, 2016 7:01 PM
To: Sriram Dash <[email protected]>; u-boot at lists.denx.de
Cc: york sun <[email protected]>; albert.u.boot at aribaud.net; Rajesh Bhagat <[email protected]>
Subject: Re: [PATCH v3 2/5] usb: xhci: fsl: code cleanup for device tree fixup for fsl usb controllers
Would you please fix your mailer to omit this useless header ?
[...]
Quoted 11 lines
Quoted 11 lines
include/fsl_usb.h struct ccsr_usb_phy { · line 91
Quoted 11 lines
include/fsl_usb.h index renamed from include/fsl_usb.h +0
-0187e384..882a5f5 100644
include/fsl_usb.h +0
-0@@ -85,6 +85,12 @@ struct ccsr_usb_phy { #define
CONFIG_SYS_FSL_USB_SQUELCH_PROG_MASK0x07#endifinclude/fsl_usb.h +4
-0+/* USB Controllers */ +#define FSL_USB2_MPH "fsl-usb2-mph" +#define FSL_USB2_DR "fsl-usb2-dr" +#define USB2_CI "usb2-ci"
What is this "usb2-ci" string ? Is this some DT property or DT compatible property or just some random string?
Quoted 8 lines
Quoted 4 lines
Quoted 1 line
+#define
SNPS_DWC3"snps,dwc3"Is this needed as a global macro or can it be local to
fsl-dt-fixup.c?Currently, the macro are only being used for dt fixup for fsl usb. However, in the near future, they might be needed for some other purpose, for example, board specific settings.
If they will be used for other purpose, then they can be moved. They are local now, so keep them local.
Quoted 11 lines
So, i think i will stick with the global macro.
Quoted 9 lines
Quoted 4 lines
/* USB Erratum Checking code */
#ifdefCONFIG_PPC
static inline boolhas_dual_phy(void)--
Best regards,
Marek Vasut
Signature · 2 lines
Best regards, Marek Vasut
PATCH v3 2/5 usb: xhci: fsl: code cleanup for device tree fixup for fsl usb controllers
Quoted 11 lines
From: Marek Vasut [mailto:marex at denx.de]
Quoted 8 lines · Sriram Dash
Quoted 8 lines
-----Original Message-----
From: Marek Vasut [mailto:marex at denx.de]
Sent: Thursday, June 09, 2016 7:01 PM
To: Sriram Dash <[email protected]>; u-boot at lists.denx.de
Cc: york sun <[email protected]>; albert.u.boot at aribaud.net; Rajesh Bhagat <[email protected]>
Subject: Re: [PATCH v3 2/5] usb: xhci: fsl: code cleanup for device tree fixup for fsl usb controllers
Quoted 4 lines
Would you please fix your mailer to omit this useless header ?
[...]
Will take care next time onwards.
Quoted 7 lines
Quoted 7 lines
Quoted 7 lines
Quoted 7 lines
include/fsl_usb.h index renamed from include/fsl_usb.h +0
-0187e384..882a5f5 100644
include/fsl_usb.h +0
-0@@ -85,6 +85,12 @@ struct ccsr_usb_phy { #define
CONFIG_SYS_FSL_USB_SQUELCH_PROG_MASK0x07#endif
Quoted 8 lines
Quoted 4 lines
Quoted 4 lines
include/fsl_usb.h struct ccsr_usb_phy { · line 91
Quoted 4 lines
include/fsl_usb.h +4
-0+/* USB Controllers */ +#define FSL_USB2_MPH "fsl-usb2-mph" +#define FSL_USB2_DR "fsl-usb2-dr" +#define USB2_CI "usb2-ci"What is this "usb2-ci" string ? Is this some DT property or DT compatible property or just some random string?
Currently, for chipidea usb 2 controller, there is no generic DT compatible property. Some names used are "qcom,ci-hdrc", "chipidea,usb2","fsl-usb2-dr","fsl-usb2-mph ". This string "usb2-ci" is not used currently for DT property.
Quoted 5 lines
Quoted 5 lines
Quoted 4 lines
Quoted 1 line
+#define
SNPS_DWC3"snps,dwc3"Is this needed as a global macro or can it be local to
fsl-dt-fixup.c?
Quoted 7 lines
Quoted 3 lines
Currently, the macro are only being used for dt fixup for fsl usb. However, in the near future, they might be needed for some other purpose, for example, board specific settings.
If they will be used for other purpose, then they can be moved. They are local now, so keep them local.
Ok. I will move the global macro to fsl-dt-fixup.c.
Quoted 16 lines
Quoted 11 lines
So, i think i will stick with the global macro.
Quoted 9 lines
Quoted 4 lines
/* USB Erratum Checking code */
#ifdefCONFIG_PPC
static inline boolhas_dual_phy(void)--
Best regards,
Marek Vasut--
Best regards,
Marek Vasut
PATCH v3 2/5 usb: xhci: fsl: code cleanup for device tree fixup for fsl usb controllers
Quoted 34 lines · Sriram Dash
Quoted 11 lines
From: Marek Vasut [mailto:marex at denx.de]
Quoted 8 lines · Sriram Dash
Quoted 8 lines
-----Original Message-----
From: Marek Vasut [mailto:marex at denx.de]
Sent: Thursday, June 09, 2016 7:01 PM
To: Sriram Dash <[email protected]>; u-boot at lists.denx.de
Cc: york sun <[email protected]>; albert.u.boot at aribaud.net; Rajesh Bhagat <[email protected]>
Subject: Re: [PATCH v3 2/5] usb: xhci: fsl: code cleanup for device tree fixup for fsl usb controllersQuoted 4 lines
Would you please fix your mailer to omit this useless header ?
[...]
Will take care next time onwards.
Quoted 7 lines
Quoted 7 lines
Quoted 7 lines
Quoted 7 lines
include/fsl_usb.h index renamed from include/fsl_usb.h +0
-0187e384..882a5f5 100644
include/fsl_usb.h +0
-0@@ -85,6 +85,12 @@ struct ccsr_usb_phy { #define
CONFIG_SYS_FSL_USB_SQUELCH_PROG_MASK0x07#endifQuoted 8 lines
Quoted 4 lines
Quoted 4 lines
include/fsl_usb.h struct ccsr_usb_phy { · line 91
Quoted 4 lines
include/fsl_usb.h +4
-0+/* USB Controllers */ +#define FSL_USB2_MPH "fsl-usb2-mph" +#define FSL_USB2_DR "fsl-usb2-dr" +#define USB2_CI "usb2-ci"What is this "usb2-ci" string ? Is this some DT property or DT compatible property or just some random string?
Quoted 2 lines
Currently, for chipidea usb 2 controller, there is no generic DT compatible property.
Linux kernel documentation says there is "chipidea,usb2":
https://www.kernel.org/doc/Documentation/devicetree/bindings/usb/ci-hdrc-usb2.txt
Quoted 3 lines
Some names used are "qcom,ci-hdrc", "chipidea,usb2","fsl-usb2-dr","fsl-usb2-mph ". This string "usb2-ci" is not used currently for DT property.
The "chipidea,usb2" is generic one, all the others are either heritage from the past or more precise specifiers of the IP block. Do not invent yet another new compatible property in this case, it makes zero sense.
Quoted 31 lines
Quoted 5 lines
Quoted 5 lines
Quoted 4 lines
Quoted 1 line
+#define
SNPS_DWC3"snps,dwc3"Is this needed as a global macro or can it be local to
fsl-dt-fixup.c?Quoted 7 lines
Quoted 3 lines
Currently, the macro are only being used for dt fixup for fsl usb. However, in the near future, they might be needed for some other purpose, for example, board specific settings.
If they will be used for other purpose, then they can be moved. They are local now, so keep them local.
Ok. I will move the global macro to
fsl-dt-fixup.c.Quoted 16 lines
Quoted 11 lines
So, i think i will stick with the global macro.
Quoted 9 lines
Quoted 4 lines
/* USB Erratum Checking code */
#ifdefCONFIG_PPC
static inline boolhas_dual_phy(void)--
Best regards,
Marek Vasut--
Best regards,
Marek Vasut
Signature · 2 lines
Best regards, Marek Vasut
PATCH v3 2/5 usb: xhci: fsl: code cleanup for device tree fixup for fsl usb controllers
Quoted 44 lines
From: Marek Vasut [mailto:marex at denx.de]
Quoted 34 lines · Sriram Dash
Quoted 11 lines
From: Marek Vasut [mailto:marex at denx.de] On 06/10/2016 05:47 AM,
Quoted 8 lines · Sriram Dash
Quoted 8 lines
-----Original Message-----
From: Marek Vasut [mailto:marex at denx.de]
Sent: Thursday, June 09, 2016 7:01 PM
To: Sriram Dash <[email protected]>; u-boot at lists.denx.de
Cc: york sun <[email protected]>; albert.u.boot at aribaud.net; Rajesh Bhagat <[email protected]>
Subject: Re: [PATCH v3 2/5] usb: xhci: fsl: code cleanup for device tree fixup for fsl usb controllersQuoted 4 lines
Would you please fix your mailer to omit this useless header ?
[...]
Will take care next time onwards.
Quoted 7 lines
Quoted 7 lines
Quoted 7 lines
Quoted 7 lines
include/fsl_usb.h index renamed from include/fsl_usb.h +0
-0187e384..882a5f5 100644
include/fsl_usb.h +0
-0@@ -85,6 +85,12 @@ struct ccsr_usb_phy { #define
CONFIG_SYS_FSL_USB_SQUELCH_PROG_MASK0x07#endifQuoted 8 lines
Quoted 4 lines
Quoted 4 lines
include/fsl_usb.h struct ccsr_usb_phy { · line 91
Quoted 4 lines
include/fsl_usb.h +4
-0+/* USB Controllers */ +#define FSL_USB2_MPH "fsl-usb2-mph" +#define FSL_USB2_DR "fsl-usb2-dr" +#define USB2_CI "usb2-ci"What is this "usb2-ci" string ? Is this some DT property or DT compatible property or just some random string?
Quoted 2 lines
Currently, for chipidea usb 2 controller, there is no generic DT compatible property.
Linux kernel documentation says there is "chipidea,usb2":
https://www.kernel.org/doc/Documentation/devicetree/bindings/usb/ci-hdrc-
usb2.txt
Quoted 8 lines
Quoted 3 lines
Some names used are "qcom,ci-hdrc", "chipidea,usb2","fsl-usb2-dr","fsl-usb2-mph ". This string "usb2-ci" is not used currently for DT property.
The "chipidea,usb2" is generic one, all the others are either heritage from the past or more precise specifiers of the IP block. Do not invent yet another new compatible property in this case, it makes zero sense.
Ok. Will change the "usb2-ci" into "chipidea,usb2" and "USB2_CI" into CHIPIDEA_USB2 in v4.
Quoted 36 lines
Quoted 9 lines
Quoted 9 lines
Quoted 8 lines
Quoted 4 lines
Quoted 1 line
+#define
SNPS_DWC3"snps,dwc3"Is this needed as a global macro or can it be local to
fsl-dt-fixup.c?Currently, the macro are only being used for dt fixup for fsl usb. However, in the near future, they might be needed for some other purpose, for example, board specific settings.
Quoted 22 lines
Quoted 3 lines
If they will be used for other purpose, then they can be moved. They are local now, so keep them local.
Ok. I will move the global macro to
fsl-dt-fixup.c.Quoted 16 lines
Quoted 11 lines
So, i think i will stick with the global macro.
Quoted 9 lines
Quoted 4 lines
/* USB Erratum Checking code */
#ifdefCONFIG_PPC
static inline boolhas_dual_phy(void)--
Best regards,
Marek Vasut--
Best regards,
Marek Vasut--
Best regards,
Marek Vasut
PATCH v3 3/5 fsl: usb: make errata function common for PPC and ARM
In reply to Sriram DashThis patch does the following things:
1. Makes the errata checking code common for PPC and ARM
2. Moves all these static inline functions into a dedicated C file
---
Changes in v3:
- Rework done according to previous patches.
Changes in v2:
- Moves all the static inline functions into a dedicated C file
drivers/usb/common/Makefile | 4 +- drivers/usb/common/fsl-dt-fixup.c | 1 + drivers/usb/common/fsl-errata.c | 178 +++++++++++++++++++++++++++++++++++ include/fsl_usb.h | 191 ++------------------------------------ 4 files changed, 189 insertions(+), 185 deletions(-) create mode 100644 drivers/usb/common/fsl-errata.c
drivers/usb/common/Makefile +2 -2
@@ -4,5 +4,5 @@ # obj-$(CONFIG_DM_USB) += common.o -obj-$(CONFIG_USB_EHCI_FSL) += fsl-dt-fixup.o -obj-$(CONFIG_USB_XHCI_FSL) += fsl-dt-fixup.o +obj-$(CONFIG_USB_EHCI_FSL) += fsl-dt-fixup.o fsl-errata.o +obj-$(CONFIG_USB_XHCI_FSL) += fsl-dt-fixup.o fsl-errata.o
drivers/usb/common/fsl-dt-fixup.c +1 -0
@@ -12,6 +12,7 @@#include <usb.h> #include <asm/io.h> #include <hwconfig.h> +#include <fsl_errata.h> #include <fsl_usb.h> #include <fdt_support.h>
drivers/usb/common/fsl-errata.c new file +178 -0
178 lines not on this page · raw message
include/fsl_usb.h +8 -183
196 lines not on this page · raw message
Signature · 1 line
2.1.0
PATCH v3 4/5 armv8/ls2080: Remove workaround for erratum A008751
In reply to Sriram DashThis errata a008751 is applied on Soc specific file currently.This will be moved to a file where all the errata implementation will take place for usb for fsl. This patch removes the errata workaround from soc specific file for LS2080.
---
Changes in v2:
- Modified commit message
Changes in v2:
- No update
arch/arm/cpu/armv8/fsl-layerscape/soc.c | 10 ---------- 1 file changed, 10 deletions(-)
arch/arm/cpu/armv8/fsl-layerscape/soc.c +0 -10
@@ -124,15 +124,6 @@ void erratum_a009635(void) }#endif /* CONFIG_SYS_FSL_ERRATUM_A009635 */ -static void erratum_a008751 (void ) -{ -#ifdef CONFIG_SYS_FSL_ERRATUM_A008751 -u32 __iomem *scfg = (u32 __iomem *)SCFG_BASE ; - -writel (0x27672b2a , scfg +SCFG_USB3PRM1CR /4 ); -#endif -} -static void erratum_rcw_src (void ) {#if defined(CONFIG_SPL )
@@ -189,7 +180,6 @@ void bypass_smmu(void) }void fsl_lsch3_early_init_f (void ) { -erratum_a008751 ();erratum_rcw_src ();init_early_memctl_regs ();/* tighten IFC timing */ erratum_a009203 ();
Signature · 1 line
2.1.0
PATCH v3 5/5 usb: xhci: fsl: Add workaround for USB erratum A-008751
In reply to Sriram DashThis patch is doing the following:
1. Implementing the errata for LS2080.
2. Adding fixup for fdt for LS2080.
---
Changes in v3:
- Reworked for changes done in errata checking code.
- made inline bool erratum_a008751 as int erratum_a008751
- return 0 for success, 1 for failure for erratum_a008751
- dropped the APPLY_ERRATUM macro.
Changes in v2:
- Reworked for changes done in errata checking code.
.../include/asm/arch-fsl-layerscape/immap_lsch3.h | 1 + board/freescale/ls2080aqds/ls2080aqds.c | 2 ++ board/freescale/ls2080ardb/ls2080ardb.c | 2 ++ drivers/usb/common/fsl-dt-fixup.c | 7 +++++++ drivers/usb/common/fsl-errata.c | 15 ++++++++++++++ drivers/usb/host/xhci-fsl.c | 24 ++++++++++++++++++++++ include/fsl_usb.h | 1 + 7 files changed, 52 insertions(+)
arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h +1 -0
@@ -139,6 +139,7 @@/* Supplemental Configuration */ #define SCFG_BASE 0x01fc0000#define SCFG_USB3PRM1CR 0x000 +#define SCFG_USB3PRM1CR_INIT 0x27672b2a#define TP_ITYP_AV 0x00000001/* Initiator available */ #define TP_ITYP_TYPE (x) (((x) & 0x6) >> 1)/* Initiator Type */
board/freescale/ls2080aqds/ls2080aqds.c +2 -0
@@ -298,6 +298,8 @@ int ft_board_setup(void *blob, bd_t *bd)fdt_fixup_memory_banks (blob, base, size,2 ); +fdt_fixup_dr_usb (blob, bd); +#ifdef CONFIG_FSL_MC_ENET fdt_fixup_board_enet (blob); err =fsl_mc_ldpaa_exit (bd);
board/freescale/ls2080ardb/ls2080ardb.c +2 -0
@@ -281,6 +281,8 @@ int ft_board_setup(void *blob, bd_t *bd)fdt_fixup_memory_banks (blob, base, size,2 ); +fdt_fixup_dr_usb (blob, bd); +#ifdef CONFIG_FSL_MC_ENET fdt_fixup_board_enet (blob); err =fsl_mc_ldpaa_exit (bd);
drivers/usb/common/fsl-dt-fixup.c +7 -0
@@ -133,6 +133,7 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)int usb_erratum_a007075_off =-1 ;int usb_erratum_a007792_off =-1 ;int usb_erratum_a005697_off =-1 ; +int usb_erratum_a008751_off =-1 ;int usb_mode_off =-1 ;int usb_phy_off =-1 ;char str[5 ];
@@ -211,5 +212,11 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd) has_erratum_a005697);if (ret == -ENOSPC )return ; + ret =fdt_fixup_erratum (&usb_erratum_a008751_off, blob, +SNPS_DWC3 ,"a008751" , + has_erratum_a008751); +if (ret == -ENOSPC ) +return ; + } }
drivers/usb/common/fsl-errata.c +15 -0
@@ -175,4 +175,19 @@ bool has_erratum_a004477(void) return false; } +bool has_erratum_a008751 (void ) +{ +u32 svr =get_svr (); +u32 soc =SVR_SOC_VER (svr); + +switch (soc) { +#ifdef CONFIG_ARM64 +case SVR_LS2080 : +case SVR_LS2085 : +return IS_SVR_REV (svr,1 ,0 ); +#endif + } +return false; +} +#endif
drivers/usb/host/xhci-fsl.c +24 -0
@@ -15,6 +15,8 @@#include <linux/usb/xhci-fsl.h> #include <linux/usb/dwc3.h> #include "xhci.h" +#include <fsl_errata.h> +#include <fsl_usb.h> /* Declare global data pointer */ DECLARE_GLOBAL_DATA_PTR ;
@@ -27,6 +29,26 @@ __weak int __board_usb_init(int index, enum usb_init_type init)return 0 ; } +static int erratum_a008751 (void ) +{ +#if defined(CONFIG_TARGET_LS2080AQDS ) || defined(CONFIG_TARGET_LS2080ARDB ) +u32 __iomem *scfg = (u32 __iomem *)SCFG_BASE ; +writel (SCFG_USB3PRM1CR_INIT , scfg +SCFG_USB3PRM1CR /4 ); +return 0 ; +#endif +return 1 ; +} + +static void fsl_apply_xhci_errata (void ) +{ +int ret; +if (has_erratum_a008751 ()) { + ret =erratum_a008751 (); +if (ret !=0 ) +puts ("Failed to apply erratum a008751\n" ); + } +} +static int fsl_xhci_core_init (struct fsl_xhci *fsl_xhci) {int ret =0 ;
@@ -69,6 +91,8 @@ int xhci_hcd_init(int index, struct xhci_hccr **hccr, struct xhci_hcor **hcor)return ret; } +fsl_apply_xhci_errata (); + ret =fsl_xhci_core_init (ctx);if (ret <0 ) {puts ("Failed to initialize xhci\n" );
include/fsl_usb.h +1 -0
@@ -100,5 +100,6 @@ bool has_erratum_a007798(void);bool has_erratum_a007792 (void );bool has_erratum_a005697 (void );bool has_erratum_a004477 (void ); +bool has_erratum_a008751 (void );#endif #endif /*_ASM_FSL_USB_H_ */
Signature · 1 line
2.1.0