X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fopenwrt.git;a=blobdiff_plain;f=target%2Flinux%2Fgeneric-2.6%2Ffiles%2Fcrypto%2Focf%2Fkirkwood%2FmvHal%2Fkw_family%2FctrlEnv%2Fsys%2FmvAhbToMbus.c;fp=target%2Flinux%2Fgeneric-2.6%2Ffiles%2Fcrypto%2Focf%2Fkirkwood%2FmvHal%2Fkw_family%2FctrlEnv%2Fsys%2FmvAhbToMbus.c;h=0000000000000000000000000000000000000000;hp=d21bb074d216cf56edde3a93064f7121981e0a3a;hb=da1bb88a2b900f0392b731ec47c5e1bff956fd8f;hpb=6117c04c9416b295347fb45c37e430f01df1d0d9 diff --git a/target/linux/generic-2.6/files/crypto/ocf/kirkwood/mvHal/kw_family/ctrlEnv/sys/mvAhbToMbus.c b/target/linux/generic-2.6/files/crypto/ocf/kirkwood/mvHal/kw_family/ctrlEnv/sys/mvAhbToMbus.c deleted file mode 100644 index d21bb074d2..0000000000 --- a/target/linux/generic-2.6/files/crypto/ocf/kirkwood/mvHal/kw_family/ctrlEnv/sys/mvAhbToMbus.c +++ /dev/null @@ -1,1048 +0,0 @@ -/******************************************************************************* -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. - -*******************************************************************************/ - - -/* includes */ -#include "ctrlEnv/sys/mvAhbToMbus.h" -#include "ctrlEnv/mvCtrlEnvAddrDec.h" - -#undef MV_DEBUG -/* defines */ -#ifdef MV_DEBUG - #define DB(x) x -#else - #define DB(x) -#endif - -/* typedefs */ - - -/* CPU address remap registers offsets are inconsecutive. This struct */ -/* describes address remap register offsets */ -typedef struct _ahbToMbusRemapRegOffs -{ - MV_U32 lowRegOffs; /* Low 32-bit remap register offset */ - MV_U32 highRegOffs; /* High 32 bit remap register offset */ -}AHB_TO_MBUS_REMAP_REG_OFFS; - -/* locals */ -static MV_STATUS ahbToMbusRemapRegOffsGet (MV_U32 winNum, - AHB_TO_MBUS_REMAP_REG_OFFS *pRemapRegs); - -/******************************************************************************* -* mvAhbToMbusInit - Initialize Ahb To Mbus Address Map ! -* -* DESCRIPTION: -* -* INPUT: -* None. -* -* OUTPUT: -* None. -* -* RETURN: -* MV_OK laways. -* -*******************************************************************************/ -MV_STATUS mvAhbToMbusInit(void) -{ - return MV_OK; - -} - -/******************************************************************************* -* mvAhbToMbusWinSet - Set CPU-to-peripheral winNum address window -* -* DESCRIPTION: -* This function sets -* address window, also known as address decode window. -* A new address decode window is set for specified winNum address window. -* If address decode window parameter structure enables the window, -* the routine will also enable the winNum window, allowing CPU to access -* the winNum window. -* -* INPUT: -* winNum - Windows number. -* pAddrDecWin - CPU winNum window data structure. -* -* OUTPUT: -* N/A -* -* RETURN: -* MV_OK if CPU winNum window was set correctly, MV_ERROR in case of -* address window overlapps with other active CPU winNum window or -* trying to assign 36bit base address while CPU does not support that. -* The function returns MV_NOT_SUPPORTED, if the winNum is unsupported. -* -*******************************************************************************/ -MV_STATUS mvAhbToMbusWinSet(MV_U32 winNum, MV_AHB_TO_MBUS_DEC_WIN *pAddrDecWin) -{ - MV_TARGET_ATTRIB targetAttribs; - MV_DEC_REGS decRegs; - - /* Parameter checking */ - if (winNum >= MAX_AHB_TO_MBUS_WINS) - { - mvOsPrintf("mvAhbToMbusWinSet: ERR. Invalid winNum %d\n", winNum); - return MV_NOT_SUPPORTED; - } - - - /* read base register*/ - if (winNum != MV_AHB_TO_MBUS_INTREG_WIN) - { - decRegs.baseReg = MV_REG_READ(AHB_TO_MBUS_WIN_BASE_REG(winNum)); - } - else - { - decRegs.baseReg = MV_REG_READ(AHB_TO_MBUS_WIN_INTEREG_REG); - } - - /* check if address is aligned to the size */ - if(MV_IS_NOT_ALIGN(pAddrDecWin->addrWin.baseLow, pAddrDecWin->addrWin.size)) - { - mvOsPrintf("mvAhbToMbusWinSet:Error setting AHB to MBUS window %d to "\ - "target %s.\nAddress 0x%08x is unaligned to size 0x%x.\n", - winNum, - mvCtrlTargetNameGet(pAddrDecWin->target), - pAddrDecWin->addrWin.baseLow, - pAddrDecWin->addrWin.size); - return MV_ERROR; - } - - /* read control register*/ - if (winNum != MV_AHB_TO_MBUS_INTREG_WIN) - { - decRegs.sizeReg = MV_REG_READ(AHB_TO_MBUS_WIN_CTRL_REG(winNum)); - } - - if (MV_OK != mvCtrlAddrDecToReg(&(pAddrDecWin->addrWin),&decRegs)) - { - mvOsPrintf("mvAhbToMbusWinSet:mvCtrlAddrDecToReg Failed\n"); - return MV_ERROR; - } - - /* enable\Disable */ - if (MV_TRUE == pAddrDecWin->enable) - { - decRegs.sizeReg |= ATMWCR_WIN_ENABLE; - } - else - { - decRegs.sizeReg &= ~ATMWCR_WIN_ENABLE; - } - - mvCtrlAttribGet(pAddrDecWin->target,&targetAttribs); - - /* set attributes */ - decRegs.sizeReg &= ~ATMWCR_WIN_ATTR_MASK; - decRegs.sizeReg |= targetAttribs.attrib << ATMWCR_WIN_ATTR_OFFS; - /* set target ID */ - decRegs.sizeReg &= ~ATMWCR_WIN_TARGET_MASK; - decRegs.sizeReg |= targetAttribs.targetId << ATMWCR_WIN_TARGET_OFFS; - -#if !defined(MV_RUN_FROM_FLASH) - /* To be on the safe side we disable the window before writing the */ - /* new values. */ - if (winNum != MV_AHB_TO_MBUS_INTREG_WIN) - { - mvAhbToMbusWinEnable(winNum,MV_FALSE); - } -#endif - - /* 3) Write to address decode Base Address Register */ - if (winNum != MV_AHB_TO_MBUS_INTREG_WIN) - { - MV_REG_WRITE(AHB_TO_MBUS_WIN_BASE_REG(winNum), decRegs.baseReg); - } - else - { - MV_REG_WRITE(AHB_TO_MBUS_WIN_INTEREG_REG, decRegs.baseReg); - } - - - /* Internal register space have no size */ - /* register. Do not perform size register assigment for those targets */ - if (winNum != MV_AHB_TO_MBUS_INTREG_WIN) - { - /* Write to address decode Size Register */ - MV_REG_WRITE(AHB_TO_MBUS_WIN_CTRL_REG(winNum), decRegs.sizeReg); - } - - return MV_OK; -} - -/******************************************************************************* -* mvAhbToMbusWinGet - Get CPU-to-peripheral winNum address window -* -* DESCRIPTION: -* Get the CPU peripheral winNum address window. -* -* INPUT: -* winNum - Peripheral winNum enumerator -* -* OUTPUT: -* pAddrDecWin - CPU winNum window information data structure. -* -* RETURN: -* MV_OK if winNum exist, MV_ERROR otherwise. -* -*******************************************************************************/ -MV_STATUS mvAhbToMbusWinGet(MV_U32 winNum, MV_AHB_TO_MBUS_DEC_WIN *pAddrDecWin) -{ - MV_DEC_REGS decRegs; - MV_TARGET_ATTRIB targetAttrib; - - - /* Parameter checking */ - if (winNum >= MAX_AHB_TO_MBUS_WINS) - { - mvOsPrintf("mvAhbToMbusWinGet: ERR. Invalid winNum %d\n", winNum); - return MV_NOT_SUPPORTED; - } - - - /* Internal register space size have no size register*/ - if (winNum != MV_AHB_TO_MBUS_INTREG_WIN) - { - decRegs.sizeReg = MV_REG_READ(AHB_TO_MBUS_WIN_CTRL_REG(winNum)); - } - else - { - decRegs.sizeReg = 0; - } - - - /* Read base and size */ - if (winNum != MV_AHB_TO_MBUS_INTREG_WIN) - { - decRegs.baseReg = MV_REG_READ(AHB_TO_MBUS_WIN_BASE_REG(winNum)); - } - else - { - decRegs.baseReg = MV_REG_READ(AHB_TO_MBUS_WIN_INTEREG_REG); - } - - - - if (MV_OK != mvCtrlRegToAddrDec(&decRegs,&(pAddrDecWin->addrWin))) - { - mvOsPrintf("mvAhbToMbusWinGet: mvCtrlRegToAddrDec Failed \n"); - return MV_ERROR; - } - - if (winNum == MV_AHB_TO_MBUS_INTREG_WIN) - { - pAddrDecWin->addrWin.size = INTER_REGS_SIZE; - pAddrDecWin->target = INTER_REGS; - pAddrDecWin->enable = MV_TRUE; - - return MV_OK; - } - - - if (decRegs.sizeReg & ATMWCR_WIN_ENABLE) - { - pAddrDecWin->enable = MV_TRUE; - } - else - { - pAddrDecWin->enable = MV_FALSE; - - } - - - - if (-1 == pAddrDecWin->addrWin.size) - { - return MV_ERROR; - } - - /* attrib and targetId */ - targetAttrib.attrib = (decRegs.sizeReg & ATMWCR_WIN_ATTR_MASK) >> - ATMWCR_WIN_ATTR_OFFS; - targetAttrib.targetId = (decRegs.sizeReg & ATMWCR_WIN_TARGET_MASK) >> - ATMWCR_WIN_TARGET_OFFS; - - pAddrDecWin->target = mvCtrlTargetGet(&targetAttrib); - - return MV_OK; -} - -/******************************************************************************* -* mvAhbToMbusWinTargetGet - Get Window number associated with target -* -* DESCRIPTION: -* -* INPUT: -* -* OUTPUT: -* -* RETURN: -* -*******************************************************************************/ -MV_U32 mvAhbToMbusWinTargetGet(MV_TARGET target) -{ - MV_AHB_TO_MBUS_DEC_WIN decWin; - MV_U32 winNum; - - /* Check parameters */ - if (target >= MAX_TARGETS) - { - mvOsPrintf("mvAhbToMbusWinTargetGet: target %d is Illigal\n", target); - return 0xffffffff; - } - - if (INTER_REGS == target) - { - return MV_AHB_TO_MBUS_INTREG_WIN; - } - - for (winNum = 0; winNum < MAX_AHB_TO_MBUS_WINS ; winNum++) - { - if (winNum == MV_AHB_TO_MBUS_INTREG_WIN) - continue; - - if (mvAhbToMbusWinGet(winNum,&decWin) != MV_OK) - { - mvOsPrintf("mvAhbToMbusWinTargetGet: mvAhbToMbusWinGet fail\n"); - return 0xffffffff; - - } - - if (decWin.enable == MV_TRUE) - { - if (decWin.target == target) - { - return winNum; - } - - } - - } - - return 0xFFFFFFFF; - - -} - -/******************************************************************************* -* mvAhbToMbusWinAvailGet - Get First Available window number. -* -* DESCRIPTION: -* -* INPUT: -* -* OUTPUT: -* -* RETURN: -* -*******************************************************************************/ -MV_U32 mvAhbToMbusWinAvailGet(MV_VOID) -{ - MV_AHB_TO_MBUS_DEC_WIN decWin; - MV_U32 winNum; - - for (winNum = 0; winNum < MAX_AHB_TO_MBUS_WINS ; winNum++) - { - if (winNum == MV_AHB_TO_MBUS_INTREG_WIN) - continue; - - if (mvAhbToMbusWinGet(winNum,&decWin) != MV_OK) - { - mvOsPrintf("mvAhbToMbusWinTargetGet: mvAhbToMbusWinGet fail\n"); - return 0xffffffff; - - } - - if (decWin.enable == MV_FALSE) - { - return winNum; - } - - } - - return 0xFFFFFFFF; -} - - -/******************************************************************************* -* mvAhbToMbusWinEnable - Enable/disable a CPU address decode window -* -* DESCRIPTION: -* This function enable/disable a CPU address decode window. -* if parameter 'enable' == MV_TRUE the routine will enable the -* window, thus enabling CPU accesses (before enabling the window it is -* tested for overlapping). Otherwise, the window will be disabled. -* -* INPUT: -* winNum - Peripheral winNum enumerator. -* enable - Enable/disable parameter. -* -* OUTPUT: -* N/A -* -* RETURN: -* MV_ERROR if protection window number was wrong, or the window -* overlapps other winNum window. -* -*******************************************************************************/ -MV_STATUS mvAhbToMbusWinEnable(MV_U32 winNum, MV_BOOL enable) -{ - - /* Parameter checking */ - if (winNum >= MAX_AHB_TO_MBUS_WINS) - { - mvOsPrintf("mvAhbToMbusWinEnable: ERR. Invalid winNum %d\n", winNum); - return MV_NOT_SUPPORTED; - } - - /* Internal registers bar can't be disable or enabled */ - if (winNum == MV_AHB_TO_MBUS_INTREG_WIN) - { - return (enable ? MV_OK : MV_ERROR); - } - - if (enable == MV_TRUE) - { - /* enable the window */ - MV_REG_BIT_SET(AHB_TO_MBUS_WIN_CTRL_REG(winNum), ATMWCR_WIN_ENABLE); - } - else - { /* Disable address decode winNum window */ - MV_REG_BIT_RESET(AHB_TO_MBUS_WIN_CTRL_REG(winNum), ATMWCR_WIN_ENABLE); - } - - return MV_OK; -} - - -/******************************************************************************* -* mvAhbToMbusWinRemap - Set CPU remap register for address windows. -* -* DESCRIPTION: -* After a CPU address hits one of PCI address decode windows there is an -* option to remap the address to a different one. For example, CPU -* executes a read from PCI winNum window address 0x1200.0000. This -* can be modified so the address on the PCI bus would be 0x1400.0000 -* Using the PCI address remap mechanism. -* -* INPUT: -* winNum - Peripheral winNum enumerator. Must be a PCI winNum. -* pAddrDecWin - CPU winNum window information data structure. -* Note that caller has to fill in the base field only. The -* size field is ignored. -* -* OUTPUT: -* None. -* -* RETURN: -* MV_ERROR if winNum is not a PCI one, MV_OK otherwise. -* -*******************************************************************************/ -MV_U32 mvAhbToMbusWinRemap(MV_U32 winNum, MV_ADDR_WIN *pAddrWin) -{ - MV_U32 baseAddr; - AHB_TO_MBUS_REMAP_REG_OFFS remapRegOffs; - - MV_U32 effectiveBaseAddress=0, - baseAddrValue=0,windowSizeValue=0; - - - /* Get registers offsets of given winNum */ - if (MV_NO_SUCH == ahbToMbusRemapRegOffsGet(winNum, &remapRegOffs)) - { - return 0xffffffff; - } - - /* 1) Set address remap low */ - baseAddr = pAddrWin->baseLow; - - /* Check base address aligment */ - /* - if (MV_IS_NOT_ALIGN(baseAddr, ATMWRLR_REMAP_LOW_ALIGNMENT)) - { - mvOsPrintf("mvAhbToMbusPciRemap: Warning. Target base 0x%x unaligned\n", - baseAddr); - return MV_ERROR; - } - */ - - /* BaseLow[31:16] => base register [31:16] */ - baseAddr = baseAddr & ATMWRLR_REMAP_LOW_MASK; - - MV_REG_WRITE(remapRegOffs.lowRegOffs, baseAddr); - - MV_REG_WRITE(remapRegOffs.highRegOffs, pAddrWin->baseHigh); - - - baseAddrValue = MV_REG_READ(AHB_TO_MBUS_WIN_BASE_REG(winNum)); - windowSizeValue = MV_REG_READ(AHB_TO_MBUS_WIN_CTRL_REG(winNum)); - - baseAddrValue &= ATMWBR_BASE_MASK; - windowSizeValue &=ATMWCR_WIN_SIZE_MASK; - - /* Start calculating the effective Base Address */ - effectiveBaseAddress = baseAddrValue ; - - /* The effective base address will be combined from the chopped (if any) - remap value (according to the size value and remap mechanism) and the - window's base address */ - effectiveBaseAddress |= (((windowSizeValue) | 0xffff) & pAddrWin->baseLow); - /* If the effectiveBaseAddress exceed the window boundaries return an - invalid value. */ - - if (effectiveBaseAddress > (baseAddrValue + (windowSizeValue | 0xffff))) - { - mvOsPrintf("mvAhbToMbusPciRemap: Error\n"); - return 0xffffffff; - } - - return effectiveBaseAddress; - - -} -/******************************************************************************* -* mvAhbToMbusWinTargetSwap - Swap AhbToMbus windows between targets -* -* DESCRIPTION: -* -* INPUT: -* target1 - CPU Interface target 1 -* target2 - CPU Interface target 2 -* -* OUTPUT: -* None. -* -* RETURN: -* MV_ERROR if targets are illigal, or if one of the targets is not -* associated to a valid window . -* MV_OK otherwise. -* -*******************************************************************************/ - - -MV_STATUS mvAhbToMbusWinTargetSwap(MV_TARGET target1,MV_TARGET target2) -{ - MV_U32 winNum1,winNum2; - MV_AHB_TO_MBUS_DEC_WIN winDec1,winDec2,winDecTemp; - AHB_TO_MBUS_REMAP_REG_OFFS remapRegs1,remapRegs2; - MV_U32 remapBaseLow1=0,remapBaseLow2=0; - MV_U32 remapBaseHigh1=0,remapBaseHigh2=0; - - - /* Check parameters */ - if (target1 >= MAX_TARGETS) - { - mvOsPrintf("mvAhbToMbusWinTargetSwap: target %d is Illigal\n", target1); - return MV_ERROR; - } - - if (target2 >= MAX_TARGETS) - { - mvOsPrintf("mvAhbToMbusWinTargetSwap: target %d is Illigal\n", target1); - return MV_ERROR; - } - - - /* get window associated with this target */ - winNum1 = mvAhbToMbusWinTargetGet(target1); - - if (winNum1 == 0xffffffff) - { - mvOsPrintf("mvAhbToMbusWinTargetSwap: target %d has illigal win %d\n", - target1,winNum1); - return MV_ERROR; - - } - - /* get window associated with this target */ - winNum2 = mvAhbToMbusWinTargetGet(target2); - - if (winNum2 == 0xffffffff) - { - mvOsPrintf("mvAhbToMbusWinTargetSwap: target %d has illigal win %d\n", - target2,winNum2); - return MV_ERROR; - - } - - /* now Get original values of both Windows */ - if (MV_OK != mvAhbToMbusWinGet(winNum1,&winDec1)) - { - mvOsPrintf("mvAhbToMbusWinTargetSwap: mvAhbToMbusWinGet failed win %d\n", - winNum1); - return MV_ERROR; - - } - if (MV_OK != mvAhbToMbusWinGet(winNum2,&winDec2)) - { - mvOsPrintf("mvAhbToMbusWinTargetSwap: mvAhbToMbusWinGet failed win %d\n", - winNum2); - return MV_ERROR; - - } - - - /* disable both windows */ - if (MV_OK != mvAhbToMbusWinEnable(winNum1,MV_FALSE)) - { - mvOsPrintf("mvAhbToMbusWinTargetSwap: failed to enable window %d\n", - winNum1); - return MV_ERROR; - - } - if (MV_OK != mvAhbToMbusWinEnable(winNum2,MV_FALSE)) - { - mvOsPrintf("mvAhbToMbusWinTargetSwap: failed to enable windo %d\n", - winNum2); - return MV_ERROR; - - } - - - /* now swap targets */ - - /* first save winDec2 values */ - winDecTemp.addrWin.baseHigh = winDec2.addrWin.baseHigh; - winDecTemp.addrWin.baseLow = winDec2.addrWin.baseLow; - winDecTemp.addrWin.size = winDec2.addrWin.size; - winDecTemp.enable = winDec2.enable; - winDecTemp.target = winDec2.target; - - /* winDec2 = winDec1 */ - winDec2.addrWin.baseHigh = winDec1.addrWin.baseHigh; - winDec2.addrWin.baseLow = winDec1.addrWin.baseLow; - winDec2.addrWin.size = winDec1.addrWin.size; - winDec2.enable = winDec1.enable; - winDec2.target = winDec1.target; - - - /* winDec1 = winDecTemp */ - winDec1.addrWin.baseHigh = winDecTemp.addrWin.baseHigh; - winDec1.addrWin.baseLow = winDecTemp.addrWin.baseLow; - winDec1.addrWin.size = winDecTemp.addrWin.size; - winDec1.enable = winDecTemp.enable; - winDec1.target = winDecTemp.target; - - - /* now set the new values */ - - - mvAhbToMbusWinSet(winNum1,&winDec1); - mvAhbToMbusWinSet(winNum2,&winDec2); - - - - - - /* now we will treat the remap windows if exist */ - - - /* now check if one or both windows has a remap window - as well after the swap ! */ - - /* if a window had a remap value differnt than the base value - before the swap , then after the swap the remap value will be - equal to the base value unless both windows has a remap windows*/ - - /* first get old values */ - if (MV_NO_SUCH != ahbToMbusRemapRegOffsGet(winNum1,&remapRegs1)) - { - remapBaseLow1 = MV_REG_READ(remapRegs1.lowRegOffs); - remapBaseHigh1 = MV_REG_READ(remapRegs1.highRegOffs); - - } - if (MV_NO_SUCH != ahbToMbusRemapRegOffsGet(winNum2,&remapRegs2)) - { - remapBaseLow2 = MV_REG_READ(remapRegs2.lowRegOffs); - remapBaseHigh2 = MV_REG_READ(remapRegs2.highRegOffs); - - - } - - /* now do the swap */ - if (MV_NO_SUCH != ahbToMbusRemapRegOffsGet(winNum1,&remapRegs1)) - { - if (MV_NO_SUCH != ahbToMbusRemapRegOffsGet(winNum2,&remapRegs2)) - { - /* Two windows has a remap !!! so swap */ - - MV_REG_WRITE(remapRegs2.highRegOffs,remapBaseHigh1); - MV_REG_WRITE(remapRegs2.lowRegOffs,remapBaseLow1); - - MV_REG_WRITE(remapRegs1.highRegOffs,remapBaseHigh2); - MV_REG_WRITE(remapRegs1.lowRegOffs,remapBaseLow2); - - - - } - else - { - /* remap == base */ - MV_REG_WRITE(remapRegs1.highRegOffs,winDec1.addrWin.baseHigh); - MV_REG_WRITE(remapRegs1.lowRegOffs,winDec1.addrWin.baseLow); - - } - - } - else if (MV_NO_SUCH != ahbToMbusRemapRegOffsGet(winNum2,&remapRegs2)) - { - /* remap == base */ - MV_REG_WRITE(remapRegs2.highRegOffs,winDec2.addrWin.baseHigh); - MV_REG_WRITE(remapRegs2.lowRegOffs,winDec2.addrWin.baseLow); - - } - - - - return MV_OK; - - -} - - - -#if defined(MV_88F1181) - -/******************************************************************************* -* mvAhbToMbusXbarCtrlSet - Set The CPU master Xbar arbitration. -* -* DESCRIPTION: -* This function sets CPU Mbus Arbiter -* -* INPUT: -* pPizzaArbArray - A priority Structure describing 16 "pizza slices". At -* each clock cycle, the crossbar arbiter samples all -* requests and gives the bus to the next agent according -* to the "pizza". -* -* OUTPUT: -* N/A -* -* RETURN: -* MV_ERROR if paramers to function invalid. -* -*******************************************************************************/ -MV_STATUS mvMbusArbSet(MV_MBUS_ARB_TARGET *pPizzaArbArray) -{ - MV_U32 sliceNum; - MV_U32 xbarCtrl = 0; - MV_MBUS_ARB_TARGET xbarTarget; - - /* 1) Set crossbar control low register */ - for (sliceNum = 0; sliceNum < MRLR_SLICE_NUM; sliceNum++) - { - xbarTarget = pPizzaArbArray[sliceNum]; - - /* sliceNum parameter check */ - if (xbarTarget > MAX_MBUS_ARB_TARGETS) - { - mvOsPrintf("mvAhbToMbusXbarCtrlSet: ERR. Can't set Target %d\n", - xbarTarget); - return MV_ERROR; - } - xbarCtrl |= (xbarTarget << MRLR_LOW_ARB_OFFS(sliceNum)); - } - /* Write to crossbar control low register */ - MV_REG_WRITE(MBUS_ARBITER_LOW_REG, xbarCtrl); - - xbarCtrl = 0; - - /* 2) Set crossbar control high register */ - for (sliceNum = MRLR_SLICE_NUM; - sliceNum < MRLR_SLICE_NUM+MRHR_SLICE_NUM; - sliceNum++) - { - - xbarTarget = pPizzaArbArray[sliceNum]; - - /* sliceNum parameter check */ - if (xbarTarget > MAX_MBUS_ARB_TARGETS) - { - mvOsPrintf("mvAhbToMbusXbarCtrlSet: ERR. Can't set Target %d\n", - xbarTarget); - return MV_ERROR; - } - xbarCtrl |= (xbarTarget << MRHR_HIGH_ARB_OFFS(sliceNum)); - } - /* Write to crossbar control high register */ - MV_REG_WRITE(MBUS_ARBITER_HIGH_REG, xbarCtrl); - - return MV_OK; -} - -/******************************************************************************* -* mvMbusArbCtrlSet - Set MBus Arbiter control register -* -* DESCRIPTION: -* -* INPUT: -* ctrl - pointer to MV_MBUS_ARB_CTRL register -* -* OUTPUT: -* N/A -* -* RETURN: -* MV_ERROR if paramers to function invalid. -* -*******************************************************************************/ -MV_STATUS mvMbusArbCtrlSet(MV_MBUS_ARB_CTRL *ctrl) -{ - - if (ctrl->highPrio == MV_FALSE) - { - MV_REG_BIT_RESET(MBUS_ARBITER_CTRL_REG, MACR_ARB_ARM_TOP); - } - else - { - MV_REG_BIT_SET(MBUS_ARBITER_CTRL_REG, MACR_ARB_ARM_TOP); - } - - if (ctrl->fixedRoundRobin == MV_FALSE) - { - MV_REG_BIT_RESET(MBUS_ARBITER_CTRL_REG, MACR_ARB_TARGET_FIXED); - } - else - { - MV_REG_BIT_SET(MBUS_ARBITER_CTRL_REG, MACR_ARB_TARGET_FIXED); - } - - if (ctrl->starvEn == MV_FALSE) - { - MV_REG_BIT_RESET(MBUS_ARBITER_CTRL_REG, MACR_ARB_REQ_CTRL_EN); - } - else - { - MV_REG_BIT_SET(MBUS_ARBITER_CTRL_REG, MACR_ARB_REQ_CTRL_EN); - } - - return MV_OK; -} - -/******************************************************************************* -* mvMbusArbCtrlGet - Get MBus Arbiter control register -* -* DESCRIPTION: -* -* INPUT: -* ctrl - pointer to MV_MBUS_ARB_CTRL register -* -* OUTPUT: -* ctrl - pointer to MV_MBUS_ARB_CTRL register -* -* RETURN: -* MV_ERROR if paramers to function invalid. -* -*******************************************************************************/ -MV_STATUS mvMbusArbCtrlGet(MV_MBUS_ARB_CTRL *ctrl) -{ - - MV_U32 ctrlReg = MV_REG_READ(MBUS_ARBITER_CTRL_REG); - - if (ctrlReg & MACR_ARB_ARM_TOP) - { - ctrl->highPrio = MV_TRUE; - } - else - { - ctrl->highPrio = MV_FALSE; - } - - if (ctrlReg & MACR_ARB_TARGET_FIXED) - { - ctrl->fixedRoundRobin = MV_TRUE; - } - else - { - ctrl->fixedRoundRobin = MV_FALSE; - } - - if (ctrlReg & MACR_ARB_REQ_CTRL_EN) - { - ctrl->starvEn = MV_TRUE; - } - else - { - ctrl->starvEn = MV_FALSE; - } - - - return MV_OK; -} - -#endif /* #if defined(MV_88F1181) */ - - - -/******************************************************************************* -* ahbToMbusRemapRegOffsGet - Get CPU address remap register offsets -* -* DESCRIPTION: -* CPU to PCI address remap registers offsets are inconsecutive. -* This function returns PCI address remap registers offsets. -* -* INPUT: -* winNum - Address decode window number. See MV_U32 enumerator. -* -* OUTPUT: -* None. -* -* RETURN: -* MV_ERROR if winNum is not a PCI one. -* -*******************************************************************************/ -static MV_STATUS ahbToMbusRemapRegOffsGet(MV_U32 winNum, - AHB_TO_MBUS_REMAP_REG_OFFS *pRemapRegs) -{ - switch (winNum) - { - case 0: - case 1: - pRemapRegs->lowRegOffs = AHB_TO_MBUS_WIN_REMAP_LOW_REG(winNum); - pRemapRegs->highRegOffs = AHB_TO_MBUS_WIN_REMAP_HIGH_REG(winNum); - break; - case 2: - case 3: - if((mvCtrlModelGet() == MV_5281_DEV_ID) || - (mvCtrlModelGet() == MV_1281_DEV_ID) || - (mvCtrlModelGet() == MV_6183_DEV_ID) || - (mvCtrlModelGet() == MV_6183L_DEV_ID)) - { - pRemapRegs->lowRegOffs = AHB_TO_MBUS_WIN_REMAP_LOW_REG(winNum); - pRemapRegs->highRegOffs = AHB_TO_MBUS_WIN_REMAP_HIGH_REG(winNum); - break; - } - else - { - pRemapRegs->lowRegOffs = 0; - pRemapRegs->highRegOffs = 0; - - DB(mvOsPrintf("ahbToMbusRemapRegOffsGet: ERR. Invalid winNum %d\n", - winNum)); - return MV_NO_SUCH; - } - default: - { - pRemapRegs->lowRegOffs = 0; - pRemapRegs->highRegOffs = 0; - - DB(mvOsPrintf("ahbToMbusRemapRegOffsGet: ERR. Invalid winNum %d\n", - winNum)); - return MV_NO_SUCH; - } - } - - return MV_OK; -} - -/******************************************************************************* -* mvAhbToMbusAddDecShow - Print the AHB to MBus bridge address decode map. -* -* DESCRIPTION: -* This function print the CPU address decode map. -* -* INPUT: -* None. -* -* OUTPUT: -* None. -* -* RETURN: -* None. -* -*******************************************************************************/ -MV_VOID mvAhbToMbusAddDecShow(MV_VOID) -{ - MV_AHB_TO_MBUS_DEC_WIN win; - MV_U32 winNum; - mvOsOutput( "\n" ); - mvOsOutput( "AHB To MBUS Bridge:\n" ); - mvOsOutput( "-------------------\n" ); - - for( winNum = 0; winNum < MAX_AHB_TO_MBUS_WINS; winNum++ ) - { - memset( &win, 0, sizeof(MV_AHB_TO_MBUS_DEC_WIN) ); - - mvOsOutput( "win%d - ", winNum ); - - if( mvAhbToMbusWinGet( winNum, &win ) == MV_OK ) - { - if( win.enable ) - { - mvOsOutput( "%s base %08x, ", - mvCtrlTargetNameGet(win.target), win.addrWin.baseLow ); - mvOsOutput( "...." ); - mvSizePrint( win.addrWin.size ); - - mvOsOutput( "\n" ); - - } - else - mvOsOutput( "disable\n" ); - } - } - -} -