/******************************************************************************* * 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_STATUS my_mvSysCesaInit(int numOfSession, int queueDepth, void *osHandle) { MV_CESA_HAL_DATA halData; MV_UNIT_WIN_INFO addrWinMap[MAX_TARGETS + 1]; MV_STATUS status; MV_U8 chan; status = mvCtrlAddrWinMapBuild(addrWinMap, MAX_TARGETS + 1); if (status == MV_OK) { for (chan = 0; chan < MV_CESA_CHANNELS; chan++) { status = mvCesaTdmaWinInit(chan, addrWinMap); if (status != MV_OK) { mvOsPrintf("Error, unable to initialize CESA windows for channel(%d)\n", chan); break; } halData.sramPhysBase[chan] = (MV_ULONG)mv_crypto_virt_base_get(chan); halData.sramVirtBase[chan] = (MV_U8 *)mv_crypto_virt_base_get(chan); halData.sramOffset[chan] = 0; } if (status == MV_OK) { halData.ctrlModel = mvCtrlModelGet(); halData.ctrlRev = mvCtrlRevGet(); status = mvCesaHalInit(numOfSession, queueDepth, osHandle, &halData); } } return status; }
MV_STATUS mvSysSDmmcWinInit(MV_VOID) { MV_UNIT_WIN_INFO addrWinMap[MAX_TARGETS + 1]; MV_STATUS status; status = mvCtrlAddrWinMapBuild(addrWinMap, MAX_TARGETS + 1); if (status == MV_OK) status = mvSdmmcWinInit(addrWinMap); return status; }
MV_VOID mvSysXorInit (void) { MV_UNIT_WIN_INFO addrWinMap[MAX_TARGETS + 1]; MV_STATUS status; status = mvCtrlAddrWinMapBuild(addrWinMap, MAX_TARGETS + 1); if(status == MV_OK) status = mvXorWinInit(addrWinMap); if(status == MV_OK) mvXorHalInit(MV_XOR_MAX_CHAN); return; }
MV_VOID mvSysXorInit (void) { MV_UNIT_WIN_INFO addrWinMap[MAX_TARGETS + 1]; MV_STATUS status, unit; status = mvCtrlAddrWinMapBuild(addrWinMap, MAX_TARGETS + 1); if (status == MV_OK) status = mvXorWinInit(addrWinMap); if (status == MV_OK) { for (unit = 0; unit < MV_XOR_MAX_UNIT; unit++) mvXorHalInit(unit); } return; }
/******************************************************************************* * mvSysAudioInit - Initialize the Audio subsystem * * DESCRIPTION: * * INPUT: * None * OUTPUT: * None * RETURN: * None * *******************************************************************************/ MV_VOID mvSysAudioInit(MV_U8 unit) { MV_AUDIO_HAL_DATA halData; MV_UNIT_WIN_INFO addrWinMap[MAX_TARGETS + 1]; MV_STATUS status = MV_OK; #if 0 status = mvCtrlAddrWinMapBuild(addrWinMap, MAX_TARGETS + 1); if(status == MV_OK) status = mvAudioWinInit(unit, addrWinMap); #endif if(status == MV_OK) { halData.tclk = mvBoardTclkGet(); mvAudioHalInit(unit,&halData); } return; }
/******************************************************************************* * mvSysEthInit - Initialize the Eth subsystem * * DESCRIPTION: * * INPUT: * None * OUTPUT: * None * RETURN: * None * *******************************************************************************/ MV_VOID mvSysEthInit(MV_VOID) { MV_ETH_HAL_DATA halData; MV_U32 port; MV_UNIT_WIN_INFO addrWinMap[MAX_TARGETS + 1]; MV_STATUS status; int i; status = mvCtrlAddrWinMapBuild(addrWinMap, MAX_TARGETS + 1); if (status != MV_OK) return; for (i = 0; i < MAX_TARGETS; i++) { if (addrWinMap[i].enable == MV_FALSE) continue; } halData.maxPortNum = mvCtrlEthMaxPortGet(); halData.cpuPclk = mvCpuPclkGet(); halData.tclk = mvBoardTclkGet(); #ifdef ETH_DESCR_IN_SRAM halData.sramSize = mvCtrlSramSizeGet(); #endif for (port = 0; port < halData.maxPortNum; port++) { if (MV_FALSE == mvBoardIsGbEPortConnected(port)) continue; if (mvCtrlPwrClckGet(ETH_GIG_UNIT_ID, port) == MV_FALSE) { halData.portData[port].powerOn = MV_FALSE; continue; } status = mvEthWinInit(port, addrWinMap); if (status == MV_OK) { halData.portData[port].powerOn = MV_TRUE; halData.portData[port].phyAddr = mvBoardPhyAddrGet(port); halData.portData[port].isSgmii = mvBoardIsPortInSgmii(port); halData.portData[port].macSpeed = mvBoardMacSpeedGet(port); } } mvEthHalInit(&halData); return; }
/******************************************************************************* * mvSysPexInit - Initialize the Pex subsystem * * DESCRIPTION: * * INPUT: * None * OUTPUT: * None * RETURN: * None * *******************************************************************************/ MV_STATUS mvSysPexInit(MV_U32 pexIf, MV_PEX_TYPE pexType) { MV_PEX_HAL_DATA halData; MV_UNIT_WIN_INFO addrWinMap[MAX_TARGETS + 1]; MV_STATUS status; status = mvCtrlAddrWinMapBuild(addrWinMap, MAX_TARGETS + 1); if(status == MV_OK) status = mvPexWinInit(pexIf, pexType, addrWinMap); if(status == MV_OK) { halData.ctrlModel = mvCtrlModelGet(); halData.maxPexIf = mvCtrlPexMaxIfGet(); status = mvPexInit(pexIf, pexType, &halData); } return status; }
/******************************************************************************* * mvSysUsbHalInit - Initialize the USB subsystem * * DESCRIPTION: * * INPUT: * None * OUTPUT: * None * RETURN: * None * *******************************************************************************/ MV_STATUS mvSysUsbInit(MV_U32 dev, MV_BOOL isHost) { MV_USB_HAL_DATA halData; MV_UNIT_WIN_INFO addrWinMap[MAX_TARGETS + 1]; MV_STATUS status; status = mvCtrlAddrWinMapBuild(addrWinMap, MAX_TARGETS + 1); if(status == MV_OK) status = mvUsbWinInit(dev, addrWinMap); if(status == MV_OK) { halData.ctrlModel = mvCtrlModelGet(); halData.ctrlRev = mvCtrlRevGet(); status = mvUsbHalInit(dev, isHost, &halData); } return status; }
/******************************************************************************* * mvSysPexInit - Initialize the Pex subsystem * * DESCRIPTION: * * INPUT: * None * OUTPUT: * None * RETURN: * None * *******************************************************************************/ MV_STATUS mvSysPexInit(MV_U32 pexIf, MV_PEX_TYPE pexType) { MV_PEX_HAL_DATA halData; MV_UNIT_WIN_INFO addrWinMap[MAX_TARGETS + 1]; MV_STATUS status; if (MV_FALSE == mvCtrlPwrClckGet(PEX_UNIT_ID, pexIf)) return MV_ERROR; status = mvCtrlAddrWinMapBuild(addrWinMap, MAX_TARGETS + 1); if (status == MV_OK) status = mvPexWinInit(pexIf, pexType, addrWinMap); if (status == MV_OK) { halData.ctrlModel = mvCtrlModelGet(); halData.maxPexIf = mvCtrlPexMaxIfGet(); halData.ctrlFamily=mvCtrlDevFamilyIdGet(halData.ctrlModel); status = mvPexInit(pexIf, pexType, &halData); } return status; }
/******************************************************************************* * mvSysUsbHalInit - Initialize the USB subsystem * * DESCRIPTION: * * INPUT: * None * OUTPUT: * None * RETURN: * None * *******************************************************************************/ MV_STATUS mvSysUsbInit(MV_VOID) { MV_USB_HAL_DATA halData; MV_STATUS status = MV_OK; MV_U32 dev; MV_UNIT_WIN_INFO addrWinMap[MAX_TARGETS + 1]; halData.ctrlModel = mvCtrlModelGet(); halData.ctrlRev = mvCtrlRevGet(); halData.ctrlFamily = mvCtrlDevFamilyIdGet(halData.ctrlModel); status = mvCtrlAddrWinMapBuild(addrWinMap, MAX_TARGETS + 1); #ifdef CONFIG_USB_EHCI MV_BOOL isHost; char envname[10], *env; int maxUsbPorts = mvCtrlUsbMaxGet(); /* for ALP/A375: if using single usb2 port, use Virtual MAC ID since MAC ID0 (usbActive =0) is connected to Physical MAC ID1 */ int id, mac_id[2] = {1, 0}; for (id = 0; id < maxUsbPorts ; id++) { if (mvBoardIsUsbPortConnected(USB_UNIT_ID,id) == MV_FALSE) continue; if (maxUsbPorts == 1 && (halData.ctrlFamily == MV_88F67X0 || (halData.ctrlRev == MV_88F66XX_A0_ID && halData.ctrlFamily == MV_88F66X0))) dev = mac_id[id]; else dev = id; sprintf(envname, "usb%dMode", dev); env = getenv(envname); if ((!env) || (strcmp(env, "device") == 0) || (strcmp(env, "Device") == 0)) isHost = MV_FALSE; else isHost = MV_TRUE; if (status == MV_OK) /* Map DDR windows to EHCI */ #ifdef CONFIG_USB_XHCI_HCD /* CONFIG_USB_XHCI_HCD indicate that both xHCI and eHCI are compiled: * Last Boolean argument is used to indicate the HAL layer which unit is currently initiated */ status = mvUsbWinInit(dev, addrWinMap, MV_FALSE); #else status = mvUsbWinInit(dev, addrWinMap); #endif if (status == MV_OK) status = mvUsbHalInit(dev, isHost, &halData); if (status == MV_OK) printf("USB2.0 %d: %s Mode\n", dev, (isHost == MV_TRUE ? "Host" : "Device")); else mvOsPrintf("%s: Error: USB2.0 initialization failed (port %d).\n", __func__, dev); } #endif #ifdef CONFIG_USB_XHCI MV_U32 reg; for (dev = 0; dev < mvCtrlUsb3HostMaxGet(); dev++) { if (mvBoardIsUsbPortConnected(USB3_UNIT_ID,dev) == MV_FALSE) continue; status = mvUsbUtmiPhyInit(dev, &halData); if (halData.ctrlFamily == MV_88F66X0 || halData.ctrlFamily == MV_88F67X0) { /* ALP/A375: Set UTMI PHY Selector: * - Connect UTMI PHY to USB2 port of USB3 Host * - Powers down the other unit (so USB3.0 unit's registers are accessible) */ reg = MV_REG_READ(USB_CLUSTER_CONTROL); reg = (reg & (~0x1)) | 0x1; MV_REG_WRITE(USB_CLUSTER_CONTROL, reg); } if (status == MV_OK) /* Map DDR windows to XHCI */ status = mvUsbWinInit(mvCtrlUsbMapGet(USB3_UNIT_ID, dev), addrWinMap, MV_TRUE); if (status == MV_OK) printf("USB3.0 %d: Host Mode\n", mvCtrlUsbMapGet(USB3_UNIT_ID, dev)); else mvOsPrintf("%s: Error: USB3.0 initialization failed (port %d).\n", __func__, mvCtrlUsbMapGet(USB3_UNIT_ID, dev)); } #endif return status; }