/******************************************************************************* * 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); }