1674 lines
		
	
	
	
		
			48 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			1674 lines
		
	
	
	
		
			48 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /*****************************************************************************
 | ||
|  | * Copyright 2003 - 2008 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 CHIPC_INLINE_H
 | ||
|  | #define CHIPC_INLINE_H
 | ||
|  | 
 | ||
|  | /* ---- Include Files ----------------------------------------------------- */ | ||
|  | 
 | ||
|  | #include <csp/errno.h>
 | ||
|  | #include <csp/reg.h>
 | ||
|  | #include <mach/csp/chipcHw_reg.h>
 | ||
|  | #include <mach/csp/chipcHw_def.h>
 | ||
|  | 
 | ||
|  | /* ---- Private Constants and Types --------------------------------------- */ | ||
|  | typedef enum { | ||
|  | 	chipcHw_OPTYPE_BYPASS,	/* Bypass operation */ | ||
|  | 	chipcHw_OPTYPE_OUTPUT	/* Output operation */ | ||
|  | } chipcHw_OPTYPE_e; | ||
|  | 
 | ||
|  | /* ---- Public Constants and Types ---------------------------------------- */ | ||
|  | /* ---- Public Variable Externs ------------------------------------------- */ | ||
|  | /* ---- Public Function Prototypes ---------------------------------------- */ | ||
|  | /* ---- Private Function Prototypes --------------------------------------- */ | ||
|  | static inline void chipcHw_setClock(chipcHw_CLOCK_e clock, | ||
|  | 				    chipcHw_OPTYPE_e type, int mode); | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Get Numeric Chip ID | ||
|  | * | ||
|  | *  This function returns Chip ID that includes the revison number | ||
|  | * | ||
|  | *  @return  Complete numeric Chip ID | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline uint32_t chipcHw_getChipId(void) | ||
|  | { | ||
|  | 	return pChipcHw->ChipId; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Enable Spread Spectrum | ||
|  | * | ||
|  | *  @note chipcHw_Init() must be called earlier | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_enableSpreadSpectrum(void) | ||
|  | { | ||
|  | 	if ((pChipcHw-> | ||
|  | 	     PLLPreDivider & chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_MASK) != | ||
|  | 	    chipcHw_REG_PLL_PREDIVIDER_NDIV_MODE_INTEGER) { | ||
|  | 		ddrcReg_PHY_ADDR_CTL_REGP->ssCfg = | ||
|  | 		    (0xFFFF << ddrcReg_PHY_ADDR_SS_CFG_NDIV_AMPLITUDE_SHIFT) | | ||
|  | 		    (ddrcReg_PHY_ADDR_SS_CFG_MIN_CYCLE_PER_TICK << | ||
|  | 		     ddrcReg_PHY_ADDR_SS_CFG_CYCLE_PER_TICK_SHIFT); | ||
|  | 		ddrcReg_PHY_ADDR_CTL_REGP->ssCtl |= | ||
|  | 		    ddrcReg_PHY_ADDR_SS_CTRL_ENABLE; | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Disable Spread Spectrum | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_disableSpreadSpectrum(void) | ||
|  | { | ||
|  | 	ddrcReg_PHY_ADDR_CTL_REGP->ssCtl &= ~ddrcReg_PHY_ADDR_SS_CTRL_ENABLE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Get Chip Product ID | ||
|  | * | ||
|  | *  This function returns Chip Product ID | ||
|  | * | ||
|  | *  @return  Chip Product ID | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline uint32_t chipcHw_getChipProductId(void) | ||
|  | { | ||
|  | 	return (pChipcHw-> | ||
|  | 		 ChipId & chipcHw_REG_CHIPID_BASE_MASK) >> | ||
|  | 		chipcHw_REG_CHIPID_BASE_SHIFT; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Get revision number | ||
|  | * | ||
|  | *  This function returns revision number of the chip | ||
|  | * | ||
|  | *  @return  Revision number | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline chipcHw_REV_NUMBER_e chipcHw_getChipRevisionNumber(void) | ||
|  | { | ||
|  | 	return pChipcHw->ChipId & chipcHw_REG_CHIPID_REV_MASK; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Enables bus interface clock | ||
|  | * | ||
|  | *  Enables  bus interface clock of various device | ||
|  | * | ||
|  | *  @return  void | ||
|  | * | ||
|  | *  @note    use chipcHw_REG_BUS_CLOCK_XXXX for mask | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_busInterfaceClockEnable(uint32_t mask) | ||
|  | { | ||
|  | 	reg32_modify_or(&pChipcHw->BusIntfClock, mask); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Disables bus interface clock | ||
|  | * | ||
|  | *  Disables  bus interface clock of various device | ||
|  | * | ||
|  | *  @return  void | ||
|  | * | ||
|  | *  @note    use chipcHw_REG_BUS_CLOCK_XXXX | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_busInterfaceClockDisable(uint32_t mask) | ||
|  | { | ||
|  | 	reg32_modify_and(&pChipcHw->BusIntfClock, ~mask); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Get status (enabled/disabled) of bus interface clock | ||
|  | * | ||
|  | *  This function returns the status of devices' bus interface clock | ||
|  | * | ||
|  | *  @return  Bus interface clock | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline uint32_t chipcHw_getBusInterfaceClockStatus(void) | ||
|  | { | ||
|  | 	return pChipcHw->BusIntfClock; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Enables various audio channels | ||
|  | * | ||
|  | *  Enables audio channel | ||
|  | * | ||
|  | *  @return  void | ||
|  | * | ||
|  | *  @note    use chipcHw_REG_AUDIO_CHANNEL_XXXXXX | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_audioChannelEnable(uint32_t mask) | ||
|  | { | ||
|  | 	reg32_modify_or(&pChipcHw->AudioEnable, mask); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Disables various audio channels | ||
|  | * | ||
|  | *  Disables audio channel | ||
|  | * | ||
|  | *  @return  void | ||
|  | * | ||
|  | *  @note    use chipcHw_REG_AUDIO_CHANNEL_XXXXXX | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_audioChannelDisable(uint32_t mask) | ||
|  | { | ||
|  | 	reg32_modify_and(&pChipcHw->AudioEnable, ~mask); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief    Soft resets devices | ||
|  | * | ||
|  | *  Soft resets various devices | ||
|  | * | ||
|  | *  @return   void | ||
|  | * | ||
|  | *  @note     use chipcHw_REG_SOFT_RESET_XXXXXX defines | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_softReset(uint64_t mask) | ||
|  | { | ||
|  | 	chipcHw_softResetEnable(mask); | ||
|  | 	chipcHw_softResetDisable(mask); | ||
|  | } | ||
|  | 
 | ||
|  | static inline void chipcHw_softResetDisable(uint64_t mask) | ||
|  | { | ||
|  | 	uint32_t ctrl1 = (uint32_t) mask; | ||
|  | 	uint32_t ctrl2 = (uint32_t) (mask >> 32); | ||
|  | 
 | ||
|  | 	/* Deassert module soft reset */ | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	pChipcHw->SoftReset1 ^= ctrl1; | ||
|  | 	pChipcHw->SoftReset2 ^= (ctrl2 & (~chipcHw_REG_SOFT_RESET_UNHOLD_MASK)); | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | static inline void chipcHw_softResetEnable(uint64_t mask) | ||
|  | { | ||
|  | 	uint32_t ctrl1 = (uint32_t) mask; | ||
|  | 	uint32_t ctrl2 = (uint32_t) (mask >> 32); | ||
|  | 	uint32_t unhold = 0; | ||
|  | 
 | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	pChipcHw->SoftReset1 |= ctrl1; | ||
|  | 	/* Mask out unhold request bits */ | ||
|  | 	pChipcHw->SoftReset2 |= (ctrl2 & (~chipcHw_REG_SOFT_RESET_UNHOLD_MASK)); | ||
|  | 
 | ||
|  | 	/* Process unhold requests */ | ||
|  | 	if (ctrl2 & chipcHw_REG_SOFT_RESET_VPM_GLOBAL_UNHOLD) { | ||
|  | 		unhold = chipcHw_REG_SOFT_RESET_VPM_GLOBAL_HOLD; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	if (ctrl2 & chipcHw_REG_SOFT_RESET_VPM_UNHOLD) { | ||
|  | 		unhold |= chipcHw_REG_SOFT_RESET_VPM_HOLD; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	if (ctrl2 & chipcHw_REG_SOFT_RESET_ARM_UNHOLD) { | ||
|  | 		unhold |= chipcHw_REG_SOFT_RESET_ARM_HOLD; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	if (unhold) { | ||
|  | 		/* Make sure unhold request is effective */ | ||
|  | 		pChipcHw->SoftReset1 &= ~unhold; | ||
|  | 	} | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief    Configures misc CHIP functionality | ||
|  | * | ||
|  | *  Configures CHIP functionality | ||
|  | * | ||
|  | *  @return   void | ||
|  | * | ||
|  | *  @note     use chipcHw_REG_MISC_CTRL_XXXXXX | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_miscControl(uint32_t mask) | ||
|  | { | ||
|  | 	reg32_write(&pChipcHw->MiscCtrl, mask); | ||
|  | } | ||
|  | 
 | ||
|  | static inline void chipcHw_miscControlDisable(uint32_t mask) | ||
|  | { | ||
|  | 	reg32_modify_and(&pChipcHw->MiscCtrl, ~mask); | ||
|  | } | ||
|  | 
 | ||
|  | static inline void chipcHw_miscControlEnable(uint32_t mask) | ||
|  | { | ||
|  | 	reg32_modify_or(&pChipcHw->MiscCtrl, mask); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief    Set OTP options | ||
|  | * | ||
|  | *  Set OTP options | ||
|  | * | ||
|  | *  @return   void | ||
|  | * | ||
|  | *  @note     use chipcHw_REG_OTP_XXXXXX | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_setOTPOption(uint64_t mask) | ||
|  | { | ||
|  | 	uint32_t ctrl1 = (uint32_t) mask; | ||
|  | 	uint32_t ctrl2 = (uint32_t) (mask >> 32); | ||
|  | 
 | ||
|  | 	reg32_modify_or(&pChipcHw->SoftOTP1, ctrl1); | ||
|  | 	reg32_modify_or(&pChipcHw->SoftOTP2, ctrl2); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief    Get sticky bits | ||
|  | * | ||
|  | *  @return   Sticky bit options of type chipcHw_REG_STICKY_XXXXXX | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline uint32_t chipcHw_getStickyBits(void) | ||
|  | { | ||
|  | 	return pChipcHw->Sticky; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief    Set sticky bits | ||
|  | * | ||
|  | *  @return   void | ||
|  | * | ||
|  | *  @note     use chipcHw_REG_STICKY_XXXXXX | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_setStickyBits(uint32_t mask) | ||
|  | { | ||
|  | 	uint32_t bits = 0; | ||
|  | 
 | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	if (mask & chipcHw_REG_STICKY_POR_BROM) { | ||
|  | 		bits |= chipcHw_REG_STICKY_POR_BROM; | ||
|  | 	} else { | ||
|  | 		uint32_t sticky; | ||
|  | 		sticky = pChipcHw->Sticky; | ||
|  | 
 | ||
|  | 		if ((mask & chipcHw_REG_STICKY_BOOT_DONE) | ||
|  | 		    && (sticky & chipcHw_REG_STICKY_BOOT_DONE) == 0) { | ||
|  | 			bits |= chipcHw_REG_STICKY_BOOT_DONE; | ||
|  | 		} | ||
|  | 		if ((mask & chipcHw_REG_STICKY_GENERAL_1) | ||
|  | 		    && (sticky & chipcHw_REG_STICKY_GENERAL_1) == 0) { | ||
|  | 			bits |= chipcHw_REG_STICKY_GENERAL_1; | ||
|  | 		} | ||
|  | 		if ((mask & chipcHw_REG_STICKY_GENERAL_2) | ||
|  | 		    && (sticky & chipcHw_REG_STICKY_GENERAL_2) == 0) { | ||
|  | 			bits |= chipcHw_REG_STICKY_GENERAL_2; | ||
|  | 		} | ||
|  | 		if ((mask & chipcHw_REG_STICKY_GENERAL_3) | ||
|  | 		    && (sticky & chipcHw_REG_STICKY_GENERAL_3) == 0) { | ||
|  | 			bits |= chipcHw_REG_STICKY_GENERAL_3; | ||
|  | 		} | ||
|  | 		if ((mask & chipcHw_REG_STICKY_GENERAL_4) | ||
|  | 		    && (sticky & chipcHw_REG_STICKY_GENERAL_4) == 0) { | ||
|  | 			bits |= chipcHw_REG_STICKY_GENERAL_4; | ||
|  | 		} | ||
|  | 		if ((mask & chipcHw_REG_STICKY_GENERAL_5) | ||
|  | 		    && (sticky & chipcHw_REG_STICKY_GENERAL_5) == 0) { | ||
|  | 			bits |= chipcHw_REG_STICKY_GENERAL_5; | ||
|  | 		} | ||
|  | 	} | ||
|  | 	pChipcHw->Sticky = bits; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief    Clear sticky bits | ||
|  | * | ||
|  | *  @return   void | ||
|  | * | ||
|  | *  @note     use chipcHw_REG_STICKY_XXXXXX | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_clearStickyBits(uint32_t mask) | ||
|  | { | ||
|  | 	uint32_t bits = 0; | ||
|  | 
 | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	if (mask & | ||
|  | 	    (chipcHw_REG_STICKY_BOOT_DONE | chipcHw_REG_STICKY_GENERAL_1 | | ||
|  | 	     chipcHw_REG_STICKY_GENERAL_2 | chipcHw_REG_STICKY_GENERAL_3 | | ||
|  | 	     chipcHw_REG_STICKY_GENERAL_4 | chipcHw_REG_STICKY_GENERAL_5)) { | ||
|  | 		uint32_t sticky = pChipcHw->Sticky; | ||
|  | 
 | ||
|  | 		if ((mask & chipcHw_REG_STICKY_BOOT_DONE) | ||
|  | 		    && (sticky & chipcHw_REG_STICKY_BOOT_DONE)) { | ||
|  | 			bits = chipcHw_REG_STICKY_BOOT_DONE; | ||
|  | 			mask &= ~chipcHw_REG_STICKY_BOOT_DONE; | ||
|  | 		} | ||
|  | 		if ((mask & chipcHw_REG_STICKY_GENERAL_1) | ||
|  | 		    && (sticky & chipcHw_REG_STICKY_GENERAL_1)) { | ||
|  | 			bits |= chipcHw_REG_STICKY_GENERAL_1; | ||
|  | 			mask &= ~chipcHw_REG_STICKY_GENERAL_1; | ||
|  | 		} | ||
|  | 		if ((mask & chipcHw_REG_STICKY_GENERAL_2) | ||
|  | 		    && (sticky & chipcHw_REG_STICKY_GENERAL_2)) { | ||
|  | 			bits |= chipcHw_REG_STICKY_GENERAL_2; | ||
|  | 			mask &= ~chipcHw_REG_STICKY_GENERAL_2; | ||
|  | 		} | ||
|  | 		if ((mask & chipcHw_REG_STICKY_GENERAL_3) | ||
|  | 		    && (sticky & chipcHw_REG_STICKY_GENERAL_3)) { | ||
|  | 			bits |= chipcHw_REG_STICKY_GENERAL_3; | ||
|  | 			mask &= ~chipcHw_REG_STICKY_GENERAL_3; | ||
|  | 		} | ||
|  | 		if ((mask & chipcHw_REG_STICKY_GENERAL_4) | ||
|  | 		    && (sticky & chipcHw_REG_STICKY_GENERAL_4)) { | ||
|  | 			bits |= chipcHw_REG_STICKY_GENERAL_4; | ||
|  | 			mask &= ~chipcHw_REG_STICKY_GENERAL_4; | ||
|  | 		} | ||
|  | 		if ((mask & chipcHw_REG_STICKY_GENERAL_5) | ||
|  | 		    && (sticky & chipcHw_REG_STICKY_GENERAL_5)) { | ||
|  | 			bits |= chipcHw_REG_STICKY_GENERAL_5; | ||
|  | 			mask &= ~chipcHw_REG_STICKY_GENERAL_5; | ||
|  | 		} | ||
|  | 	} | ||
|  | 	pChipcHw->Sticky = bits | mask; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief    Get software strap value | ||
|  | * | ||
|  | *  Retrieves software strap value | ||
|  | * | ||
|  | *  @return   Software strap value | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline uint32_t chipcHw_getSoftStraps(void) | ||
|  | { | ||
|  | 	return pChipcHw->SoftStraps; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief    Set software override strap options | ||
|  | * | ||
|  | *  set software override strap options | ||
|  | * | ||
|  | *  @return   nothing | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_setSoftStraps(uint32_t strapOptions) | ||
|  | { | ||
|  | 	reg32_write(&pChipcHw->SoftStraps, strapOptions); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Get Pin Strap Options | ||
|  | * | ||
|  | *  This function returns the raw boot strap options | ||
|  | * | ||
|  | *  @return  strap options | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline uint32_t chipcHw_getPinStraps(void) | ||
|  | { | ||
|  | 	return pChipcHw->PinStraps; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Get Valid Strap Options | ||
|  | * | ||
|  | *  This function returns the valid raw boot strap options | ||
|  | * | ||
|  | *  @return  strap options | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline uint32_t chipcHw_getValidStraps(void) | ||
|  | { | ||
|  | 	uint32_t softStraps; | ||
|  | 
 | ||
|  | 	/*
 | ||
|  | 	 ** Always return the SoftStraps - bootROM calls chipcHw_initValidStraps | ||
|  | 	 ** which copies HW straps to soft straps if there is no override | ||
|  | 	 */ | ||
|  | 	softStraps = chipcHw_getSoftStraps(); | ||
|  | 
 | ||
|  | 	return softStraps; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief    Initialize valid pin strap options | ||
|  | * | ||
|  | *  Retrieves valid pin strap options by copying HW strap options to soft register | ||
|  | *  (if chipcHw_STRAPS_SOFT_OVERRIDE not set) | ||
|  | * | ||
|  | *  @return   nothing | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_initValidStraps(void) | ||
|  | { | ||
|  | 	uint32_t softStraps; | ||
|  | 
 | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	softStraps = chipcHw_getSoftStraps(); | ||
|  | 
 | ||
|  | 	if ((softStraps & chipcHw_STRAPS_SOFT_OVERRIDE) == 0) { | ||
|  | 		/* Copy HW straps to software straps */ | ||
|  | 		chipcHw_setSoftStraps(chipcHw_getPinStraps()); | ||
|  | 	} | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Get boot device | ||
|  | * | ||
|  | *  This function returns the device type used in booting the system | ||
|  | * | ||
|  | *  @return  Boot device of type chipcHw_BOOT_DEVICE | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline chipcHw_BOOT_DEVICE_e chipcHw_getBootDevice(void) | ||
|  | { | ||
|  | 	return chipcHw_getValidStraps() & chipcHw_STRAPS_BOOT_DEVICE_MASK; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Get boot mode | ||
|  | * | ||
|  | *  This function returns the way the system was booted | ||
|  | * | ||
|  | *  @return  Boot mode of type chipcHw_BOOT_MODE | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline chipcHw_BOOT_MODE_e chipcHw_getBootMode(void) | ||
|  | { | ||
|  | 	return chipcHw_getValidStraps() & chipcHw_STRAPS_BOOT_MODE_MASK; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Get NAND flash page size | ||
|  | * | ||
|  | *  This function returns the NAND device page size | ||
|  | * | ||
|  | *  @return  Boot NAND device page size | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline chipcHw_NAND_PAGESIZE_e chipcHw_getNandPageSize(void) | ||
|  | { | ||
|  | 	return chipcHw_getValidStraps() & chipcHw_STRAPS_NAND_PAGESIZE_MASK; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Get NAND flash address cycle configuration | ||
|  | * | ||
|  | *  This function returns the NAND flash address cycle configuration | ||
|  | * | ||
|  | *  @return  0 = Do not extra address cycle, 1 = Add extra cycle | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline int chipcHw_getNandExtraCycle(void) | ||
|  | { | ||
|  | 	if (chipcHw_getValidStraps() & chipcHw_STRAPS_NAND_EXTRA_CYCLE) { | ||
|  | 		return 1; | ||
|  | 	} else { | ||
|  | 		return 0; | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Activates PIF interface | ||
|  | * | ||
|  | *  This function activates PIF interface by taking control of LCD pins | ||
|  | * | ||
|  | *  @note | ||
|  | *       When activated, LCD pins will be defined as follows for PIF operation | ||
|  | * | ||
|  | *       CLD[17:0]  = pif_data[17:0] | ||
|  | *       CLD[23:18] = pif_address[5:0] | ||
|  | *       CLPOWER    = pif_wr_str | ||
|  | *       CLCP       = pif_rd_str | ||
|  | *       CLAC       = pif_hat1 | ||
|  | *       CLFP       = pif_hrdy1 | ||
|  | *       CLLP       = pif_hat2 | ||
|  | *       GPIO[42]   = pif_hrdy2 | ||
|  | * | ||
|  | *       In PIF mode, "pif_hrdy2" overrides other shared function for GPIO[42] pin | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_activatePifInterface(void) | ||
|  | { | ||
|  | 	reg32_write(&pChipcHw->LcdPifMode, chipcHw_REG_PIF_PIN_ENABLE); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Activates LCD interface | ||
|  | * | ||
|  | *  This function activates LCD interface | ||
|  | * | ||
|  | *  @note | ||
|  | *       When activated, LCD pins will be defined as follows | ||
|  | * | ||
|  | *       CLD[17:0]  = LCD data | ||
|  | *       CLD[23:18] = LCD data | ||
|  | *       CLPOWER    = LCD power | ||
|  | *       CLCP       = | ||
|  | *       CLAC       = LCD ack | ||
|  | *       CLFP       = | ||
|  | *       CLLP       = | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_activateLcdInterface(void) | ||
|  | { | ||
|  | 	reg32_write(&pChipcHw->LcdPifMode, chipcHw_REG_LCD_PIN_ENABLE); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Deactivates PIF/LCD interface | ||
|  | * | ||
|  | *  This function deactivates PIF/LCD interface | ||
|  | * | ||
|  | *  @note | ||
|  | *       When deactivated LCD pins will be in rti-stated | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_deactivatePifLcdInterface(void) | ||
|  | { | ||
|  | 	reg32_write(&pChipcHw->LcdPifMode, 0); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Select GE2 | ||
|  | * | ||
|  | *  This function select GE2 as the graphic engine | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_selectGE2(void) | ||
|  | { | ||
|  | 	reg32_modify_and(&pChipcHw->MiscCtrl, ~chipcHw_REG_MISC_CTRL_GE_SEL); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Select GE3 | ||
|  | * | ||
|  | *  This function select GE3 as the graphic engine | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_selectGE3(void) | ||
|  | { | ||
|  | 	reg32_modify_or(&pChipcHw->MiscCtrl, chipcHw_REG_MISC_CTRL_GE_SEL); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Get to know the configuration of GPIO pin | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline chipcHw_GPIO_FUNCTION_e chipcHw_getGpioPinFunction(int pin) | ||
|  | { | ||
|  | 	return (*((uint32_t *) chipcHw_REG_GPIO_MUX(pin)) & | ||
|  | 		(chipcHw_REG_GPIO_MUX_MASK << | ||
|  | 		 chipcHw_REG_GPIO_MUX_POSITION(pin))) >> | ||
|  | 	    chipcHw_REG_GPIO_MUX_POSITION(pin); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Configure GPIO pin function | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_setGpioPinFunction(int pin, | ||
|  | 					      chipcHw_GPIO_FUNCTION_e func) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	*((uint32_t *) chipcHw_REG_GPIO_MUX(pin)) &= | ||
|  | 	    ~(chipcHw_REG_GPIO_MUX_MASK << chipcHw_REG_GPIO_MUX_POSITION(pin)); | ||
|  | 	*((uint32_t *) chipcHw_REG_GPIO_MUX(pin)) |= | ||
|  | 	    func << chipcHw_REG_GPIO_MUX_POSITION(pin); | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Set Pin slew rate | ||
|  | * | ||
|  | *  This function sets the slew of individual pin | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_setPinSlewRate(uint32_t pin, | ||
|  | 					  chipcHw_PIN_SLEW_RATE_e slewRate) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	*((uint32_t *) chipcHw_REG_SLEW_RATE(pin)) &= | ||
|  | 	    ~(chipcHw_REG_SLEW_RATE_MASK << | ||
|  | 	      chipcHw_REG_SLEW_RATE_POSITION(pin)); | ||
|  | 	*((uint32_t *) chipcHw_REG_SLEW_RATE(pin)) |= | ||
|  | 	    (uint32_t) slewRate << chipcHw_REG_SLEW_RATE_POSITION(pin); | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Set Pin output drive current | ||
|  | * | ||
|  | *  This function sets output drive current of individual pin | ||
|  | * | ||
|  | *  Note: Avoid the use of the word 'current' since linux headers define this | ||
|  | *        to be the current task. | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_setPinOutputCurrent(uint32_t pin, | ||
|  | 					       chipcHw_PIN_CURRENT_STRENGTH_e | ||
|  | 					       curr) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	*((uint32_t *) chipcHw_REG_CURRENT(pin)) &= | ||
|  | 	    ~(chipcHw_REG_CURRENT_MASK << chipcHw_REG_CURRENT_POSITION(pin)); | ||
|  | 	*((uint32_t *) chipcHw_REG_CURRENT(pin)) |= | ||
|  | 	    (uint32_t) curr << chipcHw_REG_CURRENT_POSITION(pin); | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Set Pin pullup register | ||
|  | * | ||
|  | *  This function sets pullup register of individual pin | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_setPinPullup(uint32_t pin, chipcHw_PIN_PULL_e pullup) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	*((uint32_t *) chipcHw_REG_PULLUP(pin)) &= | ||
|  | 	    ~(chipcHw_REG_PULLUP_MASK << chipcHw_REG_PULLUP_POSITION(pin)); | ||
|  | 	*((uint32_t *) chipcHw_REG_PULLUP(pin)) |= | ||
|  | 	    (uint32_t) pullup << chipcHw_REG_PULLUP_POSITION(pin); | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Set Pin input type | ||
|  | * | ||
|  | *  This function sets input type of individual pin | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_setPinInputType(uint32_t pin, | ||
|  | 					   chipcHw_PIN_INPUTTYPE_e inputType) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	*((uint32_t *) chipcHw_REG_INPUTTYPE(pin)) &= | ||
|  | 	    ~(chipcHw_REG_INPUTTYPE_MASK << | ||
|  | 	      chipcHw_REG_INPUTTYPE_POSITION(pin)); | ||
|  | 	*((uint32_t *) chipcHw_REG_INPUTTYPE(pin)) |= | ||
|  | 	    (uint32_t) inputType << chipcHw_REG_INPUTTYPE_POSITION(pin); | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Power up the USB PHY | ||
|  | * | ||
|  | *  This function powers up the USB PHY | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_powerUpUsbPhy(void) | ||
|  | { | ||
|  | 	reg32_modify_and(&pChipcHw->MiscCtrl, | ||
|  | 			 chipcHw_REG_MISC_CTRL_USB_POWERON); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Power down the USB PHY | ||
|  | * | ||
|  | *  This function powers down the USB PHY | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_powerDownUsbPhy(void) | ||
|  | { | ||
|  | 	reg32_modify_or(&pChipcHw->MiscCtrl, | ||
|  | 			chipcHw_REG_MISC_CTRL_USB_POWEROFF); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Set the 2nd USB as host | ||
|  | * | ||
|  | *  This function sets the 2nd USB as host | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_setUsbHost(void) | ||
|  | { | ||
|  | 	reg32_modify_or(&pChipcHw->MiscCtrl, | ||
|  | 			chipcHw_REG_MISC_CTRL_USB_MODE_HOST); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Set the 2nd USB as device | ||
|  | * | ||
|  | *  This function sets the 2nd USB as device | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_setUsbDevice(void) | ||
|  | { | ||
|  | 	reg32_modify_and(&pChipcHw->MiscCtrl, | ||
|  | 			 chipcHw_REG_MISC_CTRL_USB_MODE_DEVICE); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Lower layer funtion to enable/disable a clock of a certain device | ||
|  | * | ||
|  | *  This function enables/disables a core clock | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_setClock(chipcHw_CLOCK_e clock, | ||
|  | 				    chipcHw_OPTYPE_e type, int mode) | ||
|  | { | ||
|  | 	volatile uint32_t *pPLLReg = (uint32_t *) 0x0; | ||
|  | 	volatile uint32_t *pClockCtrl = (uint32_t *) 0x0; | ||
|  | 
 | ||
|  | 	switch (clock) { | ||
|  | 	case chipcHw_CLOCK_DDR: | ||
|  | 		pPLLReg = &pChipcHw->DDRClock; | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_ARM: | ||
|  | 		pPLLReg = &pChipcHw->ARMClock; | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_ESW: | ||
|  | 		pPLLReg = &pChipcHw->ESWClock; | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_VPM: | ||
|  | 		pPLLReg = &pChipcHw->VPMClock; | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_ESW125: | ||
|  | 		pPLLReg = &pChipcHw->ESW125Clock; | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_UART: | ||
|  | 		pPLLReg = &pChipcHw->UARTClock; | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_SDIO0: | ||
|  | 		pPLLReg = &pChipcHw->SDIO0Clock; | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_SDIO1: | ||
|  | 		pPLLReg = &pChipcHw->SDIO1Clock; | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_SPI: | ||
|  | 		pPLLReg = &pChipcHw->SPIClock; | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_ETM: | ||
|  | 		pPLLReg = &pChipcHw->ETMClock; | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_USB: | ||
|  | 		pPLLReg = &pChipcHw->USBClock; | ||
|  | 		if (type == chipcHw_OPTYPE_OUTPUT) { | ||
|  | 			if (mode) { | ||
|  | 				reg32_modify_and(pPLLReg, | ||
|  | 						 ~chipcHw_REG_PLL_CLOCK_POWER_DOWN); | ||
|  | 			} else { | ||
|  | 				reg32_modify_or(pPLLReg, | ||
|  | 						chipcHw_REG_PLL_CLOCK_POWER_DOWN); | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_LCD: | ||
|  | 		pPLLReg = &pChipcHw->LCDClock; | ||
|  | 		if (type == chipcHw_OPTYPE_OUTPUT) { | ||
|  | 			if (mode) { | ||
|  | 				reg32_modify_and(pPLLReg, | ||
|  | 						 ~chipcHw_REG_PLL_CLOCK_POWER_DOWN); | ||
|  | 			} else { | ||
|  | 				reg32_modify_or(pPLLReg, | ||
|  | 						chipcHw_REG_PLL_CLOCK_POWER_DOWN); | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_APM: | ||
|  | 		pPLLReg = &pChipcHw->APMClock; | ||
|  | 		if (type == chipcHw_OPTYPE_OUTPUT) { | ||
|  | 			if (mode) { | ||
|  | 				reg32_modify_and(pPLLReg, | ||
|  | 						 ~chipcHw_REG_PLL_CLOCK_POWER_DOWN); | ||
|  | 			} else { | ||
|  | 				reg32_modify_or(pPLLReg, | ||
|  | 						chipcHw_REG_PLL_CLOCK_POWER_DOWN); | ||
|  | 			} | ||
|  | 		} | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_BUS: | ||
|  | 		pClockCtrl = &pChipcHw->ACLKClock; | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_OTP: | ||
|  | 		pClockCtrl = &pChipcHw->OTPClock; | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_I2C: | ||
|  | 		pClockCtrl = &pChipcHw->I2CClock; | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_I2S0: | ||
|  | 		pClockCtrl = &pChipcHw->I2S0Clock; | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_RTBUS: | ||
|  | 		pClockCtrl = &pChipcHw->RTBUSClock; | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_APM100: | ||
|  | 		pClockCtrl = &pChipcHw->APM100Clock; | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_TSC: | ||
|  | 		pClockCtrl = &pChipcHw->TSCClock; | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_LED: | ||
|  | 		pClockCtrl = &pChipcHw->LEDClock; | ||
|  | 		break; | ||
|  | 	case chipcHw_CLOCK_I2S1: | ||
|  | 		pClockCtrl = &pChipcHw->I2S1Clock; | ||
|  | 		break; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	if (pPLLReg) { | ||
|  | 		switch (type) { | ||
|  | 		case chipcHw_OPTYPE_OUTPUT: | ||
|  | 			/* PLL clock output enable/disable */ | ||
|  | 			if (mode) { | ||
|  | 				if (clock == chipcHw_CLOCK_DDR) { | ||
|  | 					/* DDR clock enable is inverted */ | ||
|  | 					reg32_modify_and(pPLLReg, | ||
|  | 							 ~chipcHw_REG_PLL_CLOCK_OUTPUT_ENABLE); | ||
|  | 				} else { | ||
|  | 					reg32_modify_or(pPLLReg, | ||
|  | 							chipcHw_REG_PLL_CLOCK_OUTPUT_ENABLE); | ||
|  | 				} | ||
|  | 			} else { | ||
|  | 				if (clock == chipcHw_CLOCK_DDR) { | ||
|  | 					/* DDR clock disable is inverted */ | ||
|  | 					reg32_modify_or(pPLLReg, | ||
|  | 							chipcHw_REG_PLL_CLOCK_OUTPUT_ENABLE); | ||
|  | 				} else { | ||
|  | 					reg32_modify_and(pPLLReg, | ||
|  | 							 ~chipcHw_REG_PLL_CLOCK_OUTPUT_ENABLE); | ||
|  | 				} | ||
|  | 			} | ||
|  | 			break; | ||
|  | 		case chipcHw_OPTYPE_BYPASS: | ||
|  | 			/* PLL clock bypass enable/disable */ | ||
|  | 			if (mode) { | ||
|  | 				reg32_modify_or(pPLLReg, | ||
|  | 						chipcHw_REG_PLL_CLOCK_BYPASS_SELECT); | ||
|  | 			} else { | ||
|  | 				reg32_modify_and(pPLLReg, | ||
|  | 						 ~chipcHw_REG_PLL_CLOCK_BYPASS_SELECT); | ||
|  | 			} | ||
|  | 			break; | ||
|  | 		} | ||
|  | 	} else if (pClockCtrl) { | ||
|  | 		switch (type) { | ||
|  | 		case chipcHw_OPTYPE_OUTPUT: | ||
|  | 			if (mode) { | ||
|  | 				reg32_modify_or(pClockCtrl, | ||
|  | 						chipcHw_REG_DIV_CLOCK_OUTPUT_ENABLE); | ||
|  | 			} else { | ||
|  | 				reg32_modify_and(pClockCtrl, | ||
|  | 						 ~chipcHw_REG_DIV_CLOCK_OUTPUT_ENABLE); | ||
|  | 			} | ||
|  | 			break; | ||
|  | 		case chipcHw_OPTYPE_BYPASS: | ||
|  | 			if (mode) { | ||
|  | 				reg32_modify_or(pClockCtrl, | ||
|  | 						chipcHw_REG_DIV_CLOCK_BYPASS_SELECT); | ||
|  | 			} else { | ||
|  | 				reg32_modify_and(pClockCtrl, | ||
|  | 						 ~chipcHw_REG_DIV_CLOCK_BYPASS_SELECT); | ||
|  | 			} | ||
|  | 			break; | ||
|  | 		} | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Disables a core clock of a certain device | ||
|  | * | ||
|  | *  This function disables a core clock | ||
|  | * | ||
|  | *  @note    no change in power consumption | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_setClockDisable(chipcHw_CLOCK_e clock) | ||
|  | { | ||
|  | 
 | ||
|  | 	/* Disable output of the clock */ | ||
|  | 	chipcHw_setClock(clock, chipcHw_OPTYPE_OUTPUT, 0); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Enable a core clock of a certain device | ||
|  | * | ||
|  | *  This function enables a core clock | ||
|  | * | ||
|  | *  @note    no change in power consumption | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_setClockEnable(chipcHw_CLOCK_e clock) | ||
|  | { | ||
|  | 
 | ||
|  | 	/* Enable output of the clock */ | ||
|  | 	chipcHw_setClock(clock, chipcHw_OPTYPE_OUTPUT, 1); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Enables bypass clock of a certain device | ||
|  | * | ||
|  | *  This function enables bypass clock | ||
|  | * | ||
|  | *  @note    Doesnot affect the bus interface clock | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_bypassClockEnable(chipcHw_CLOCK_e clock) | ||
|  | { | ||
|  | 	/* Enable bypass clock */ | ||
|  | 	chipcHw_setClock(clock, chipcHw_OPTYPE_BYPASS, 1); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Disabled bypass clock of a certain device | ||
|  | * | ||
|  | *  This function disables bypass clock | ||
|  | * | ||
|  | *  @note    Doesnot affect the bus interface clock | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_bypassClockDisable(chipcHw_CLOCK_e clock) | ||
|  | { | ||
|  | 	/* Disable bypass clock */ | ||
|  | 	chipcHw_setClock(clock, chipcHw_OPTYPE_BYPASS, 0); | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**  @brief Checks if software strap is enabled
 | ||
|  |  * | ||
|  |  *   @return 1 : When enable | ||
|  |  *           0 : When disable | ||
|  |  */ | ||
|  | /****************************************************************************/ | ||
|  | static inline int chipcHw_isSoftwareStrapsEnable(void) | ||
|  | { | ||
|  | 	return pChipcHw->SoftStraps & 0x00000001; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**  @brief Enable software strap
 | ||
|  |  */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_softwareStrapsEnable(void) | ||
|  | { | ||
|  | 	reg32_modify_or(&pChipcHw->SoftStraps, 0x00000001); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**  @brief Disable software strap
 | ||
|  |  */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_softwareStrapsDisable(void) | ||
|  | { | ||
|  | 	reg32_modify_and(&pChipcHw->SoftStraps, (~0x00000001)); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**  @brief PLL test enable
 | ||
|  |  */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_pllTestEnable(void) | ||
|  | { | ||
|  | 	reg32_modify_or(&pChipcHw->PLLConfig, | ||
|  | 			chipcHw_REG_PLL_CONFIG_TEST_ENABLE); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**  @brief PLL2 test enable
 | ||
|  |  */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_pll2TestEnable(void) | ||
|  | { | ||
|  | 	reg32_modify_or(&pChipcHw->PLLConfig2, | ||
|  | 			chipcHw_REG_PLL_CONFIG_TEST_ENABLE); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**  @brief PLL test disable
 | ||
|  |  */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_pllTestDisable(void) | ||
|  | { | ||
|  | 	reg32_modify_and(&pChipcHw->PLLConfig, | ||
|  | 			 ~chipcHw_REG_PLL_CONFIG_TEST_ENABLE); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**  @brief PLL2 test disable
 | ||
|  |  */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_pll2TestDisable(void) | ||
|  | { | ||
|  | 	reg32_modify_and(&pChipcHw->PLLConfig2, | ||
|  | 			 ~chipcHw_REG_PLL_CONFIG_TEST_ENABLE); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**  @brief Get PLL test status
 | ||
|  |  */ | ||
|  | /****************************************************************************/ | ||
|  | static inline int chipcHw_isPllTestEnable(void) | ||
|  | { | ||
|  | 	return pChipcHw->PLLConfig & chipcHw_REG_PLL_CONFIG_TEST_ENABLE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**  @brief Get PLL2 test status
 | ||
|  |  */ | ||
|  | /****************************************************************************/ | ||
|  | static inline int chipcHw_isPll2TestEnable(void) | ||
|  | { | ||
|  | 	return pChipcHw->PLLConfig2 & chipcHw_REG_PLL_CONFIG_TEST_ENABLE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**  @brief PLL test select
 | ||
|  |  */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_pllTestSelect(uint32_t val) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	pChipcHw->PLLConfig &= ~chipcHw_REG_PLL_CONFIG_TEST_SELECT_MASK; | ||
|  | 	pChipcHw->PLLConfig |= | ||
|  | 	    (val) << chipcHw_REG_PLL_CONFIG_TEST_SELECT_SHIFT; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**  @brief PLL2 test select
 | ||
|  |  */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_pll2TestSelect(uint32_t val) | ||
|  | { | ||
|  | 
 | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	pChipcHw->PLLConfig2 &= ~chipcHw_REG_PLL_CONFIG_TEST_SELECT_MASK; | ||
|  | 	pChipcHw->PLLConfig2 |= | ||
|  | 	    (val) << chipcHw_REG_PLL_CONFIG_TEST_SELECT_SHIFT; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**  @brief Get PLL test selected option
 | ||
|  |  */ | ||
|  | /****************************************************************************/ | ||
|  | static inline uint8_t chipcHw_getPllTestSelected(void) | ||
|  | { | ||
|  | 	return (uint8_t) ((pChipcHw-> | ||
|  | 			   PLLConfig & chipcHw_REG_PLL_CONFIG_TEST_SELECT_MASK) | ||
|  | 			  >> chipcHw_REG_PLL_CONFIG_TEST_SELECT_SHIFT); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**  @brief Get PLL2 test selected option
 | ||
|  |  */ | ||
|  | /****************************************************************************/ | ||
|  | static inline uint8_t chipcHw_getPll2TestSelected(void) | ||
|  | { | ||
|  | 	return (uint8_t) ((pChipcHw-> | ||
|  | 			   PLLConfig2 & chipcHw_REG_PLL_CONFIG_TEST_SELECT_MASK) | ||
|  | 			  >> chipcHw_REG_PLL_CONFIG_TEST_SELECT_SHIFT); | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief  Disable the PLL1 | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_pll1Disable(void) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	pChipcHw->PLLConfig |= chipcHw_REG_PLL_CONFIG_POWER_DOWN; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief  Disable the PLL2 | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_pll2Disable(void) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	pChipcHw->PLLConfig2 |= chipcHw_REG_PLL_CONFIG_POWER_DOWN; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Enables DDR SW phase alignment interrupt | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_ddrPhaseAlignInterruptEnable(void) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	pChipcHw->Spare1 |= chipcHw_REG_SPARE1_DDR_PHASE_INTR_ENABLE; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Disables DDR SW phase alignment interrupt | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_ddrPhaseAlignInterruptDisable(void) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	pChipcHw->Spare1 &= ~chipcHw_REG_SPARE1_DDR_PHASE_INTR_ENABLE; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Set VPM SW phase alignment interrupt mode | ||
|  | * | ||
|  | *  This function sets VPM phase alignment interrupt | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void | ||
|  | chipcHw_vpmPhaseAlignInterruptMode(chipcHw_VPM_HW_PHASE_INTR_e mode) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	if (mode == chipcHw_VPM_HW_PHASE_INTR_DISABLE) { | ||
|  | 		pChipcHw->Spare1 &= ~chipcHw_REG_SPARE1_VPM_PHASE_INTR_ENABLE; | ||
|  | 	} else { | ||
|  | 		pChipcHw->Spare1 |= chipcHw_REG_SPARE1_VPM_PHASE_INTR_ENABLE; | ||
|  | 	} | ||
|  | 	pChipcHw->VPMPhaseCtrl2 = | ||
|  | 	    (pChipcHw-> | ||
|  | 	     VPMPhaseCtrl2 & ~(chipcHw_REG_VPM_INTR_SELECT_MASK << | ||
|  | 			       chipcHw_REG_VPM_INTR_SELECT_SHIFT)) | mode; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Enable DDR phase alignment in software | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_ddrSwPhaseAlignEnable(void) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	pChipcHw->DDRPhaseCtrl1 |= chipcHw_REG_DDR_SW_PHASE_CTRL_ENABLE; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Disable DDR phase alignment in software | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_ddrSwPhaseAlignDisable(void) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	pChipcHw->DDRPhaseCtrl1 &= ~chipcHw_REG_DDR_SW_PHASE_CTRL_ENABLE; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Enable DDR phase alignment in hardware | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_ddrHwPhaseAlignEnable(void) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	pChipcHw->DDRPhaseCtrl1 |= chipcHw_REG_DDR_HW_PHASE_CTRL_ENABLE; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Disable DDR phase alignment in hardware | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_ddrHwPhaseAlignDisable(void) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	pChipcHw->DDRPhaseCtrl1 &= ~chipcHw_REG_DDR_HW_PHASE_CTRL_ENABLE; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Enable VPM phase alignment in software | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_vpmSwPhaseAlignEnable(void) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	pChipcHw->VPMPhaseCtrl1 |= chipcHw_REG_VPM_SW_PHASE_CTRL_ENABLE; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Disable VPM phase alignment in software | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_vpmSwPhaseAlignDisable(void) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	pChipcHw->VPMPhaseCtrl1 &= ~chipcHw_REG_VPM_SW_PHASE_CTRL_ENABLE; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Enable VPM phase alignment in hardware | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_vpmHwPhaseAlignEnable(void) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	pChipcHw->VPMPhaseCtrl1 |= chipcHw_REG_VPM_HW_PHASE_CTRL_ENABLE; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Disable VPM phase alignment in hardware | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_vpmHwPhaseAlignDisable(void) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	pChipcHw->VPMPhaseCtrl1 &= ~chipcHw_REG_VPM_HW_PHASE_CTRL_ENABLE; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Set DDR phase alignment margin in hardware | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void | ||
|  | chipcHw_setDdrHwPhaseAlignMargin(chipcHw_DDR_HW_PHASE_MARGIN_e margin) | ||
|  | { | ||
|  | 	uint32_t ge = 0; | ||
|  | 	uint32_t le = 0; | ||
|  | 
 | ||
|  | 	switch (margin) { | ||
|  | 	case chipcHw_DDR_HW_PHASE_MARGIN_STRICT: | ||
|  | 		ge = 0x0F; | ||
|  | 		le = 0x0F; | ||
|  | 		break; | ||
|  | 	case chipcHw_DDR_HW_PHASE_MARGIN_MEDIUM: | ||
|  | 		ge = 0x03; | ||
|  | 		le = 0x3F; | ||
|  | 		break; | ||
|  | 	case chipcHw_DDR_HW_PHASE_MARGIN_WIDE: | ||
|  | 		ge = 0x01; | ||
|  | 		le = 0x7F; | ||
|  | 		break; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	{ | ||
|  | 		REG_LOCAL_IRQ_SAVE; | ||
|  | 
 | ||
|  | 		pChipcHw->DDRPhaseCtrl1 &= | ||
|  | 		    ~((chipcHw_REG_DDR_PHASE_VALUE_GE_MASK << | ||
|  | 		       chipcHw_REG_DDR_PHASE_VALUE_GE_SHIFT) | ||
|  | 		      || (chipcHw_REG_DDR_PHASE_VALUE_LE_MASK << | ||
|  | 			  chipcHw_REG_DDR_PHASE_VALUE_LE_SHIFT)); | ||
|  | 
 | ||
|  | 		pChipcHw->DDRPhaseCtrl1 |= | ||
|  | 		    ((ge << chipcHw_REG_DDR_PHASE_VALUE_GE_SHIFT) | ||
|  | 		     || (le << chipcHw_REG_DDR_PHASE_VALUE_LE_SHIFT)); | ||
|  | 
 | ||
|  | 		REG_LOCAL_IRQ_RESTORE; | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Set VPM phase alignment margin in hardware | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void | ||
|  | chipcHw_setVpmHwPhaseAlignMargin(chipcHw_VPM_HW_PHASE_MARGIN_e margin) | ||
|  | { | ||
|  | 	uint32_t ge = 0; | ||
|  | 	uint32_t le = 0; | ||
|  | 
 | ||
|  | 	switch (margin) { | ||
|  | 	case chipcHw_VPM_HW_PHASE_MARGIN_STRICT: | ||
|  | 		ge = 0x0F; | ||
|  | 		le = 0x0F; | ||
|  | 		break; | ||
|  | 	case chipcHw_VPM_HW_PHASE_MARGIN_MEDIUM: | ||
|  | 		ge = 0x03; | ||
|  | 		le = 0x3F; | ||
|  | 		break; | ||
|  | 	case chipcHw_VPM_HW_PHASE_MARGIN_WIDE: | ||
|  | 		ge = 0x01; | ||
|  | 		le = 0x7F; | ||
|  | 		break; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	{ | ||
|  | 		REG_LOCAL_IRQ_SAVE; | ||
|  | 
 | ||
|  | 		pChipcHw->VPMPhaseCtrl1 &= | ||
|  | 		    ~((chipcHw_REG_VPM_PHASE_VALUE_GE_MASK << | ||
|  | 		       chipcHw_REG_VPM_PHASE_VALUE_GE_SHIFT) | ||
|  | 		      || (chipcHw_REG_VPM_PHASE_VALUE_LE_MASK << | ||
|  | 			  chipcHw_REG_VPM_PHASE_VALUE_LE_SHIFT)); | ||
|  | 
 | ||
|  | 		pChipcHw->VPMPhaseCtrl1 |= | ||
|  | 		    ((ge << chipcHw_REG_VPM_PHASE_VALUE_GE_SHIFT) | ||
|  | 		     || (le << chipcHw_REG_VPM_PHASE_VALUE_LE_SHIFT)); | ||
|  | 
 | ||
|  | 		REG_LOCAL_IRQ_RESTORE; | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Checks DDR phase aligned status done by HW | ||
|  | * | ||
|  | *  @return  1: When aligned | ||
|  | *           0: When not aligned | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline uint32_t chipcHw_isDdrHwPhaseAligned(void) | ||
|  | { | ||
|  | 	return (pChipcHw-> | ||
|  | 		PhaseAlignStatus & chipcHw_REG_DDR_PHASE_ALIGNED) ? 1 : 0; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Checks VPM phase aligned status done by HW | ||
|  | * | ||
|  | *  @return  1: When aligned | ||
|  | *           0: When not aligned | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline uint32_t chipcHw_isVpmHwPhaseAligned(void) | ||
|  | { | ||
|  | 	return (pChipcHw-> | ||
|  | 		PhaseAlignStatus & chipcHw_REG_VPM_PHASE_ALIGNED) ? 1 : 0; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Get DDR phase aligned status done by HW | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline uint32_t chipcHw_getDdrHwPhaseAlignStatus(void) | ||
|  | { | ||
|  | 	return (pChipcHw-> | ||
|  | 		PhaseAlignStatus & chipcHw_REG_DDR_PHASE_STATUS_MASK) >> | ||
|  | 	    chipcHw_REG_DDR_PHASE_STATUS_SHIFT; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Get VPM phase aligned status done by HW | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline uint32_t chipcHw_getVpmHwPhaseAlignStatus(void) | ||
|  | { | ||
|  | 	return (pChipcHw-> | ||
|  | 		PhaseAlignStatus & chipcHw_REG_VPM_PHASE_STATUS_MASK) >> | ||
|  | 	    chipcHw_REG_VPM_PHASE_STATUS_SHIFT; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Get DDR phase control value | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline uint32_t chipcHw_getDdrPhaseControl(void) | ||
|  | { | ||
|  | 	return (pChipcHw-> | ||
|  | 		PhaseAlignStatus & chipcHw_REG_DDR_PHASE_CTRL_MASK) >> | ||
|  | 	    chipcHw_REG_DDR_PHASE_CTRL_SHIFT; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Get VPM phase control value | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline uint32_t chipcHw_getVpmPhaseControl(void) | ||
|  | { | ||
|  | 	return (pChipcHw-> | ||
|  | 		PhaseAlignStatus & chipcHw_REG_VPM_PHASE_CTRL_MASK) >> | ||
|  | 	    chipcHw_REG_VPM_PHASE_CTRL_SHIFT; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   DDR phase alignment timeout count | ||
|  | * | ||
|  | *  @note    If HW fails to perform the phase alignment, it will trigger | ||
|  | *           a DDR phase alignment timeout interrupt. | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_ddrHwPhaseAlignTimeout(uint32_t busCycle) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	pChipcHw->DDRPhaseCtrl2 &= | ||
|  | 	    ~(chipcHw_REG_DDR_PHASE_TIMEOUT_COUNT_MASK << | ||
|  | 	      chipcHw_REG_DDR_PHASE_TIMEOUT_COUNT_SHIFT); | ||
|  | 	pChipcHw->DDRPhaseCtrl2 |= | ||
|  | 	    (busCycle & chipcHw_REG_DDR_PHASE_TIMEOUT_COUNT_MASK) << | ||
|  | 	    chipcHw_REG_DDR_PHASE_TIMEOUT_COUNT_SHIFT; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   VPM phase alignment timeout count | ||
|  | * | ||
|  | *  @note    If HW fails to perform the phase alignment, it will trigger | ||
|  | *           a VPM phase alignment timeout interrupt. | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_vpmHwPhaseAlignTimeout(uint32_t busCycle) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	pChipcHw->VPMPhaseCtrl2 &= | ||
|  | 	    ~(chipcHw_REG_VPM_PHASE_TIMEOUT_COUNT_MASK << | ||
|  | 	      chipcHw_REG_VPM_PHASE_TIMEOUT_COUNT_SHIFT); | ||
|  | 	pChipcHw->VPMPhaseCtrl2 |= | ||
|  | 	    (busCycle & chipcHw_REG_VPM_PHASE_TIMEOUT_COUNT_MASK) << | ||
|  | 	    chipcHw_REG_VPM_PHASE_TIMEOUT_COUNT_SHIFT; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Clear DDR phase alignment timeout interrupt | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_ddrHwPhaseAlignTimeoutInterruptClear(void) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	/* Clear timeout interrupt service bit */ | ||
|  | 	pChipcHw->DDRPhaseCtrl2 |= chipcHw_REG_DDR_INTR_SERVICED; | ||
|  | 	pChipcHw->DDRPhaseCtrl2 &= ~chipcHw_REG_DDR_INTR_SERVICED; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   Clear VPM phase alignment timeout interrupt | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_vpmHwPhaseAlignTimeoutInterruptClear(void) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	/* Clear timeout interrupt service bit */ | ||
|  | 	pChipcHw->VPMPhaseCtrl2 |= chipcHw_REG_VPM_INTR_SERVICED; | ||
|  | 	pChipcHw->VPMPhaseCtrl2 &= ~chipcHw_REG_VPM_INTR_SERVICED; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   DDR phase alignment timeout interrupt enable | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_ddrHwPhaseAlignTimeoutInterruptEnable(void) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	chipcHw_ddrHwPhaseAlignTimeoutInterruptClear();	/* Recommended */ | ||
|  | 	/* Enable timeout interrupt */ | ||
|  | 	pChipcHw->DDRPhaseCtrl2 |= chipcHw_REG_DDR_TIMEOUT_INTR_ENABLE; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   VPM phase alignment timeout interrupt enable | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_vpmHwPhaseAlignTimeoutInterruptEnable(void) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	chipcHw_vpmHwPhaseAlignTimeoutInterruptClear();	/* Recommended */ | ||
|  | 	/* Enable timeout interrupt */ | ||
|  | 	pChipcHw->VPMPhaseCtrl2 |= chipcHw_REG_VPM_TIMEOUT_INTR_ENABLE; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   DDR phase alignment timeout interrupt disable | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_ddrHwPhaseAlignTimeoutInterruptDisable(void) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	pChipcHw->DDRPhaseCtrl2 &= ~chipcHw_REG_DDR_TIMEOUT_INTR_ENABLE; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | /****************************************************************************/ | ||
|  | /**
 | ||
|  | *  @brief   VPM phase alignment timeout interrupt disable | ||
|  | * | ||
|  | */ | ||
|  | /****************************************************************************/ | ||
|  | static inline void chipcHw_vpmHwPhaseAlignTimeoutInterruptDisable(void) | ||
|  | { | ||
|  | 	REG_LOCAL_IRQ_SAVE; | ||
|  | 	pChipcHw->VPMPhaseCtrl2 &= ~chipcHw_REG_VPM_TIMEOUT_INTR_ENABLE; | ||
|  | 	REG_LOCAL_IRQ_RESTORE; | ||
|  | } | ||
|  | 
 | ||
|  | #endif /* CHIPC_INLINE_H */
 |