Example #1
0
/*******************************************************************************
* mvSysTdmInit - Initialize the TDM subsystem
*
* DESCRIPTION:
*
* INPUT:
*       None
* OUTPUT:
*		None
* RETURN:
*       None
*
*******************************************************************************/
MV_STATUS mvSysTdmInit(MV_TDM_PARAMS* tdmParams)
{
	MV_TDM_HAL_DATA halData;
	MV_UNIT_WIN_INFO addrWinMap[MAX_TARGETS + 1];
	MV_STATUS status;

	status = mvCtrlAddrWinMapBuild(addrWinMap, MAX_TARGETS + 1);
	if(status == MV_OK)
#ifdef MV_TDM_SUPPORT
		status = mvTdmWinInit(addrWinMap);
#else
		status = mvCommUnitWinInit(addrWinMap);
#endif

	if(status == MV_OK) {
		halData.spiMode = mvBoardTdmSpiModeGet();
		halData.model = mvCtrlModelGet();
#ifdef MV_TDM_SUPPORT
		status = mvTdmHalInit (tdmParams, &halData);
#else
		halData.maxCs = mvBoardTdmDevicesCountGet();
		status = mvCommUnitHalInit (tdmParams, &halData);
		
		/* Issue SLIC reset */
		mvGppValueSet(0, BIT25, 0);
		mvOsDelay(1);
		mvGppValueSet(0, BIT25, BIT25);
#endif
	}

	return status;
}
MV_VOID bfGppOutRegBitInv(MV_32 bit)
{
	if (bit < 0)
		return;

	if (bit < 32)
		mvGppValueSet(0, BIT(bit), ~mvGppValueGet(0, 0xffffffff));
	else
		mvGppValueSet(1, BIT(bit - 32), ~mvGppValueGet(1, 0xffffffff));
}
MV_VOID bfGppOutRegBitClr(MV_32 bit)
{
	if (bit < 0)
		return;

	if (bit < 32)
		mvGppValueSet(0, BIT(bit), 0x0);
	else
		mvGppValueSet(1, BIT(bit - 32), 0x0);
}
MV_VOID bfGppOutRegBitNagate(MV_32 bit)
{
	MV_U32 group;
	MV_U32 mask;
	MV_U32 value;

	if (bit < 0)
		return;

	if (bit < 32) {
		mask = BIT(bit);
		group = 0;
	}
	else {
		mask = BIT(bit - 32);
		group = 1;
	}

	if (bfGppDataInPolRegBitTest(bit))
		value = 0xffffffff;
	else
		value = 0x0;
	
	mvGppValueSet(group, mask, value);
}
/*******************************************************************************
**
**  onuPonTxPowerOn
**  ____________________________________________________________________________
**
**  DESCRIPTION: The function turns ON/OFF TX tranciever power using MPP
**
**  PARAMETERS:  MV_BOOL txOn - MV_TRUE - turn TX XVR ON, othervise OFF
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**
*******************************************************************************/
MV_STATUS onuPonTxPowerOn(MV_BOOL txOn)
{
	MV_U32		gpioGroup, gpioMask;
	MV_U32		devId = mvCtrlModelGet();
	MV_STATUS	status = MV_OK;

	PON_GPIO_GET(BOARD_GPP_PON_XVR_TX_POWER, gpioGroup, gpioMask);
	if (gpioMask != PON_GPIO_NOT_USED) {
		if (txOn == MV_TRUE)
			status = mvGppValueSet(gpioGroup, gpioMask, gpioMask);
		else
			status = mvGppValueSet(gpioGroup, gpioMask, 0);
	} else if (devId == MV_6601_DEV_ID)
		status = MV_ERROR;

	return(status);
}
/*******************************************************************************
**
**  onuPonPatternBurstEnable
**  ____________________________________________________________________________
**
**  DESCRIPTION:
**
**  PARAMETERS:  bool on
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**
*******************************************************************************/
MV_STATUS onuPonPatternBurstEnable(bool on)
{
	MV_STATUS status;
	MV_U32    gpioGroup, gpioMask;
	MV_U32    trans_value = 0;
	MV_U32    polarity;

	if (MV_6601_DEV_ID == mvCtrlModelGet())
	{
	       /* PHY control register - force enable */
	       status  = asicOntMiscRegWrite(mvAsicReg_PON_SERDES_PHY_CTRL_1_BEN_SW_FORCE, 1, 0);
	       if (status != MV_OK) {
		       mvPonPrint(PON_PRINT_ERROR, PON_ISR_MODULE,
			     "ERROR: asicOntMiscRegWrite failed for PON phy SW ctrl force\n\r");
		       return(MV_ERROR);
	       }

	       /* PHY control register - force enable value - according to polarity */
	       status  = asicOntMiscRegWrite(mvAsicReg_PON_SERDES_PHY_CTRL_1_BEN_SW_VALUE, 1, 0);
	       if (status != MV_OK) {
		       mvPonPrint(PON_PRINT_ERROR, PON_ISR_MODULE,
				  "ERROR: asicOntMiscRegWrite failed for PON phy ctrl SW force value %d\n\r",
				  trans_value);
		       return(MV_ERROR);
	       }

	} else if (mvCtrlRevGet() == ONU_ASIC_REV_Z2) {

	    	/* ASIC Rev Z2 */
	    	/* =========== */
		PON_GPIO_GET(BOARD_GPP_PON_XVR_TX, gpioGroup, gpioMask);
		if (gpioMask == PON_GPIO_NOT_USED)
			return MV_ERROR;

		trans_value = ((on == MV_TRUE) ? (gpioMask/*1*/) : (~gpioMask/*0*/));

		status = mvGppValueSet(gpioGroup, gpioMask, trans_value);
		if (status != MV_OK)
			return(MV_ERROR);

	} else if (mvCtrlRevGet() == ONU_ASIC_REV_A0) {

		/* ASIC Rev A0 */
		/* =========== */
		/* PHY control register - force enable */
		status  = asicOntMiscRegWrite(mvAsicReg_PON_SERDES_PHY_CTRL_1_FORCE_BEN_IO_EN, 1, 0);
		if (status != MV_OK) {
			mvPonPrint(PON_PRINT_ERROR, PON_ISR_MODULE,
				   "ERROR: asicOntMiscRegWrite failed for PON phy ctrl force\n\r");
			return(MV_ERROR);
		}

        polarity = onuP2PDbXvrBurstEnablePolarityGet();

		/* XVR polarity */
		/* XVR polarity == 0, Active High, transmit 1 to the line  */
		/* XVR polarity == 1, Active Low, transmit 0 to the line  */

		/* P2P mode */
		/* Force Value == 0, transmit 0 to the line  */
		/* Force Value == 1, transmit 1 to the line  */

		/* Setting P2P should be reversed from XVR polarity */
		/* XVR polarity == 0, Active High, write 1 for Force Value */
		/* XVR polarity == 1, Active Low, write 0 for Force Value */

		/* PHY control register - force enable value - according to polarity */
		status  = asicOntMiscRegWrite(mvAsicReg_PON_SERDES_PHY_CTRL_1_FORCE_BEN_IO_VAL, polarity, 0);
		if (status != MV_OK) {
			mvPonPrint(PON_PRINT_ERROR, PON_ISR_MODULE,
				   "ERROR: asicOntMiscRegWrite failed for PON phy ctrl force value %d\n\r",
				   trans_value);
			return(MV_ERROR);
		}
	}

	transmit_up = on;
	return(MV_OK);
}
/*******************************************************************************
**
**  mvOnuPonMacBurstEnableInit
**  ____________________________________________________________________________
**
**  DESCRIPTION: The function init Burst Enable MPP
**
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**
*******************************************************************************/
MV_STATUS mvOnuPonMacBurstEnableInit(void)
{
	MV_U32    gpioGroup, gpioMask;
	MV_STATUS status = MV_OK;

	if (MV_6601_DEV_ID == mvCtrlModelGet())
	{
	       /* PHY control register - output status set */
	       status  = asicOntMiscRegWrite(mvAsicReg_PON_SERDES_PHY_CTRL_1_BEN_IO_EN, ONU_PHY_OUTPUT, 0);
	       if (status != MV_OK) {
		       mvPonPrint(PON_PRINT_ERROR, PON_ISR_MODULE,
				  "ERROR: asicOntMiscRegWrite failed for PON phy ctrl enable - output\n\r");
		       return(MV_ERROR);
	       }

	       /* Set SW BEN control for MC tranciever */
	       status  = asicOntMiscRegWrite(mvAsicReg_PON_SERDES_PHY_CTRL_1_BEN_SW_HW_SELECT, 1, 0);
	       if (status != MV_OK) {
		       mvPonPrint(PON_PRINT_ERROR, PON_ISR_MODULE,
			"ERROR: asicOntMiscRegWrite failed for PON phy SW ctrl select\n\r");
		       return(MV_ERROR);
	       }

	       /* PHY control register - force disable */
	       status  = asicOntMiscRegWrite(mvAsicReg_PON_SERDES_PHY_CTRL_1_BEN_SW_FORCE, 0, 0);
	       if (status != MV_OK) {
		       mvPonPrint(PON_PRINT_ERROR, PON_ISR_MODULE,
			     "ERROR: asicOntMiscRegWrite failed for PON phy SW ctrl not force\n\r");
		       return(MV_ERROR);
	       }
	} else if (mvCtrlRevGet() == ONU_ASIC_REV_Z2) {

		/* KW2 ASIC Rev Z2 */
		/* =============== */
		PON_GPIO_GET(BOARD_GPP_PON_XVR_TX, gpioGroup, gpioMask);
		if (gpioMask == PON_GPIO_NOT_USED)
			return MV_ERROR;

		status = mvGppTypeSet(gpioGroup, gpioMask, ~gpioMask/* 0-output allow transsmit*/);

		if (status == MV_OK)
			status = mvGppValueSet(gpioGroup, gpioMask, ~gpioMask/*0-disable signal*/);
		else
			return(status);

		if (status == MV_OK)
			status = mvGppTypeSet(gpioGroup, gpioMask, gpioMask /* 0-input NOT allow transsmit*/);

	} else if (mvCtrlRevGet() == ONU_ASIC_REV_A0) {

		/* KW2 ASIC Rev A0 */
		/* =============== */
		/* PHY control register - output status set */
		status  = asicOntMiscRegWrite(mvAsicReg_PON_SERDES_PHY_CTRL_1_BEN_IO_EN, ONU_PHY_OUTPUT, 0);
		if (status != MV_OK) {
			mvPonPrint(PON_PRINT_ERROR, PON_ISR_MODULE,
				   "ERROR: asicOntMiscRegWrite failed for PON phy ctrl enable - output\n\r");
			return(MV_ERROR);
		}

		/* PHY control register - force disable */
		status  = asicOntMiscRegWrite(mvAsicReg_PON_SERDES_PHY_CTRL_1_FORCE_BEN_IO_EN, 0, 0);
		if (status != MV_OK) {
			mvPonPrint(PON_PRINT_ERROR, PON_ISR_MODULE,
				   "ERROR: asicOntMiscRegWrite failed for PON phy ctrl not force\n\r");
			return(MV_ERROR);
		}
	}

	return(status);
}
/*******************************************************************************
**
**  onuPonLedHandler
**  ____________________________________________________________________________
**
**  DESCRIPTION: The function handles led operation
**
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or MV_ERROR
**
*******************************************************************************/
MV_STATUS onuPonLedHandler(MV_U32 led, MV_U32 action)
{
	MV_STATUS status;
	MV_U32    gpioGroup = 0;
	MV_U32    gpioMask = 0;

	if (led == ONU_PON_SYS_LED) {

		PON_GPIO_GET(BOARD_GPP_SYS_LED, gpioGroup, gpioMask);
		if (gpioMask != PON_GPIO_NOT_USED) {
			status = mvGppValueSet(gpioGroup, gpioMask, gpioMask);
			if (status != MV_OK)
				return(status);
		}

	} else if (led == ONU_PON_SYNC_LED) {

		PON_GPIO_GET(BOARD_GPP_PON_LED, gpioGroup, gpioMask);
		if (gpioMask != PON_GPIO_NOT_USED) {
			switch (action) {
			case ACTIVE_LED_OFF:
				status  = mvGppValueSet(gpioGroup, gpioMask, ~gpioMask);
				if (status != MV_OK)
					return(status);
				break;

			case ACTIVE_LED_BLINK_SLOW:
				status  = mvGppValueSet(gpioGroup, gpioMask, gpioMask);
				if (status != MV_OK)
					return(status);
				status  = mvGppBlinkEn(gpioGroup, gpioMask, gpioMask);
				if (status != MV_OK)
					return(status);
				status  = asicOntMiscRegWrite(mvAsicReg_PON_SYNC_LED_BLINK_FREQ, 0, 0);
				if (status != MV_OK)
					return(status);
				break;

			case ACTIVE_LED_BLINK_FAST:
				status  = mvGppValueSet(gpioGroup, gpioMask, gpioMask);
				if (status != MV_OK)
					return(status);
				status  = mvGppBlinkEn(gpioGroup, gpioMask, gpioMask);
				if (status != MV_OK)
					return(status);
				status  = asicOntMiscRegWrite(mvAsicReg_PON_SYNC_LED_BLINK_FREQ, 1, 0);
				if (status != MV_OK)
					return(status);
				break;

			case ACTIVE_LED_ON:
				status  = mvGppValueSet(gpioGroup, gpioMask, gpioMask);
				if (status != MV_OK)
					return(status);
				status  = mvGppBlinkEn(gpioGroup, gpioMask, ~gpioMask);
				if (status != MV_OK)
					return(status);
				break;
			}
		}
	}

	return(MV_OK);
}