mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-30 18:05:48 +01:00 
			
		
		
		
	fsl: usb: make errata function common for PPC and ARM
This 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 Signed-off-by: Sriram Dash <sriram.dash@nxp.com> Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -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> | ||||
|  | ||||
|   | ||||
							
								
								
									
										178
									
								
								drivers/usb/common/fsl-errata.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										178
									
								
								drivers/usb/common/fsl-errata.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,178 @@ | ||||
| /* | ||||
|  * Freescale USB Controller | ||||
|  * | ||||
|  * Copyright 2013 Freescale Semiconductor, Inc. | ||||
|  * | ||||
|  * SPDX-License-Identifier:	GPL-2.0+ | ||||
|  */ | ||||
|  | ||||
| #include <common.h> | ||||
| #include <fsl_errata.h> | ||||
| #include<fsl_usb.h> | ||||
|  | ||||
| /* USB Erratum Checking code */ | ||||
| #if defined(CONFIG_PPC) || defined(CONFIG_ARM) | ||||
| bool has_dual_phy(void) | ||||
| { | ||||
| 	u32 svr = get_svr(); | ||||
| 	u32 soc = SVR_SOC_VER(svr); | ||||
|  | ||||
| 	switch (soc) { | ||||
| #ifdef CONFIG_PPC | ||||
| 	case SVR_T1023: | ||||
| 	case SVR_T1024: | ||||
| 	case SVR_T1013: | ||||
| 	case SVR_T1014: | ||||
| 		return IS_SVR_REV(svr, 1, 0); | ||||
| 	case SVR_T1040: | ||||
| 	case SVR_T1042: | ||||
| 	case SVR_T1020: | ||||
| 	case SVR_T1022: | ||||
| 	case SVR_T2080: | ||||
| 	case SVR_T2081: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1); | ||||
| 	case SVR_T4240: | ||||
| 	case SVR_T4160: | ||||
| 	case SVR_T4080: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); | ||||
| #endif | ||||
| 	} | ||||
|  | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| bool has_erratum_a006261(void) | ||||
| { | ||||
| 	u32 svr = get_svr(); | ||||
| 	u32 soc = SVR_SOC_VER(svr); | ||||
|  | ||||
| 	switch (soc) { | ||||
| #ifdef CONFIG_PPC | ||||
| 	case SVR_P1010: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); | ||||
| 	case SVR_P2041: | ||||
| 	case SVR_P2040: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || | ||||
| 			IS_SVR_REV(svr, 1, 1) || IS_SVR_REV(svr, 2, 1); | ||||
| 	case SVR_P3041: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || | ||||
| 			IS_SVR_REV(svr, 1, 1) || | ||||
| 			IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 2, 1); | ||||
| 	case SVR_P5010: | ||||
| 	case SVR_P5020: | ||||
| 	case SVR_P5021: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); | ||||
| 	case SVR_T4240: | ||||
| 	case SVR_T4160: | ||||
| 	case SVR_T4080: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); | ||||
| 	case SVR_T1040: | ||||
| 		return IS_SVR_REV(svr, 1, 0); | ||||
| 	case SVR_T2080: | ||||
| 	case SVR_T2081: | ||||
| 		return IS_SVR_REV(svr, 1, 0); | ||||
| 	case SVR_P5040: | ||||
| 		return IS_SVR_REV(svr, 1, 0); | ||||
| #endif | ||||
| 	} | ||||
|  | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| bool has_erratum_a007075(void) | ||||
| { | ||||
| 	u32 svr = get_svr(); | ||||
| 	u32 soc = SVR_SOC_VER(svr); | ||||
|  | ||||
| 	switch (soc) { | ||||
| #ifdef CONFIG_PPC | ||||
| 	case SVR_B4860: | ||||
| 	case SVR_B4420: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); | ||||
| 	case SVR_P1010: | ||||
| 		return IS_SVR_REV(svr, 1, 0); | ||||
| 	case SVR_P4080: | ||||
| 		return IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 3, 0); | ||||
| #endif | ||||
| 	} | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| bool has_erratum_a007798(void) | ||||
| { | ||||
| #ifdef CONFIG_PPC | ||||
| 	return SVR_SOC_VER(get_svr()) == SVR_T4240 && | ||||
| 		IS_SVR_REV(get_svr(), 2, 0); | ||||
| #endif | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| bool has_erratum_a007792(void) | ||||
| { | ||||
| 	u32 svr = get_svr(); | ||||
| 	u32 soc = SVR_SOC_VER(svr); | ||||
|  | ||||
| 	switch (soc) { | ||||
| #ifdef CONFIG_PPC | ||||
| 	case SVR_T4240: | ||||
| 	case SVR_T4160: | ||||
| 	case SVR_T4080: | ||||
| 		return IS_SVR_REV(svr, 2, 0); | ||||
| 	case SVR_T1024: | ||||
| 	case SVR_T1023: | ||||
| 		return IS_SVR_REV(svr, 1, 0); | ||||
| 	case SVR_T1040: | ||||
| 	case SVR_T1042: | ||||
| 	case SVR_T1020: | ||||
| 	case SVR_T1022: | ||||
| 	case SVR_T2080: | ||||
| 	case SVR_T2081: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1); | ||||
| #endif | ||||
| 	} | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| bool has_erratum_a005697(void) | ||||
| { | ||||
| 	u32 svr = get_svr(); | ||||
| 	u32 soc = SVR_SOC_VER(svr); | ||||
|  | ||||
| 	switch (soc) { | ||||
| #ifdef CONFIG_PPC | ||||
| 	case SVR_9131: | ||||
| 	case SVR_9132: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1); | ||||
| #endif | ||||
| 	} | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| bool has_erratum_a004477(void) | ||||
| { | ||||
| 	u32 svr = get_svr(); | ||||
| 	u32 soc = SVR_SOC_VER(svr); | ||||
|  | ||||
| 	switch (soc) { | ||||
| #ifdef CONFIG_PPC | ||||
| 	case SVR_P1010: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); | ||||
| 	case SVR_P1022: | ||||
| 	case SVR_9131: | ||||
| 	case SVR_9132: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1); | ||||
| 	case SVR_P2020: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0) || | ||||
| 			IS_SVR_REV(svr, 2, 1); | ||||
| 	case SVR_B4860: | ||||
| 	case SVR_B4420: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); | ||||
| 	case SVR_P4080: | ||||
| 		return IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 3, 0); | ||||
| #endif | ||||
| 	} | ||||
|  | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| #endif | ||||
| @@ -86,188 +86,13 @@ struct ccsr_usb_phy { | ||||
| #endif | ||||
|  | ||||
| /* USB Erratum Checking code */ | ||||
| #ifdef CONFIG_PPC | ||||
| static inline bool has_dual_phy(void) | ||||
| { | ||||
| 	u32 svr = get_svr(); | ||||
| 	u32 soc = SVR_SOC_VER(svr); | ||||
|  | ||||
| 	switch (soc) { | ||||
| 	case SVR_T1023: | ||||
| 	case SVR_T1024: | ||||
| 	case SVR_T1013: | ||||
| 	case SVR_T1014: | ||||
| 		return IS_SVR_REV(svr, 1, 0); | ||||
| 	case SVR_T1040: | ||||
| 	case SVR_T1042: | ||||
| 	case SVR_T1020: | ||||
| 	case SVR_T1022: | ||||
| 	case SVR_T2080: | ||||
| 	case SVR_T2081: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1); | ||||
| 	case SVR_T4240: | ||||
| 	case SVR_T4160: | ||||
| 	case SVR_T4080: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); | ||||
| 	} | ||||
|  | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| static inline bool has_erratum_a006261(void) | ||||
| { | ||||
| 	u32 svr = get_svr(); | ||||
| 	u32 soc = SVR_SOC_VER(svr); | ||||
|  | ||||
| 	switch (soc) { | ||||
| 	case SVR_P1010: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); | ||||
| 	case SVR_P2041: | ||||
| 	case SVR_P2040: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || | ||||
| 			IS_SVR_REV(svr, 1, 1) || IS_SVR_REV(svr, 2, 1); | ||||
| 	case SVR_P3041: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || | ||||
| 			IS_SVR_REV(svr, 1, 1) || | ||||
| 			IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 2, 1); | ||||
| 	case SVR_P5010: | ||||
| 	case SVR_P5020: | ||||
| 	case SVR_P5021: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); | ||||
| 	case SVR_T4240: | ||||
| 	case SVR_T4160: | ||||
| 	case SVR_T4080: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); | ||||
| 	case SVR_T1040: | ||||
| 		return IS_SVR_REV(svr, 1, 0); | ||||
| 	case SVR_T2080: | ||||
| 	case SVR_T2081: | ||||
| 		return IS_SVR_REV(svr, 1, 0); | ||||
| 	case SVR_P5040: | ||||
| 		return IS_SVR_REV(svr, 1, 0); | ||||
| 	} | ||||
|  | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| static inline bool has_erratum_a007075(void) | ||||
| { | ||||
| 	u32 svr = get_svr(); | ||||
| 	u32 soc = SVR_SOC_VER(svr); | ||||
|  | ||||
| 	switch (soc) { | ||||
| 	case SVR_B4860: | ||||
| 	case SVR_B4420: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); | ||||
| 	case SVR_P1010: | ||||
| 		return IS_SVR_REV(svr, 1, 0); | ||||
| 	case SVR_P4080: | ||||
| 		return IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 3, 0); | ||||
| 	} | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| static inline bool has_erratum_a007798(void) | ||||
| { | ||||
| 	return SVR_SOC_VER(get_svr()) == SVR_T4240 && | ||||
| 		IS_SVR_REV(get_svr(), 2, 0); | ||||
| } | ||||
|  | ||||
| static inline bool has_erratum_a007792(void) | ||||
| { | ||||
| 	u32 svr = get_svr(); | ||||
| 	u32 soc = SVR_SOC_VER(svr); | ||||
|  | ||||
| 	switch (soc) { | ||||
| 	case SVR_T4240: | ||||
| 	case SVR_T4160: | ||||
| 	case SVR_T4080: | ||||
| 		return IS_SVR_REV(svr, 2, 0); | ||||
| 	case SVR_T1024: | ||||
| 	case SVR_T1023: | ||||
| 		return IS_SVR_REV(svr, 1, 0); | ||||
| 	case SVR_T1040: | ||||
| 	case SVR_T1042: | ||||
| 	case SVR_T1020: | ||||
| 	case SVR_T1022: | ||||
| 	case SVR_T2080: | ||||
| 	case SVR_T2081: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1); | ||||
| 	} | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| static inline bool has_erratum_a005697(void) | ||||
| { | ||||
| 	u32 svr = get_svr(); | ||||
| 	u32 soc = SVR_SOC_VER(svr); | ||||
|  | ||||
| 	switch (soc) { | ||||
| 	case SVR_9131: | ||||
| 	case SVR_9132: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1); | ||||
| 	} | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| static inline bool has_erratum_a004477(void) | ||||
| { | ||||
| 	u32 svr = get_svr(); | ||||
| 	u32 soc = SVR_SOC_VER(svr); | ||||
|  | ||||
| 	switch (soc) { | ||||
| 	case SVR_P1010: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); | ||||
| 	case SVR_P1022: | ||||
| 	case SVR_9131: | ||||
| 	case SVR_9132: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1); | ||||
| 	case SVR_P2020: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0) || | ||||
| 			IS_SVR_REV(svr, 2, 1); | ||||
| 	case SVR_B4860: | ||||
| 	case SVR_B4420: | ||||
| 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); | ||||
| 	case SVR_P4080: | ||||
| 		return IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 3, 0); | ||||
| 	} | ||||
|  | ||||
| 	return false; | ||||
| } | ||||
| #else | ||||
| static inline bool has_dual_phy(void) | ||||
| { | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| static inline bool has_erratum_a006261(void) | ||||
| { | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| static inline bool has_erratum_a007075(void) | ||||
| { | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| static inline bool has_erratum_a007798(void) | ||||
| { | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| static inline bool has_erratum_a007792(void) | ||||
| { | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| static inline bool has_erratum_a005697(void) | ||||
| { | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| static inline bool has_erratum_a004477(void) | ||||
| { | ||||
| 	return false; | ||||
| } | ||||
| #if defined(CONFIG_PPC) || defined(CONFIG_ARM) | ||||
| bool has_dual_phy(void); | ||||
| bool has_erratum_a006261(void); | ||||
| bool has_erratum_a007075(void); | ||||
| bool has_erratum_a007798(void); | ||||
| bool has_erratum_a007792(void); | ||||
| bool has_erratum_a005697(void); | ||||
| bool has_erratum_a004477(void); | ||||
| #endif | ||||
| #endif /*_ASM_FSL_USB_H_ */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user