| /******************************************************************************* |
| Copyright (C) Marvell International Ltd. and its affiliates |
| |
| This software file (the "File") is owned and distributed by Marvell |
| International Ltd. and/or its affiliates ("Marvell") under the following |
| alternative licensing terms. Once you have made an election to distribute the |
| File under one of the following license alternatives, please (i) delete this |
| introductory statement regarding license alternatives, (ii) delete the two |
| license alternatives that you have not elected to use and (iii) preserve the |
| Marvell copyright notice above. |
| |
| ******************************************************************************** |
| Marvell Commercial License Option |
| |
| If you received this File from Marvell and you have entered into a commercial |
| license agreement (a "Commercial License") with Marvell, the File is licensed |
| to you under the terms of the applicable Commercial License. |
| |
| ******************************************************************************** |
| Marvell GPL License Option |
| |
| If you received this File from Marvell, you may opt to use, redistribute and/or |
| modify this File in accordance with the terms and conditions of the General |
| Public License Version 2, June 1991 (the "GPL License"), a copy of which is |
| available along with the File in the license.txt file or by writing to the Free |
| Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or |
| on the worldwide web at http://www.gnu.org/licenses/gpl.txt. |
| |
| THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED |
| WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY |
| DISCLAIMED. The GPL License provides additional details about this warranty |
| disclaimer. |
| ******************************************************************************** |
| Marvell BSD License Option |
| |
| If you received this File from Marvell, you may opt to use, redistribute and/or |
| modify this File under the following licensing terms. |
| Redistribution and use in source and binary forms, with or without modification, |
| are permitted provided that the following conditions are met: |
| |
| * Redistributions of source code must retain the above copyright notice, |
| this list of conditions and the following disclaimer. |
| |
| * Redistributions in binary form must reproduce the above copyright |
| notice, this list of conditions and the following disclaimer in the |
| documentation and/or other materials provided with the distribution. |
| |
| * Neither the name of Marvell nor the names of its contributors may be |
| used to endorse or promote products derived from this software without |
| specific prior written permission. |
| |
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR |
| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON |
| ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| |
| *******************************************************************************/ |
| |
| #include "ctrlEnv/mvCtrlEnvLib.h" |
| #include "ctrlEnv/sys/mvCpuIf.h" |
| #include "cpu/mvCpu.h" |
| #include "boardEnv/mvBoardEnvLib.h" |
| #include "ctrlEnv/mvUnitMap.h" |
| |
| static MV_BOOL mv_rsrc_limited = MV_FALSE; |
| static MV_RES_MAP mv_res_table[] = { |
| /* Dividable units */ |
| {0, "uart0"}, |
| {0, "uart1"}, |
| {0, "pex0"}, |
| {0, "pex1"}, |
| {0, "pex2"}, |
| {0, "pex3"}, |
| {0, "eth0"}, |
| {0, "eth1"}, |
| {0, "eth2"}, |
| {0, "eth3"}, |
| {0, "xor0"}, |
| {0, "xor1"}, |
| {0, "usb0"}, |
| {0, "usb1"}, |
| {0, "usb2"}, |
| {0, "i2c0"}, |
| {0, "i2c1"}, |
| /* Single Allocation units */ |
| {0, "sata"}, |
| {0, "cesa"}, |
| {0, "nor"}, |
| {0, "nand"}, |
| {0, "spi"}, |
| {0, "tdm"}, |
| {0, "sdio"}, |
| {0, "lcd"}, |
| {0, "hwmon"}, |
| {0, "rtc"}, |
| {0, "gpio"}, |
| {0, "mstr"}, |
| {-1, "last"} |
| }; |
| |
| MV_BOOL mvUnitMapIsRsrcLimited(void) |
| { |
| return mv_rsrc_limited; |
| } |
| |
| MV_VOID mvUnitMapSetRsrcLimited(MV_BOOL isLimited) |
| { |
| mv_rsrc_limited = isLimited; |
| } |
| |
| MV_BOOL mvUnitMapIsMine(MV_SOC_UNIT unitIdx) |
| { |
| return mv_res_table[unitIdx].isMine; |
| } |
| |
| MV_BOOL mvUnitMapIsPexMine(int pciIf) |
| { |
| MV_SOC_UNIT unitIdx; |
| |
| /* Map line Number to PEX unit number */ |
| /* This is compatible to mvCtrlSerdesPhyConfig in BoardEnvLib.c */ |
| if(pciIf < PEX1_0x4) |
| unitIdx = PEX0; |
| else if(pciIf < PEX2_0x4) |
| unitIdx = PEX1; |
| else if(pciIf < PEX3_0x4) |
| unitIdx = PEX2; |
| else |
| unitIdx = PEX3; |
| |
| return mv_res_table[unitIdx].isMine; |
| } |
| |
| MV_VOID mvUnitMapSetMine(MV_SOC_UNIT unitIdx) |
| { |
| if (MV_TRUE == mv_res_table[unitIdx].isMine) |
| return; |
| |
| mv_res_table[unitIdx].isMine = 1; |
| } |
| |
| MV_BOOL mvUnitMapSetup(char* cmdLine, STRSTR_FUNCPTR strstr_func) |
| { |
| int unitIdx; |
| char* match; |
| |
| for (unitIdx = 0; mv_res_table[unitIdx].isMine != (-1); unitIdx++) { |
| char *unitName = mv_res_table[unitIdx].unitName; |
| int len; |
| match = strstr_func(cmdLine, unitName); |
| if (!match) continue; |
| /*Look for start delimiter*/ |
| if (match > cmdLine) { |
| if (match[-1] != ' ' && match[-1] != ':') { |
| continue; |
| } |
| } |
| /* Calc string length without using strlen() */ |
| while (*unitName++ != '\0'); |
| len = unitName - mv_res_table[unitIdx].unitName - 1; |
| /*Look for end delimiter*/ |
| if (match[len] != ' ' && match[len] != ':' && match[len] != '\0') { |
| continue; |
| } |
| mvUnitMapSetMine(unitIdx); |
| } |
| return MV_TRUE; |
| } |
| |
| MV_U32 mvSocUnitMapFillFlagFormTable(void) |
| { |
| int i; |
| MV_U32 flag = 0; |
| for (i = 0; mv_res_table[i].cpuId != -1; i++) |
| { |
| if (mvSocUnitMapGet(i) == 0)//SLAVE_CPU) |
| { |
| switch (i) |
| { |
| case UART0: flag |= UART0_T0_CPU1; break; |
| case UART1: flag |= UART1_TO_CPU1; break; |
| case PEX00: flag |= PEX0_TO_CPU1; break; |
| case PEX10: flag |= PEX1_TO_CPU1; break; |
| case GIGA0: flag |= GIGA0_TO_CPU1; break; |
| case GIGA1: flag |= GIGA1_TO_CPU1; break; |
| case GIGA2: flag |= GIGA2_TO_CPU1; break; |
| case GIGA3: flag |= GIGA3_TO_CPU1; break; |
| case SATA: flag |= SATA_TO_CPU1; break; |
| case XOR: flag |= XOR_TO_CPU1; break; |
| case IDMA: flag |= IDMA_TO_CPU1; break; |
| case USB0: flag |= USB0_TO_CPU1; break; |
| case USB1: flag |= USB1_TO_CPU1; break; |
| case USB2: flag |= USB2_TO_CPU1; break; |
| case CESA: flag |= CESA_TO_CPU1; break; |
| case NOR_FLASH: flag |= NOR_TO_CPU1; break; |
| case NAND_FLASH: flag |= NAND_TO_CPU1; break; |
| case SPI_FLASH: flag |= SPI_TO_CPU1; break; |
| case TDM: flag |= TDM_TO_CPU1; break; |
| default: |
| break; |
| } |
| } |
| } |
| |
| return flag; |
| }*/ |
| MV_VOID mvUnitMapSetAllMine() |
| { |
| int unitIdx; |
| for (unitIdx = 0; mv_res_table[unitIdx].isMine != (-1); unitIdx++) { |
| mvUnitMapSetMine(unitIdx); |
| } |
| } |
| |
| MV_VOID mvUnitMapPrint() |
| { |
| int unitIdx; |
| mvOsPrintf(" AMP: Resources "); |
| for (unitIdx = 0; mv_res_table[unitIdx].isMine != -1; unitIdx++) { |
| if (mv_res_table[unitIdx].isMine) { |
| mvOsPrintf("- %s ", mv_res_table[unitIdx].unitName); |
| } |
| } |
| mvOsPrintf("\n"); |
| } |