410 lines
		
	
	
	
		
			11 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			410 lines
		
	
	
	
		
			11 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /*****************************************************************************
 | ||
|  | * Copyright 2009 Broadcom Corporation.  All rights reserved. | ||
|  | * | ||
|  | * Unless you and Broadcom execute a separate written software license | ||
|  | * agreement governing use of this software, this software is licensed to you | ||
|  | * under the terms of the GNU General Public License version 2, available at | ||
|  | * http://www.broadcom.com/licenses/GPLv2.php (the "GPL").
 | ||
|  | * | ||
|  | * Notwithstanding the above, under no circumstances may you combine this | ||
|  | * software in any way with any other Broadcom software provided under a | ||
|  | * license other than the GPL, without Broadcom's express prior written | ||
|  | * consent. | ||
|  | *****************************************************************************/ | ||
|  | 
 | ||
|  | #ifndef CAP_INLINE_H
 | ||
|  | #define CAP_INLINE_H
 | ||
|  | 
 | ||
|  | /* ---- Include Files ---------------------------------------------------- */ | ||
|  | #include <mach/csp/cap.h>
 | ||
|  | #include <cfg_global.h>
 | ||
|  | 
 | ||
|  | /* ---- Public Constants and Types --------------------------------------- */ | ||
|  | #define CAP_CONFIG0_VPM_DIS          0x00000001
 | ||
|  | #define CAP_CONFIG0_ETH_PHY0_DIS     0x00000002
 | ||
|  | #define CAP_CONFIG0_ETH_PHY1_DIS     0x00000004
 | ||
|  | #define CAP_CONFIG0_ETH_GMII0_DIS    0x00000008
 | ||
|  | #define CAP_CONFIG0_ETH_GMII1_DIS    0x00000010
 | ||
|  | #define CAP_CONFIG0_ETH_SGMII0_DIS   0x00000020
 | ||
|  | #define CAP_CONFIG0_ETH_SGMII1_DIS   0x00000040
 | ||
|  | #define CAP_CONFIG0_USB0_DIS         0x00000080
 | ||
|  | #define CAP_CONFIG0_USB1_DIS         0x00000100
 | ||
|  | #define CAP_CONFIG0_TSC_DIS          0x00000200
 | ||
|  | #define CAP_CONFIG0_EHSS0_DIS        0x00000400
 | ||
|  | #define CAP_CONFIG0_EHSS1_DIS        0x00000800
 | ||
|  | #define CAP_CONFIG0_SDIO0_DIS        0x00001000
 | ||
|  | #define CAP_CONFIG0_SDIO1_DIS        0x00002000
 | ||
|  | #define CAP_CONFIG0_UARTB_DIS        0x00004000
 | ||
|  | #define CAP_CONFIG0_KEYPAD_DIS       0x00008000
 | ||
|  | #define CAP_CONFIG0_CLCD_DIS         0x00010000
 | ||
|  | #define CAP_CONFIG0_GE_DIS           0x00020000
 | ||
|  | #define CAP_CONFIG0_LEDM_DIS         0x00040000
 | ||
|  | #define CAP_CONFIG0_BBL_DIS          0x00080000
 | ||
|  | #define CAP_CONFIG0_VDEC_DIS         0x00100000
 | ||
|  | #define CAP_CONFIG0_PIF_DIS          0x00200000
 | ||
|  | #define CAP_CONFIG0_RESERVED1_DIS    0x00400000
 | ||
|  | #define CAP_CONFIG0_RESERVED2_DIS    0x00800000
 | ||
|  | 
 | ||
|  | #define CAP_CONFIG1_APMA_DIS         0x00000001
 | ||
|  | #define CAP_CONFIG1_APMB_DIS         0x00000002
 | ||
|  | #define CAP_CONFIG1_APMC_DIS         0x00000004
 | ||
|  | #define CAP_CONFIG1_CLCD_RES_MASK    0x00000600
 | ||
|  | #define CAP_CONFIG1_CLCD_RES_SHIFT   9
 | ||
|  | #define CAP_CONFIG1_CLCD_RES_WVGA    (CAP_LCD_WVGA << CAP_CONFIG1_CLCD_RES_SHIFT)
 | ||
|  | #define CAP_CONFIG1_CLCD_RES_VGA     (CAP_LCD_VGA << CAP_CONFIG1_CLCD_RES_SHIFT)
 | ||
|  | #define CAP_CONFIG1_CLCD_RES_WQVGA   (CAP_LCD_WQVGA << CAP_CONFIG1_CLCD_RES_SHIFT)
 | ||
|  | #define CAP_CONFIG1_CLCD_RES_QVGA    (CAP_LCD_QVGA << CAP_CONFIG1_CLCD_RES_SHIFT)
 | ||
|  | 
 | ||
|  | #define CAP_CONFIG2_SPU_DIS          0x00000010
 | ||
|  | #define CAP_CONFIG2_PKA_DIS          0x00000020
 | ||
|  | #define CAP_CONFIG2_RNG_DIS          0x00000080
 | ||
|  | 
 | ||
|  | #if   (CFG_GLOBAL_CHIP == BCM11107)
 | ||
|  | #define capConfig0 0
 | ||
|  | #define capConfig1 CAP_CONFIG1_CLCD_RES_WVGA
 | ||
|  | #define capConfig2 0
 | ||
|  | #define CAP_APM_MAX_NUM_CHANS 3
 | ||
|  | #elif (CFG_GLOBAL_CHIP == FPGA11107)
 | ||
|  | #define capConfig0 0
 | ||
|  | #define capConfig1 CAP_CONFIG1_CLCD_RES_WVGA
 | ||
|  | #define capConfig2 0
 | ||
|  | #define CAP_APM_MAX_NUM_CHANS 3
 | ||
|  | #elif (CFG_GLOBAL_CHIP == BCM11109)
 | ||
|  | #define capConfig0 (CAP_CONFIG0_USB1_DIS | CAP_CONFIG0_EHSS1_DIS | CAP_CONFIG0_SDIO1_DIS | CAP_CONFIG0_GE_DIS | CAP_CONFIG0_BBL_DIS | CAP_CONFIG0_VDEC_DIS)
 | ||
|  | #define capConfig1 (CAP_CONFIG1_APMC_DIS | CAP_CONFIG1_CLCD_RES_WQVGA)
 | ||
|  | #define capConfig2 (CAP_CONFIG2_SPU_DIS | CAP_CONFIG2_PKA_DIS)
 | ||
|  | #define CAP_APM_MAX_NUM_CHANS 2
 | ||
|  | #elif (CFG_GLOBAL_CHIP == BCM11170)
 | ||
|  | #define capConfig0 (CAP_CONFIG0_ETH_GMII0_DIS | CAP_CONFIG0_ETH_GMII1_DIS | CAP_CONFIG0_USB0_DIS | CAP_CONFIG0_USB1_DIS | CAP_CONFIG0_TSC_DIS | CAP_CONFIG0_EHSS1_DIS | CAP_CONFIG0_SDIO0_DIS | CAP_CONFIG0_SDIO1_DIS | CAP_CONFIG0_UARTB_DIS | CAP_CONFIG0_CLCD_DIS | CAP_CONFIG0_GE_DIS | CAP_CONFIG0_BBL_DIS | CAP_CONFIG0_VDEC_DIS)
 | ||
|  | #define capConfig1 (CAP_CONFIG1_APMC_DIS | CAP_CONFIG1_CLCD_RES_WQVGA)
 | ||
|  | #define capConfig2 (CAP_CONFIG2_SPU_DIS | CAP_CONFIG2_PKA_DIS)
 | ||
|  | #define CAP_APM_MAX_NUM_CHANS 2
 | ||
|  | #elif (CFG_GLOBAL_CHIP == BCM11110)
 | ||
|  | #define capConfig0 (CAP_CONFIG0_USB1_DIS | CAP_CONFIG0_TSC_DIS | CAP_CONFIG0_EHSS1_DIS | CAP_CONFIG0_SDIO0_DIS | CAP_CONFIG0_SDIO1_DIS | CAP_CONFIG0_UARTB_DIS | CAP_CONFIG0_GE_DIS | CAP_CONFIG0_BBL_DIS | CAP_CONFIG0_VDEC_DIS)
 | ||
|  | #define capConfig1 CAP_CONFIG1_APMC_DIS
 | ||
|  | #define capConfig2 (CAP_CONFIG2_SPU_DIS | CAP_CONFIG2_PKA_DIS)
 | ||
|  | #define CAP_APM_MAX_NUM_CHANS 2
 | ||
|  | #elif (CFG_GLOBAL_CHIP == BCM11211)
 | ||
|  | #define capConfig0 (CAP_CONFIG0_ETH_PHY0_DIS | CAP_CONFIG0_ETH_GMII0_DIS | CAP_CONFIG0_ETH_GMII1_DIS | CAP_CONFIG0_ETH_SGMII0_DIS | CAP_CONFIG0_ETH_SGMII1_DIS | CAP_CONFIG0_CLCD_DIS)
 | ||
|  | #define capConfig1 CAP_CONFIG1_APMC_DIS
 | ||
|  | #define capConfig2 0
 | ||
|  | #define CAP_APM_MAX_NUM_CHANS 2
 | ||
|  | #else
 | ||
|  | #error CFG_GLOBAL_CHIP type capabilities not defined
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #if   ((CFG_GLOBAL_CHIP == BCM11107) || (CFG_GLOBAL_CHIP == FPGA11107))
 | ||
|  | #define CAP_HW_CFG_ARM_CLK_HZ 500000000
 | ||
|  | #elif ((CFG_GLOBAL_CHIP == BCM11109) || (CFG_GLOBAL_CHIP == BCM11170) || (CFG_GLOBAL_CHIP == BCM11110))
 | ||
|  | #define CAP_HW_CFG_ARM_CLK_HZ 300000000
 | ||
|  | #elif (CFG_GLOBAL_CHIP == BCM11211)
 | ||
|  | #define CAP_HW_CFG_ARM_CLK_HZ 666666666
 | ||
|  | #else
 | ||
|  | #error CFG_GLOBAL_CHIP type capabilities not defined
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #if ((CFG_GLOBAL_CHIP == BCM11107) || (CFG_GLOBAL_CHIP == BCM11211) || (CFG_GLOBAL_CHIP == FPGA11107))
 | ||
|  | #define CAP_HW_CFG_VPM_CLK_HZ 333333333
 | ||
|  | #elif ((CFG_GLOBAL_CHIP == BCM11109) || (CFG_GLOBAL_CHIP == BCM11170) || (CFG_GLOBAL_CHIP == BCM11110))
 | ||
|  | #define CAP_HW_CFG_VPM_CLK_HZ 200000000
 | ||
|  | #else
 | ||
|  | #error CFG_GLOBAL_CHIP type capabilities not defined
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /* ---- Public Variable Externs ------------------------------------------ */ | ||
|  | /* ---- Public Function Prototypes --------------------------------------- */ | ||
|  | 
 | ||
|  | /****************************************************************************
 | ||
|  | *  cap_isPresent - | ||
|  | * | ||
|  | *  PURPOSE: | ||
|  | *     Determines if the chip has a certain capability present | ||
|  | * | ||
|  | *  PARAMETERS: | ||
|  | *     capability - type of capability to determine if present | ||
|  | * | ||
|  | *  RETURNS: | ||
|  | *     CAP_PRESENT or CAP_NOT_PRESENT | ||
|  | ****************************************************************************/ | ||
|  | static inline CAP_RC_T cap_isPresent(CAP_CAPABILITY_T capability, int index) | ||
|  | { | ||
|  | 	CAP_RC_T returnVal = CAP_NOT_PRESENT; | ||
|  | 
 | ||
|  | 	switch (capability) { | ||
|  | 	case CAP_VPM: | ||
|  | 		{ | ||
|  | 			if (!(capConfig0 & CAP_CONFIG0_VPM_DIS)) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 
 | ||
|  | 	case CAP_ETH_PHY: | ||
|  | 		{ | ||
|  | 			if ((index == 0) | ||
|  | 			    && (!(capConfig0 & CAP_CONFIG0_ETH_PHY0_DIS))) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 			if ((index == 1) | ||
|  | 			    && (!(capConfig0 & CAP_CONFIG0_ETH_PHY1_DIS))) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 
 | ||
|  | 	case CAP_ETH_GMII: | ||
|  | 		{ | ||
|  | 			if ((index == 0) | ||
|  | 			    && (!(capConfig0 & CAP_CONFIG0_ETH_GMII0_DIS))) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 			if ((index == 1) | ||
|  | 			    && (!(capConfig0 & CAP_CONFIG0_ETH_GMII1_DIS))) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 
 | ||
|  | 	case CAP_ETH_SGMII: | ||
|  | 		{ | ||
|  | 			if ((index == 0) | ||
|  | 			    && (!(capConfig0 & CAP_CONFIG0_ETH_SGMII0_DIS))) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 			if ((index == 1) | ||
|  | 			    && (!(capConfig0 & CAP_CONFIG0_ETH_SGMII1_DIS))) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 
 | ||
|  | 	case CAP_USB: | ||
|  | 		{ | ||
|  | 			if ((index == 0) | ||
|  | 			    && (!(capConfig0 & CAP_CONFIG0_USB0_DIS))) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 			if ((index == 1) | ||
|  | 			    && (!(capConfig0 & CAP_CONFIG0_USB1_DIS))) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 
 | ||
|  | 	case CAP_TSC: | ||
|  | 		{ | ||
|  | 			if (!(capConfig0 & CAP_CONFIG0_TSC_DIS)) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 
 | ||
|  | 	case CAP_EHSS: | ||
|  | 		{ | ||
|  | 			if ((index == 0) | ||
|  | 			    && (!(capConfig0 & CAP_CONFIG0_EHSS0_DIS))) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 			if ((index == 1) | ||
|  | 			    && (!(capConfig0 & CAP_CONFIG0_EHSS1_DIS))) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 
 | ||
|  | 	case CAP_SDIO: | ||
|  | 		{ | ||
|  | 			if ((index == 0) | ||
|  | 			    && (!(capConfig0 & CAP_CONFIG0_SDIO0_DIS))) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 			if ((index == 1) | ||
|  | 			    && (!(capConfig0 & CAP_CONFIG0_SDIO1_DIS))) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 
 | ||
|  | 	case CAP_UARTB: | ||
|  | 		{ | ||
|  | 			if (!(capConfig0 & CAP_CONFIG0_UARTB_DIS)) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 
 | ||
|  | 	case CAP_KEYPAD: | ||
|  | 		{ | ||
|  | 			if (!(capConfig0 & CAP_CONFIG0_KEYPAD_DIS)) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 
 | ||
|  | 	case CAP_CLCD: | ||
|  | 		{ | ||
|  | 			if (!(capConfig0 & CAP_CONFIG0_CLCD_DIS)) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 
 | ||
|  | 	case CAP_GE: | ||
|  | 		{ | ||
|  | 			if (!(capConfig0 & CAP_CONFIG0_GE_DIS)) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 
 | ||
|  | 	case CAP_LEDM: | ||
|  | 		{ | ||
|  | 			if (!(capConfig0 & CAP_CONFIG0_LEDM_DIS)) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 
 | ||
|  | 	case CAP_BBL: | ||
|  | 		{ | ||
|  | 			if (!(capConfig0 & CAP_CONFIG0_BBL_DIS)) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 
 | ||
|  | 	case CAP_VDEC: | ||
|  | 		{ | ||
|  | 			if (!(capConfig0 & CAP_CONFIG0_VDEC_DIS)) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 
 | ||
|  | 	case CAP_PIF: | ||
|  | 		{ | ||
|  | 			if (!(capConfig0 & CAP_CONFIG0_PIF_DIS)) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 
 | ||
|  | 	case CAP_APM: | ||
|  | 		{ | ||
|  | 			if ((index == 0) | ||
|  | 			    && (!(capConfig1 & CAP_CONFIG1_APMA_DIS))) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 			if ((index == 1) | ||
|  | 			    && (!(capConfig1 & CAP_CONFIG1_APMB_DIS))) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 			if ((index == 2) | ||
|  | 			    && (!(capConfig1 & CAP_CONFIG1_APMC_DIS))) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 
 | ||
|  | 	case CAP_SPU: | ||
|  | 		{ | ||
|  | 			if (!(capConfig2 & CAP_CONFIG2_SPU_DIS)) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 
 | ||
|  | 	case CAP_PKA: | ||
|  | 		{ | ||
|  | 			if (!(capConfig2 & CAP_CONFIG2_PKA_DIS)) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 
 | ||
|  | 	case CAP_RNG: | ||
|  | 		{ | ||
|  | 			if (!(capConfig2 & CAP_CONFIG2_RNG_DIS)) { | ||
|  | 				returnVal = CAP_PRESENT; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 
 | ||
|  | 	default: | ||
|  | 		{ | ||
|  | 		} | ||
|  | 		break; | ||
|  | 	} | ||
|  | 	return returnVal; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************
 | ||
|  | *  cap_getMaxArmSpeedHz - | ||
|  | * | ||
|  | *  PURPOSE: | ||
|  | *     Determines the maximum speed of the ARM CPU | ||
|  | * | ||
|  | *  PARAMETERS: | ||
|  | *     none | ||
|  | * | ||
|  | *  RETURNS: | ||
|  | *     clock speed in Hz that the ARM processor is able to run at | ||
|  | ****************************************************************************/ | ||
|  | static inline uint32_t cap_getMaxArmSpeedHz(void) | ||
|  | { | ||
|  | #if   ((CFG_GLOBAL_CHIP == BCM11107) || (CFG_GLOBAL_CHIP == FPGA11107))
 | ||
|  | 	return 500000000; | ||
|  | #elif ((CFG_GLOBAL_CHIP == BCM11109) || (CFG_GLOBAL_CHIP == BCM11170) || (CFG_GLOBAL_CHIP == BCM11110))
 | ||
|  | 	return 300000000; | ||
|  | #elif (CFG_GLOBAL_CHIP == BCM11211)
 | ||
|  | 	return 666666666; | ||
|  | #else
 | ||
|  | #error CFG_GLOBAL_CHIP type capabilities not defined
 | ||
|  | #endif
 | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************
 | ||
|  | *  cap_getMaxVpmSpeedHz - | ||
|  | * | ||
|  | *  PURPOSE: | ||
|  | *     Determines the maximum speed of the VPM | ||
|  | * | ||
|  | *  PARAMETERS: | ||
|  | *     none | ||
|  | * | ||
|  | *  RETURNS: | ||
|  | *     clock speed in Hz that the VPM is able to run at | ||
|  | ****************************************************************************/ | ||
|  | static inline uint32_t cap_getMaxVpmSpeedHz(void) | ||
|  | { | ||
|  | #if ((CFG_GLOBAL_CHIP == BCM11107) || (CFG_GLOBAL_CHIP == BCM11211) || (CFG_GLOBAL_CHIP == FPGA11107))
 | ||
|  | 	return 333333333; | ||
|  | #elif ((CFG_GLOBAL_CHIP == BCM11109) || (CFG_GLOBAL_CHIP == BCM11170) || (CFG_GLOBAL_CHIP == BCM11110))
 | ||
|  | 	return 200000000; | ||
|  | #else
 | ||
|  | #error CFG_GLOBAL_CHIP type capabilities not defined
 | ||
|  | #endif
 | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************
 | ||
|  | *  cap_getMaxLcdRes - | ||
|  | * | ||
|  | *  PURPOSE: | ||
|  | *     Determines the maximum LCD resolution capabilities | ||
|  | * | ||
|  | *  PARAMETERS: | ||
|  | *     none | ||
|  | * | ||
|  | *  RETURNS: | ||
|  | *   CAP_LCD_WVGA, CAP_LCD_VGA, CAP_LCD_WQVGA or CAP_LCD_QVGA | ||
|  | * | ||
|  | ****************************************************************************/ | ||
|  | static inline CAP_LCD_RES_T cap_getMaxLcdRes(void) | ||
|  | { | ||
|  | 	return (CAP_LCD_RES_T) | ||
|  | 		((capConfig1 & CAP_CONFIG1_CLCD_RES_MASK) >> | ||
|  | 		 CAP_CONFIG1_CLCD_RES_SHIFT); | ||
|  | } | ||
|  | 
 | ||
|  | #endif
 |