aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/files/crypto/ocf/kirkwood/mvHal/kw_family/ctrlEnv/sys/mvSysPex.c
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/generic/files/crypto/ocf/kirkwood/mvHal/kw_family/ctrlEnv/sys/mvSysPex.c')
-rw-r--r--target/linux/generic/files/crypto/ocf/kirkwood/mvHal/kw_family/ctrlEnv/sys/mvSysPex.c1697
1 files changed, 0 insertions, 1697 deletions
diff --git a/target/linux/generic/files/crypto/ocf/kirkwood/mvHal/kw_family/ctrlEnv/sys/mvSysPex.c b/target/linux/generic/files/crypto/ocf/kirkwood/mvHal/kw_family/ctrlEnv/sys/mvSysPex.c
deleted file mode 100644
index b0cb466ab3..0000000000
--- a/target/linux/generic/files/crypto/ocf/kirkwood/mvHal/kw_family/ctrlEnv/sys/mvSysPex.c
+++ /dev/null
@@ -1,1697 +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.
-
-*******************************************************************************/
-
-#include "ctrlEnv/sys/mvSysPex.h"
-
-/* this structure describes the mapping between a Pex Window and a CPU target*/
-typedef struct _pexWinToTarget
-{
- MV_TARGET target;
- MV_BOOL enable;
-
-}PEX_WIN_TO_TARGET;
-
-/* this array is a priority array that define How Pex windows should be
-configured , We have only 6 Pex Windows that can be configured , but we
-have maximum of 9 CPU target windows ! the following array is a priority
-array where the lowest index has the highest priotiy and the highest
-index has the lowest priority of being cnfigured */
-
-MV_U32 pexDevBarPrioTable[] =
-{
-#if defined(MV_INCLUDE_DEVICE_CS0)
- DEVICE_CS0,
-#endif
-#if defined(MV_INCLUDE_DEVICE_CS1)
- DEVICE_CS1,
-#endif
-#if defined(MV_INCLUDE_DEVICE_CS2)
- DEVICE_CS2,
-#endif
-#if defined(MV_INCLUDE_DEVICE_CS3)
- DEVICE_CS3,
-#endif
-/*
-#if defined(MV_INCLUDE_DEVICE_CS4)
- DEVICE_CS4,
-#endif
-*/
- TBL_TERM
-};
-
-
-/* PEX Wins registers offsets are inconsecutive. This struct describes WIN */
-/* register offsets and its function where its is located. */
-/* Also, PEX address remap registers offsets are inconsecutive. This struct */
-/* describes address remap register offsets */
-typedef struct _pexWinRegInfo
-{
- MV_U32 baseLowRegOffs;
- MV_U32 baseHighRegOffs;
- MV_U32 sizeRegOffs;
- MV_U32 remapLowRegOffs;
- MV_U32 remapHighRegOffs;
-
-}PEX_WIN_REG_INFO;
-
-static MV_STATUS pexWinOverlapDetect(MV_U32 pexIf, MV_U32 winNum,
- MV_ADDR_WIN *pAddrWin);
-static MV_STATUS pexWinRegInfoGet(MV_U32 pexIf, MV_U32 winNum,
- PEX_WIN_REG_INFO *pWinRegInfo);
-
-static MV_STATUS pexBarIsValid(MV_U32 baseLow, MV_U32 size);
-
-static MV_BOOL pexIsWinWithinBar(MV_U32 pexIf,MV_ADDR_WIN *pAddrWin);
-static MV_BOOL pexBarOverlapDetect(MV_U32 pexIf,MV_U32 barNum,
- MV_ADDR_WIN *pAddrWin);
-const MV_8* pexBarNameGet( MV_U32 bar );
-
-
-/*******************************************************************************
-* mvPexInit - Initialize PEX interfaces
-*
-* DESCRIPTION:
-*
-* This function is responsible of intialization of the Pex Interface , It
-* configure the Pex Bars and Windows in the following manner:
-*
-* Assumptions :
-* Bar0 is always internal registers bar
-* Bar1 is always the DRAM bar
-* Bar2 is always the Device bar
-*
-* 1) Sets the Internal registers bar base by obtaining the base from
-* the CPU Interface
-* 2) Sets the DRAM bar base and size by getting the base and size from
-* the CPU Interface when the size is the sum of all enabled DRAM
-* chip selects and the base is the base of CS0 .
-* 3) Sets the Device bar base and size by getting these values from the
-* CPU Interface when the base is the base of the lowest base of the
-* Device chip selects, and the
-*
-*
-* INPUT:
-*
-* pexIf - PEX interface number.
-*
-*
-* OUTPUT:
-* None.
-*
-* RETURN:
-* MV_OK if function success otherwise MV_ERROR or MV_BAD_PARAM
-*
-*******************************************************************************/
-MV_STATUS mvPexInit(MV_U32 pexIf, MV_PEX_TYPE pexType)
-{
- MV_U32 bar;
- MV_U32 winNum;
- MV_PEX_BAR pexBar;
- MV_PEX_DEC_WIN pexWin;
- MV_CPU_DEC_WIN addrDecWin;
- MV_TARGET target;
- MV_U32 pexCurrWin=0;
- MV_U32 status;
- /* default and exapntion rom
- are always configured */
-
-#ifndef MV_DISABLE_PEX_DEVICE_BAR
- MV_U32 winIndex;
- MV_U32 maxBase=0, sizeOfMaxBase=0;
- MV_U32 pexStartWindow;
-#endif
-
- /* Parameter checking */
- if(pexIf >= mvCtrlPexMaxIfGet())
- {
- mvOsPrintf("mvPexInit: ERR. Invalid PEX interface %d\n", pexIf);
- return MV_BAD_PARAM;
- }
-
- /* Enabled CPU access to PCI-Express */
- mvCpuIfEnablePex(pexIf, pexType);
-
- /* Start with bars */
- /* First disable all PEX bars*/
- for (bar = 0; bar < PEX_MAX_BARS; bar++)
- {
- if (PEX_INTER_REGS_BAR != bar)
- {
- if (MV_OK != mvPexBarEnable(pexIf, bar, MV_FALSE))
- {
- mvOsPrintf("mvPexInit:mvPexBarEnable bar =%d failed \n",bar);
- return MV_ERROR;
- }
-
- }
-
- }
-
- /* and disable all PEX target windows */
- for (winNum = 0; winNum < PEX_MAX_TARGET_WIN - 2; winNum++)
- {
- if (MV_OK != mvPexTargetWinEnable(pexIf, winNum, MV_FALSE))
- {
- mvOsPrintf("mvPexInit:mvPexTargetWinEnable winNum =%d failed \n",
- winNum);
- return MV_ERROR;
-
- }
- }
-
- /* Now, go through all bars*/
-
-
-
-/******************************************************************************/
-/* Internal registers bar */
-/******************************************************************************/
- bar = PEX_INTER_REGS_BAR;
-
- /* we only open the bar , no need to open windows for this bar */
-
- /* first get the CS attribute from the CPU Interface */
- if (MV_OK !=mvCpuIfTargetWinGet(INTER_REGS,&addrDecWin))
- {
- mvOsPrintf("mvPexInit: ERR. mvCpuIfTargetWinGet failed target =%d\n",INTER_REGS);
- return MV_ERROR;
- }
-
- pexBar.addrWin.baseHigh = addrDecWin.addrWin.baseHigh;
- pexBar.addrWin.baseLow = addrDecWin.addrWin.baseLow;
- pexBar.addrWin.size = addrDecWin.addrWin.size;
- pexBar.enable = MV_TRUE;
-
- if (MV_OK != mvPexBarSet(pexIf, bar, &pexBar))
- {
- mvOsPrintf("mvPexInit: ERR. mvPexBarSet %d failed\n", bar);
- return MV_ERROR;
- }
-
-/******************************************************************************/
-/* DRAM bar */
-/******************************************************************************/
-
- bar = PEX_DRAM_BAR;
-
- pexBar.addrWin.size = 0;
-
- for (target = SDRAM_CS0;target < MV_DRAM_MAX_CS; target++ )
- {
-
- status = mvCpuIfTargetWinGet(target,&addrDecWin);
-
- if((MV_NO_SUCH == status)&&(target != SDRAM_CS0))
- {
- continue;
- }
-
- /* first get attributes from CPU If */
- if (MV_OK != status)
- {
- mvOsPrintf("mvPexInit: ERR. mvCpuIfTargetWinGet failed target =%d\n",target);
- return MV_ERROR;
- }
- if (addrDecWin.enable == MV_TRUE)
- {
- /* the base is the base of DRAM CS0 always */
- if (SDRAM_CS0 == target )
- {
- pexBar.addrWin.baseHigh = addrDecWin.addrWin.baseHigh;
- pexBar.addrWin.baseLow = addrDecWin.addrWin.baseLow;
-
- }
-
- /* increment the bar size to be the sum of the size of all
- DRAM chips selecs */
- pexBar.addrWin.size += addrDecWin.addrWin.size;
-
- /* set a Pex window for this target !
- DRAM CS always will have a Pex Window , and is not a
- part of the priority table */
- pexWin.addrWin.baseHigh = addrDecWin.addrWin.baseHigh;
- pexWin.addrWin.baseLow = addrDecWin.addrWin.baseLow;
- pexWin.addrWin.size = addrDecWin.addrWin.size;
-
- /* we disable the windows at first because we are not
- sure that it is witihin bar boundries */
- pexWin.enable =MV_FALSE;
- pexWin.target = target;
- pexWin.targetBar = bar;
-
- if (MV_OK != mvPexTargetWinSet(pexIf,pexCurrWin++,&pexWin))
- {
- mvOsPrintf("mvPexInit: ERR. mvPexTargetWinSet failed\n");
- return MV_ERROR;
- }
- }
- }
-
- /* check if the size of the bar is illeggal */
- if (-1 == ctrlSizeToReg(pexBar.addrWin.size, PXBCR_BAR_SIZE_ALIGNMENT))
- {
- /* try to get a good size */
- pexBar.addrWin.size = ctrlSizeRegRoundUp(pexBar.addrWin.size,
- PXBCR_BAR_SIZE_ALIGNMENT);
- }
-
- /* check if the size and base are valid */
- if (MV_TRUE == pexBarOverlapDetect(pexIf,bar,&pexBar.addrWin))
- {
- mvOsPrintf("mvPexInit:Warning :Bar %d size is illigal\n",bar);
- mvOsPrintf("it will be disabled\n");
- mvOsPrintf("please check Pex and CPU windows configuration\n");
- }
- else
- {
- pexBar.enable = MV_TRUE;
-
- /* configure the bar */
- if (MV_OK != mvPexBarSet(pexIf, bar, &pexBar))
- {
- mvOsPrintf("mvPexInit: ERR. mvPexBarSet %d failed\n", bar);
- return MV_ERROR;
- }
-
- /* after the bar was configured then we enable the Pex windows*/
- for (winNum = 0;winNum < pexCurrWin ;winNum++)
- {
- if (MV_OK != mvPexTargetWinEnable(pexIf, winNum, MV_TRUE))
- {
- mvOsPrintf("mvPexInit: Can't enable window =%d\n",winNum);
- return MV_ERROR;
- }
-
- }
- }
-
-/******************************************************************************/
-/* DEVICE bar */
-/******************************************************************************/
-
-/* Open the Device BAR for non linux only */
-#ifndef MV_DISABLE_PEX_DEVICE_BAR
-
- /* then device bar*/
- bar = PEX_DEVICE_BAR;
-
- /* save the starting window */
- pexStartWindow = pexCurrWin;
- pexBar.addrWin.size = 0;
- pexBar.addrWin.baseLow = 0xffffffff;
- pexBar.addrWin.baseHigh = 0;
- maxBase = 0;
-
- for (target = DEV_TO_TARGET(START_DEV_CS);target < DEV_TO_TARGET(MV_DEV_MAX_CS); target++ )
- {
- status = mvCpuIfTargetWinGet(target,&addrDecWin);
-
- if (MV_NO_SUCH == status)
- {
- continue;
- }
-
- if (MV_OK != status)
- {
- mvOsPrintf("mvPexInit: ERR. mvCpuIfTargetWinGet failed target =%d\n",target);
- return MV_ERROR;
- }
-
- if (addrDecWin.enable == MV_TRUE)
- {
- /* get the minimum base */
- if (addrDecWin.addrWin.baseLow < pexBar.addrWin.baseLow)
- {
- pexBar.addrWin.baseLow = addrDecWin.addrWin.baseLow;
- }
-
- /* get the maximum base */
- if (addrDecWin.addrWin.baseLow > maxBase)
- {
- maxBase = addrDecWin.addrWin.baseLow;
- sizeOfMaxBase = addrDecWin.addrWin.size;
- }
-
- /* search in the priority table for this target */
- for (winIndex = 0; pexDevBarPrioTable[winIndex] != TBL_TERM;
- winIndex++)
- {
- if (pexDevBarPrioTable[winIndex] != target)
- {
- continue;
- }
- else if (pexDevBarPrioTable[winIndex] == target)
- {
- /*found it */
-
- /* if the index of this target in the prio table is valid
- then we set the Pex window for this target, a valid index is
- an index that is lower than the number of the windows that
- was not configured yet */
-
- /* we subtract 2 always because the default and expantion
- rom windows are always configured */
- if ( pexCurrWin < PEX_MAX_TARGET_WIN - 2)
- {
- /* set a Pex window for this target ! */
- pexWin.addrWin.baseHigh = addrDecWin.addrWin.baseHigh;
- pexWin.addrWin.baseLow = addrDecWin.addrWin.baseLow;
- pexWin.addrWin.size = addrDecWin.addrWin.size;
-
- /* we disable the windows at first because we are not
- sure that it is witihin bar boundries */
- pexWin.enable = MV_FALSE;
- pexWin.target = target;
- pexWin.targetBar = bar;
-
- if (MV_OK != mvPexTargetWinSet(pexIf,pexCurrWin++,
- &pexWin))
- {
- mvOsPrintf("mvPexInit: ERR. Window Set failed\n");
- return MV_ERROR;
- }
- }
- }
- }
- }
- }
-
- pexBar.addrWin.size = maxBase - pexBar.addrWin.baseLow + sizeOfMaxBase;
- pexBar.enable = MV_TRUE;
-
- /* check if the size of the bar is illegal */
- if (-1 == ctrlSizeToReg(pexBar.addrWin.size, PXBCR_BAR_SIZE_ALIGNMENT))
- {
- /* try to get a good size */
- pexBar.addrWin.size = ctrlSizeRegRoundUp(pexBar.addrWin.size,
- PXBCR_BAR_SIZE_ALIGNMENT);
- }
-
- /* check if the size and base are valid */
- if (MV_TRUE == pexBarOverlapDetect(pexIf,bar,&pexBar.addrWin))
- {
- mvOsPrintf("mvPexInit:Warning :Bar %d size is illigal\n",bar);
- mvOsPrintf("it will be disabled\n");
- mvOsPrintf("please check Pex and CPU windows configuration\n");
- }
- else
- {
- if (MV_OK != mvPexBarSet(pexIf, bar, &pexBar))
- {
- mvOsPrintf("mvPexInit: ERR. mvPexBarSet %d failed\n", bar);
- return MV_ERROR;
- }
-
- /* now enable the windows */
- for (winNum = pexStartWindow; winNum < pexCurrWin ; winNum++)
- {
- if (MV_OK != mvPexTargetWinEnable(pexIf, winNum, MV_TRUE))
- {
- mvOsPrintf("mvPexInit:mvPexTargetWinEnable winNum =%d failed \n",
- winNum);
- return MV_ERROR;
- }
- }
- }
-
-#endif
-
- return mvPexHalInit(pexIf, pexType);
-
-}
-
-/*******************************************************************************
-* mvPexTargetWinSet - Set PEX to peripheral target address window BAR
-*
-* DESCRIPTION:
-*
-* INPUT:
-*
-* OUTPUT:
-* N/A
-*
-* RETURN:
-* MV_OK if PEX BAR target window was set correctly,
-* MV_BAD_PARAM on bad params
-* MV_ERROR otherwise
-* (e.g. address window overlapps with other active PEX target window).
-*
-*******************************************************************************/
-MV_STATUS mvPexTargetWinSet(MV_U32 pexIf, MV_U32 winNum,
- MV_PEX_DEC_WIN *pAddrDecWin)
-{
-
- MV_DEC_REGS decRegs;
- PEX_WIN_REG_INFO winRegInfo;
- MV_TARGET_ATTRIB targetAttribs;
-
- /* Parameter checking */
- if(pexIf >= mvCtrlPexMaxIfGet())
- {
- mvOsPrintf("mvPexTargetWinSet: ERR. Invalid PEX interface %d\n", pexIf);
- return MV_BAD_PARAM;
- }
-
- if (winNum >= PEX_MAX_TARGET_WIN)
- {
- mvOsPrintf("mvPexTargetWinSet: ERR. Invalid PEX winNum %d\n", winNum);
- return MV_BAD_PARAM;
-
- }
-
- /* get the pex Window registers offsets */
- pexWinRegInfoGet(pexIf,winNum,&winRegInfo);
-
-
- if (MV_TRUE == pAddrDecWin->enable)
- {
-
- /* 2) Check if the requested window overlaps with current windows */
- if (MV_TRUE == pexWinOverlapDetect(pexIf,winNum, &pAddrDecWin->addrWin))
- {
- mvOsPrintf("mvPexTargetWinSet: ERR. Target %d overlap\n", winNum);
- return MV_BAD_PARAM;
- }
-
- /* 2) Check if the requested window overlaps with current windows */
- if (MV_FALSE == pexIsWinWithinBar(pexIf,&pAddrDecWin->addrWin))
- {
- mvOsPrintf("mvPexTargetWinSet: Win %d should be in bar boundries\n",
- winNum);
- return MV_BAD_PARAM;
- }
-
- }
-
-
-
- /* read base register*/
-
- if (winRegInfo.baseLowRegOffs)
- {
- decRegs.baseReg = MV_REG_READ(winRegInfo.baseLowRegOffs);
- }
- else
- {
- decRegs.baseReg = 0;
- }
-
- if (winRegInfo.sizeRegOffs)
- {
- decRegs.sizeReg = MV_REG_READ(winRegInfo.sizeRegOffs);
- }
- else
- {
- decRegs.sizeReg =0;
- }
-
- if (MV_OK != mvCtrlAddrDecToReg(&(pAddrDecWin->addrWin),&decRegs))
- {
- mvOsPrintf("mvPexTargetWinSet:mvCtrlAddrDecToReg Failed\n");
- return MV_ERROR;
- }
-
- /* enable\Disable */
- if (MV_TRUE == pAddrDecWin->enable)
- {
- decRegs.sizeReg |= PXWCR_WIN_EN;
- }
- else
- {
- decRegs.sizeReg &= ~PXWCR_WIN_EN;
- }
-
-
- /* clear bit location */
- decRegs.sizeReg &= ~PXWCR_WIN_BAR_MAP_MASK;
-
- /* set bar Mapping */
- if (pAddrDecWin->targetBar == 1)
- {
- decRegs.sizeReg |= PXWCR_WIN_BAR_MAP_BAR1;
- }
- else if (pAddrDecWin->targetBar == 2)
- {
- decRegs.sizeReg |= PXWCR_WIN_BAR_MAP_BAR2;
- }
-
- mvCtrlAttribGet(pAddrDecWin->target,&targetAttribs);
-
- /* set attributes */
- decRegs.sizeReg &= ~PXWCR_ATTRIB_MASK;
- decRegs.sizeReg |= targetAttribs.attrib << PXWCR_ATTRIB_OFFS;
- /* set target ID */
- decRegs.sizeReg &= ~PXWCR_TARGET_MASK;
- decRegs.sizeReg |= targetAttribs.targetId << PXWCR_TARGET_OFFS;
-
-
- /* 3) Write to address decode Base Address Register */
-
- if (winRegInfo.baseLowRegOffs)
- {
- MV_REG_WRITE(winRegInfo.baseLowRegOffs, decRegs.baseReg);
- }
-
- /* write size reg */
- if (winRegInfo.sizeRegOffs)
- {
- if ((MV_PEX_WIN_DEFAULT == winNum)||
- (MV_PEX_WIN_EXP_ROM == winNum))
- {
- /* clear size because there is no size field*/
- decRegs.sizeReg &= ~PXWCR_SIZE_MASK;
-
- /* clear enable because there is no enable field*/
- decRegs.sizeReg &= ~PXWCR_WIN_EN;
-
- }
-
- MV_REG_WRITE(winRegInfo.sizeRegOffs, decRegs.sizeReg);
- }
-
-
- return MV_OK;
-
-}
-
-/*******************************************************************************
-* mvPexTargetWinGet - Get PEX to peripheral target address window
-*
-* DESCRIPTION:
-* Get the PEX to peripheral target address window BAR.
-*
-* INPUT:
-* pexIf - PEX interface number.
-* bar - BAR to be accessed by slave.
-*
-* OUTPUT:
-* pAddrBarWin - PEX target window information data structure.
-*
-* RETURN:
-* MV_BAD_PARAM for bad parameters ,MV_ERROR on error ! otherwise MV_OK
-*
-*******************************************************************************/
-MV_STATUS mvPexTargetWinGet(MV_U32 pexIf, MV_U32 winNum,
- MV_PEX_DEC_WIN *pAddrDecWin)
-{
- MV_TARGET_ATTRIB targetAttrib;
- MV_DEC_REGS decRegs;
-
- PEX_WIN_REG_INFO winRegInfo;
-
- /* Parameter checking */
- if(pexIf >= mvCtrlPexMaxIfGet())
- {
- mvOsPrintf("mvPexTargetWinGet: ERR. Invalid PEX interface %d\n", pexIf);
- return MV_BAD_PARAM;
- }
-
- if (winNum >= PEX_MAX_TARGET_WIN)
- {
- mvOsPrintf("mvPexTargetWinGet: ERR. Invalid PEX winNum %d\n", winNum);
- return MV_BAD_PARAM;
-
- }
-
- /* get the pex Window registers offsets */
- pexWinRegInfoGet(pexIf,winNum,&winRegInfo);
-
- /* read base register*/
- if (winRegInfo.baseLowRegOffs)
- {
- decRegs.baseReg = MV_REG_READ(winRegInfo.baseLowRegOffs);
- }
- else
- {
- decRegs.baseReg = 0;
- }
-
- /* read size reg */
- if (winRegInfo.sizeRegOffs)
- {
- decRegs.sizeReg = MV_REG_READ(winRegInfo.sizeRegOffs);
- }
- else
- {
- decRegs.sizeReg =0;
- }
-
- if (MV_OK != mvCtrlRegToAddrDec(&decRegs,&(pAddrDecWin->addrWin)))
- {
- mvOsPrintf("mvPexTargetWinGet: mvCtrlRegToAddrDec Failed \n");
- return MV_ERROR;
-
- }
-
- if (decRegs.sizeReg & PXWCR_WIN_EN)
- {
- pAddrDecWin->enable = MV_TRUE;
- }
- else
- {
- pAddrDecWin->enable = MV_FALSE;
-
- }
-
-
- #if 0
- if (-1 == pAddrDecWin->addrWin.size)
- {
- return MV_ERROR;
- }
- #endif
-
-
- /* get target bar */
- if ((decRegs.sizeReg & PXWCR_WIN_BAR_MAP_MASK) == PXWCR_WIN_BAR_MAP_BAR1 )
- {
- pAddrDecWin->targetBar = 1;
- }
- else if ((decRegs.sizeReg & PXWCR_WIN_BAR_MAP_MASK) ==
- PXWCR_WIN_BAR_MAP_BAR2 )
- {
- pAddrDecWin->targetBar = 2;
- }
-
- /* attrib and targetId */
- pAddrDecWin->attrib = (decRegs.sizeReg & PXWCR_ATTRIB_MASK) >>
- PXWCR_ATTRIB_OFFS;
- pAddrDecWin->targetId = (decRegs.sizeReg & PXWCR_TARGET_MASK) >>
- PXWCR_TARGET_OFFS;
-
- targetAttrib.attrib = pAddrDecWin->attrib;
- targetAttrib.targetId = pAddrDecWin->targetId;
-
- pAddrDecWin->target = mvCtrlTargetGet(&targetAttrib);
-
- return MV_OK;
-
-}
-
-
-/*******************************************************************************
-* mvPexTargetWinEnable - Enable/disable a PEX BAR window
-*
-* DESCRIPTION:
-* This function enable/disable a PEX BAR window.
-* if parameter 'enable' == MV_TRUE the routine will enable the
-* window, thus enabling PEX accesses for that BAR (before enabling the
-* window it is tested for overlapping). Otherwise, the window will
-* be disabled.
-*
-* INPUT:
-* pexIf - PEX interface number.
-* bar - BAR to be accessed by slave.
-* enable - Enable/disable parameter.
-*
-* OUTPUT:
-* None.
-*
-* RETURN:
-* MV_BAD_PARAM for bad parameters ,MV_ERROR on error ! otherwise MV_OK
-*
-*******************************************************************************/
-MV_STATUS mvPexTargetWinEnable(MV_U32 pexIf,MV_U32 winNum, MV_BOOL enable)
-{
- PEX_WIN_REG_INFO winRegInfo;
- MV_PEX_DEC_WIN addrDecWin;
-
- /* Parameter checking */
- if(pexIf >= mvCtrlPexMaxIfGet())
- {
- mvOsPrintf("mvPexTargetWinEnable: ERR. Invalid PEX If %d\n", pexIf);
- return MV_BAD_PARAM;
- }
-
- if (winNum >= PEX_MAX_TARGET_WIN)
- {
- mvOsPrintf("mvPexTargetWinEnable ERR. Invalid PEX winNum %d\n", winNum);
- return MV_BAD_PARAM;
-
- }
-
-
- /* get the pex Window registers offsets */
- pexWinRegInfoGet(pexIf,winNum,&winRegInfo);
-
-
- /* if the address windows is disabled , we only disable the appropriare
- pex window and ignore other settings */
-
- if (MV_FALSE == enable)
- {
-
- /* this is not relevant to default and expantion rom
- windows */
- if (winRegInfo.sizeRegOffs)
- {
- if ((MV_PEX_WIN_DEFAULT != winNum)&&
- (MV_PEX_WIN_EXP_ROM != winNum))
- {
- MV_REG_BIT_RESET(winRegInfo.sizeRegOffs, PXWCR_WIN_EN);
- }
- }
-
- }
- else
- {
- if (MV_OK != mvPexTargetWinGet(pexIf,winNum, &addrDecWin))
- {
- mvOsPrintf("mvPexTargetWinEnable: mvPexTargetWinGet Failed\n");
- return MV_ERROR;
- }
-
- /* Check if the requested window overlaps with current windows */
- if (MV_TRUE == pexWinOverlapDetect(pexIf,winNum, &addrDecWin.addrWin))
- {
- mvOsPrintf("mvPexTargetWinEnable: ERR. Target %d overlap\n", winNum);
- return MV_BAD_PARAM;
- }
-
- if (MV_FALSE == pexIsWinWithinBar(pexIf,&addrDecWin.addrWin))
- {
- mvOsPrintf("mvPexTargetWinEnable: Win %d should be in bar boundries\n",
- winNum);
- return MV_BAD_PARAM;
- }
-
-
- /* this is not relevant to default and expantion rom
- windows */
- if (winRegInfo.sizeRegOffs)
- {
- if ((MV_PEX_WIN_DEFAULT != winNum)&&
- (MV_PEX_WIN_EXP_ROM != winNum))
- {
- MV_REG_BIT_SET(winRegInfo.sizeRegOffs, PXWCR_WIN_EN);
- }
- }
-
-
- }
-
- return MV_OK;
-
-}
-
-
-
-/*******************************************************************************
-* mvPexTargetWinRemap - Set PEX to target address window remap.
-*
-* DESCRIPTION:
-* The PEX interface supports remap of the BAR original address window.
-* For each BAR it is possible to define a remap address. For example
-* an address 0x12345678 that hits BAR 0x10 (SDRAM CS[0]) will be modified
-* according to remap register but will also be targeted to the
-* SDRAM CS[0].
-*
-* INPUT:
-* pexIf - PEX interface number.
-* bar - Peripheral target enumerator accessed by slave.
-* pAddrWin - Address window to be checked.
-*
-* OUTPUT:
-* None.
-*
-* RETURN:
-* MV_BAD_PARAM for bad parameters ,MV_ERROR on error ! otherwise MV_OK
-*
-*******************************************************************************/
-MV_STATUS mvPexTargetWinRemap(MV_U32 pexIf, MV_U32 winNum,
- MV_PEX_REMAP_WIN *pAddrWin)
-{
-
- PEX_WIN_REG_INFO winRegInfo;
-
- /* Parameter checking */
- if (pexIf >= mvCtrlPexMaxIfGet())
- {
- mvOsPrintf("mvPexTargetWinRemap: ERR. Invalid PEX interface num %d\n",
- pexIf);
- return MV_BAD_PARAM;
- }
- if (MV_PEX_WIN_DEFAULT == winNum)
- {
- mvOsPrintf("mvPexTargetWinRemap: ERR. Invalid PEX win num %d\n",
- winNum);
- return MV_BAD_PARAM;
-
- }
-
- if (MV_IS_NOT_ALIGN(pAddrWin->addrWin.baseLow, PXWRR_REMAP_ALIGNMENT))
- {
- mvOsPrintf("mvPexTargetWinRemap: Error remap PEX interface %d win %d."\
- "\nAddress 0x%08x is unaligned to size 0x%x.\n",
- pexIf,
- winNum,
- pAddrWin->addrWin.baseLow,
- pAddrWin->addrWin.size);
-
- return MV_ERROR;
- }
-
- pexWinRegInfoGet(pexIf, winNum, &winRegInfo);
-
- /* Set remap low register value */
- MV_REG_WRITE(winRegInfo.remapLowRegOffs, pAddrWin->addrWin.baseLow);
-
- /* Skip base high settings if the BAR has only base low (32-bit) */
- if (0 != winRegInfo.remapHighRegOffs)
- {
- MV_REG_WRITE(winRegInfo.remapHighRegOffs, pAddrWin->addrWin.baseHigh);
- }
-
-
- if (pAddrWin->enable == MV_TRUE)
- {
- MV_REG_BIT_SET(winRegInfo.remapLowRegOffs,PXWRR_REMAP_EN);
- }
- else
- {
- MV_REG_BIT_RESET(winRegInfo.remapLowRegOffs,PXWRR_REMAP_EN);
- }
-
- return MV_OK;
-}
-
-/*******************************************************************************
-* mvPexTargetWinRemapEnable -
-*
-* DESCRIPTION:
-*
-* INPUT:
-*
-* OUTPUT:
-*
-* RETURN:
-* MV_BAD_PARAM for bad parameters ,MV_ERROR on error ! otherwise MV_OK
-*
-*******************************************************************************/
-
-MV_STATUS mvPexTargetWinRemapEnable(MV_U32 pexIf, MV_U32 winNum,
- MV_BOOL enable)
-{
- PEX_WIN_REG_INFO winRegInfo;
-
- /* Parameter checking */
- if (pexIf >= mvCtrlPexMaxIfGet())
- {
- mvOsPrintf("mvPexTargetWinRemap: ERR. Invalid PEX interface num %d\n",
- pexIf);
- return MV_BAD_PARAM;
- }
- if (MV_PEX_WIN_DEFAULT == winNum)
- {
- mvOsPrintf("mvPexTargetWinRemap: ERR. Invalid PEX win num %d\n",
- winNum);
- return MV_BAD_PARAM;
-
- }
-
-
- pexWinRegInfoGet(pexIf, winNum, &winRegInfo);
-
- if (enable == MV_TRUE)
- {
- MV_REG_BIT_SET(winRegInfo.remapLowRegOffs,PXWRR_REMAP_EN);
- }
- else
- {
- MV_REG_BIT_RESET(winRegInfo.remapLowRegOffs,PXWRR_REMAP_EN);
- }
-
- return MV_OK;
-
-}
-
-/*******************************************************************************
-* mvPexBarSet - Set PEX bar address and size
-*
-* DESCRIPTION:
-*
-* INPUT:
-*
-* OUTPUT:
-* None.
-*
-* RETURN:
-* MV_BAD_PARAM for bad parameters ,MV_ERROR on error ! otherwise MV_OK
-*
-*******************************************************************************/
-MV_STATUS mvPexBarSet(MV_U32 pexIf,
- MV_U32 barNum,
- MV_PEX_BAR *pAddrWin)
-{
- MV_U32 regBaseLow;
- MV_U32 regSize,sizeToReg;
-
-
- /* check parameters */
- if(pexIf >= mvCtrlPexMaxIfGet())
- {
- mvOsPrintf("mvPexBarSet: ERR. Invalid PEX interface %d\n", pexIf);
- return MV_BAD_PARAM;
- }
-
- if(barNum >= PEX_MAX_BARS)
- {
- mvOsPrintf("mvPexBarSet: ERR. Invalid bar number %d\n", barNum);
- return MV_BAD_PARAM;
- }
-
-
- if (pAddrWin->addrWin.size == 0)
- {
- mvOsPrintf("mvPexBarSet: Size zero is Illigal\n" );
- return MV_BAD_PARAM;
- }
-
-
- /* Check if the window complies with PEX spec */
- if (MV_TRUE != pexBarIsValid(pAddrWin->addrWin.baseLow,
- pAddrWin->addrWin.size))
- {
- mvOsPrintf("mvPexBarSet: ERR. Target %d window invalid\n", barNum);
- return MV_BAD_PARAM;
- }
-
- /* 2) Check if the requested bar overlaps with current bars */
- if (MV_TRUE == pexBarOverlapDetect(pexIf,barNum, &pAddrWin->addrWin))
- {
- mvOsPrintf("mvPexBarSet: ERR. Target %d overlap\n", barNum);
- return MV_BAD_PARAM;
- }
-
- /* Get size register value according to window size */
- sizeToReg = ctrlSizeToReg(pAddrWin->addrWin.size, PXBCR_BAR_SIZE_ALIGNMENT);
-
- /* Read bar size */
- if (PEX_INTER_REGS_BAR != barNum) /* internal registers have no size */
- {
- regSize = MV_REG_READ(PEX_BAR_CTRL_REG(pexIf,barNum));
-
- /* Size parameter validity check. */
- if (-1 == sizeToReg)
- {
- mvOsPrintf("mvPexBarSet: ERR. Target BAR %d size invalid.\n",barNum);
- return MV_BAD_PARAM;
- }
-
- regSize &= ~PXBCR_BAR_SIZE_MASK;
- regSize |= (sizeToReg << PXBCR_BAR_SIZE_OFFS) ;
-
- MV_REG_WRITE(PEX_BAR_CTRL_REG(pexIf,barNum),regSize);
-
- }
-
- /* set size */
-
-
-
- /* Read base address low */
- regBaseLow = MV_REG_READ(PEX_CFG_DIRECT_ACCESS(pexIf,
- PEX_MV_BAR_BASE(barNum)));
-
- /* clear current base */
- if (PEX_INTER_REGS_BAR == barNum)
- {
- regBaseLow &= ~PXBIR_BASE_MASK;
- regBaseLow |= (pAddrWin->addrWin.baseLow & PXBIR_BASE_MASK);
- }
- else
- {
- regBaseLow &= ~PXBR_BASE_MASK;
- regBaseLow |= (pAddrWin->addrWin.baseLow & PXBR_BASE_MASK);
- }
-
- /* if we had a previous value that contain the bar type (MeM\IO), we want to
- restore it */
- regBaseLow |= PEX_BAR_DEFAULT_ATTRIB;
-
-
-
- /* write base low */
- MV_REG_WRITE(PEX_CFG_DIRECT_ACCESS(pexIf,PEX_MV_BAR_BASE(barNum)),
- regBaseLow);
-
- if (pAddrWin->addrWin.baseHigh != 0)
- {
- /* Read base address high */
- MV_REG_WRITE(PEX_CFG_DIRECT_ACCESS(pexIf,PEX_MV_BAR_BASE_HIGH(barNum)),
- pAddrWin->addrWin.baseHigh);
-
- }
-
- /* lastly enable the Bar */
- if (pAddrWin->enable == MV_TRUE)
- {
- if (PEX_INTER_REGS_BAR != barNum) /* internal registers
- are enabled always */
- {
- MV_REG_BIT_SET(PEX_BAR_CTRL_REG(pexIf,barNum),PXBCR_BAR_EN);
- }
- }
- else if (MV_FALSE == pAddrWin->enable)
- {
- if (PEX_INTER_REGS_BAR != barNum) /* internal registers
- are enabled always */
- {
- MV_REG_BIT_RESET(PEX_BAR_CTRL_REG(pexIf,barNum),PXBCR_BAR_EN);
- }
-
- }
-
-
-
- return MV_OK;
-}
-
-
-/*******************************************************************************
-* mvPexBarGet - Get PEX bar address and size
-*
-* DESCRIPTION:
-*
-* INPUT:
-*
-* OUTPUT:
-* None.
-*
-* RETURN:
-* MV_BAD_PARAM for bad parameters ,MV_ERROR on error ! otherwise MV_OK
-*
-*******************************************************************************/
-
-MV_STATUS mvPexBarGet(MV_U32 pexIf,
- MV_U32 barNum,
- MV_PEX_BAR *pAddrWin)
-{
- /* check parameters */
- if(pexIf >= mvCtrlPexMaxIfGet())
- {
- mvOsPrintf("mvPexBarGet: ERR. Invalid PEX interface %d\n", pexIf);
- return MV_BAD_PARAM;
- }
-
- if(barNum >= PEX_MAX_BARS)
- {
- mvOsPrintf("mvPexBarGet: ERR. Invalid bar number %d\n", barNum);
- return MV_BAD_PARAM;
- }
-
- /* read base low */
- pAddrWin->addrWin.baseLow =
- MV_REG_READ(PEX_CFG_DIRECT_ACCESS(pexIf,PEX_MV_BAR_BASE(barNum)));
-
-
- if (PEX_INTER_REGS_BAR == barNum)
- {
- pAddrWin->addrWin.baseLow &= PXBIR_BASE_MASK;
- }
- else
- {
- pAddrWin->addrWin.baseLow &= PXBR_BASE_MASK;
- }
-
-
- /* read base high */
- pAddrWin->addrWin.baseHigh =
- MV_REG_READ(PEX_CFG_DIRECT_ACCESS(pexIf,PEX_MV_BAR_BASE_HIGH(barNum)));
-
-
- /* Read bar size */
- if (PEX_INTER_REGS_BAR != barNum) /* internal registers have no size */
- {
- pAddrWin->addrWin.size = MV_REG_READ(PEX_BAR_CTRL_REG(pexIf,barNum));
-
- /* check if enable or not */
- if (pAddrWin->addrWin.size & PXBCR_BAR_EN)
- {
- pAddrWin->enable = MV_TRUE;
- }
- else
- {
- pAddrWin->enable = MV_FALSE;
- }
-
- /* now get the size */
- pAddrWin->addrWin.size &= PXBCR_BAR_SIZE_MASK;
- pAddrWin->addrWin.size >>= PXBCR_BAR_SIZE_OFFS;
-
- pAddrWin->addrWin.size = ctrlRegToSize(pAddrWin->addrWin.size,
- PXBCR_BAR_SIZE_ALIGNMENT);
-
- }
- else /* PEX_INTER_REGS_BAR */
- {
- pAddrWin->addrWin.size = INTER_REGS_SIZE;
- pAddrWin->enable = MV_TRUE;
- }
-
-
- return MV_OK;
-}
-
-/*******************************************************************************
-* mvPexBarEnable -
-*
-* DESCRIPTION:
-*
-* INPUT:
-*
-* OUTPUT:
-* None.
-*
-* RETURN:
-* MV_BAD_PARAM for bad parameters ,MV_ERROR on error ! otherwise MV_OK
-*
-*******************************************************************************/
-
-
-MV_STATUS mvPexBarEnable(MV_U32 pexIf, MV_U32 barNum, MV_BOOL enable)
-{
-
- MV_PEX_BAR pexBar;
-
- /* check parameters */
- if(pexIf >= mvCtrlPexMaxIfGet())
- {
- mvOsPrintf("mvPexBarEnable: ERR. Invalid PEX interface %d\n", pexIf);
- return MV_BAD_PARAM;
- }
-
-
- if(barNum >= PEX_MAX_BARS)
- {
- mvOsPrintf("mvPexBarEnable: ERR. Invalid bar number %d\n", barNum);
- return MV_BAD_PARAM;
- }
-
- if (PEX_INTER_REGS_BAR == barNum)
- {
- if (MV_TRUE == enable)
- {
- return MV_OK;
- }
- else
- {
- return MV_ERROR;
- }
- }
-
-
- if (MV_FALSE == enable)
- {
- /* disable bar and quit */
- MV_REG_BIT_RESET(PEX_BAR_CTRL_REG(pexIf,barNum),PXBCR_BAR_EN);
- return MV_OK;
- }
-
- /* else */
-
- if (mvPexBarGet(pexIf,barNum,&pexBar) != MV_OK)
- {
- mvOsPrintf("mvPexBarEnable: mvPexBarGet Failed\n");
- return MV_ERROR;
-
- }
-
- if (MV_TRUE == pexBar.enable)
- {
- /* it is already enabled !!! */
- return MV_OK;
- }
-
- /* else enable the bar*/
-
- pexBar.enable = MV_TRUE;
-
- if (mvPexBarSet(pexIf,barNum,&pexBar) != MV_OK)
- {
- mvOsPrintf("mvPexBarEnable: mvPexBarSet Failed\n");
- return MV_ERROR;
-
- }
-
- return MV_OK;
-}
-
-
-/*******************************************************************************
-* pexWinOverlapDetect - Detect address windows overlapping
-*
-* DESCRIPTION:
-* This function detects address window overlapping of a given address
-* window in PEX BARs.
-*
-* INPUT:
-* pAddrWin - Address window to be checked.
-* bar - BAR to be accessed by slave.
-*
-* OUTPUT:
-* None.
-*
-* RETURN:
-* MV_TRUE if the given address window overlap current address
-* decode map, MV_FALSE otherwise.
-*
-*******************************************************************************/
-static MV_BOOL pexWinOverlapDetect(MV_U32 pexIf,
- MV_U32 winNum,
- MV_ADDR_WIN *pAddrWin)
-{
- MV_U32 win;
- MV_PEX_DEC_WIN addrDecWin;
-
-
- for(win = 0; win < PEX_MAX_TARGET_WIN -2 ; win++)
- {
- /* don't check our target or illegal targets */
- if (winNum == win)
- {
- continue;
- }
-
- /* Get window parameters */
- if (MV_OK != mvPexTargetWinGet(pexIf, win, &addrDecWin))
- {
- mvOsPrintf("pexWinOverlapDetect: ERR. TargetWinGet failed win=%x\n",
- win);
- return MV_ERROR;
- }
-
- /* Do not check disabled windows */
- if (MV_FALSE == addrDecWin.enable)
- {
- continue;
- }
-
-
- if(MV_TRUE == ctrlWinOverlapTest(pAddrWin, &addrDecWin.addrWin))
- {
- mvOsPrintf("pexWinOverlapDetect: winNum %d overlap current %d\n",
- winNum, win);
- return MV_TRUE;
- }
- }
-
- return MV_FALSE;
-}
-
-/*******************************************************************************
-* pexIsWinWithinBar - Detect if address is within PEX bar boundries
-*
-* DESCRIPTION:
-*
-* INPUT:
-*
-* OUTPUT:
-* None.
-*
-* RETURN:
-* MV_TRUE if the given address window overlap current address
-* decode map, MV_FALSE otherwise.
-*
-*******************************************************************************/
-static MV_BOOL pexIsWinWithinBar(MV_U32 pexIf,
- MV_ADDR_WIN *pAddrWin)
-{
- MV_U32 bar;
- MV_PEX_BAR addrDecWin;
-
- for(bar = 0; bar < PEX_MAX_BARS; bar++)
- {
-
- /* Get window parameters */
- if (MV_OK != mvPexBarGet(pexIf, bar, &addrDecWin))
- {
- mvOsPrintf("pexIsWinWithinBar: ERR. mvPexBarGet failed\n");
- return MV_ERROR;
- }
-
- /* Do not check disabled bars */
- if (MV_FALSE == addrDecWin.enable)
- {
- continue;
- }
-
-
- if(MV_TRUE == ctrlWinWithinWinTest(pAddrWin, &addrDecWin.addrWin))
- {
- return MV_TRUE;
- }
- }
-
- return MV_FALSE;
-
-}
-
-/*******************************************************************************
-* pexBarOverlapDetect - Detect address windows overlapping
-*
-* DESCRIPTION:
-* This function detects address window overlapping of a given address
-* window in PEX BARs.
-*
-* INPUT:
-* pAddrWin - Address window to be checked.
-* bar - BAR to be accessed by slave.
-*
-* OUTPUT:
-* None.
-*
-* RETURN:
-* MV_TRUE if the given address window overlap current address
-* decode map, MV_FALSE otherwise.
-*
-*******************************************************************************/
-static MV_BOOL pexBarOverlapDetect(MV_U32 pexIf,
- MV_U32 barNum,
- MV_ADDR_WIN *pAddrWin)
-{
- MV_U32 bar;
- MV_PEX_BAR barDecWin;
-
-
- for(bar = 0; bar < PEX_MAX_BARS; bar++)
- {
- /* don't check our target or illegal targets */
- if (barNum == bar)
- {
- continue;
- }
-
- /* Get window parameters */
- if (MV_OK != mvPexBarGet(pexIf, bar, &barDecWin))
- {
- mvOsPrintf("pexBarOverlapDetect: ERR. TargetWinGet failed\n");
- return MV_ERROR;
- }
-
- /* don'nt check disabled bars */
- if (barDecWin.enable == MV_FALSE)
- {
- continue;
- }
-
-
- if(MV_TRUE == ctrlWinOverlapTest(pAddrWin, &barDecWin.addrWin))
- {
- mvOsPrintf("pexBarOverlapDetect: winNum %d overlap current %d\n",
- barNum, bar);
- return MV_TRUE;
- }
- }
-
- return MV_FALSE;
-}
-
-/*******************************************************************************
-* pexBarIsValid - Check if the given address window is valid
-*
-* DESCRIPTION:
-* PEX spec restrict BAR base to be aligned to BAR size.
-* This function checks if the given address window is valid.
-*
-* INPUT:
-* baseLow - 32bit low base address.
-* size - Window size.
-*
-* OUTPUT:
-* None.
-*
-* RETURN:
-* MV_TRUE if the address window is valid, MV_FALSE otherwise.
-*
-*******************************************************************************/
-static MV_STATUS pexBarIsValid(MV_U32 baseLow, MV_U32 size)
-{
-
- /* PCI spec restrict BAR base to be aligned to BAR size */
- if(MV_IS_NOT_ALIGN(baseLow, size))
- {
- return MV_ERROR;
- }
- else
- {
- return MV_TRUE;
- }
-
- return MV_TRUE;
-}
-
-/*******************************************************************************
-* pexBarRegInfoGet - Get BAR register information
-*
-* DESCRIPTION:
-* PEX BARs registers offsets are inconsecutive.
-* This function gets a PEX BAR register information like register offsets
-* and function location of the BAR.
-*
-* INPUT:
-* pexIf - PEX interface number.
-* bar - The PEX BAR in question.
-*
-* OUTPUT:
-* pBarRegInfo - BAR register info struct.
-*
-* RETURN:
-* MV_BAD_PARAM when bad parameters ,MV_ERROR on error ,othewise MV_OK
-*
-*******************************************************************************/
-static MV_STATUS pexWinRegInfoGet(MV_U32 pexIf,
- MV_U32 winNum,
- PEX_WIN_REG_INFO *pWinRegInfo)
-{
-
- if ((winNum >= 0)&&(winNum <=3))
- {
- pWinRegInfo->baseLowRegOffs = PEX_WIN0_3_BASE_REG(pexIf,winNum);
- pWinRegInfo->baseHighRegOffs = 0;
- pWinRegInfo->sizeRegOffs = PEX_WIN0_3_CTRL_REG(pexIf,winNum);
- pWinRegInfo->remapLowRegOffs = PEX_WIN0_3_REMAP_REG(pexIf,winNum);
- pWinRegInfo->remapHighRegOffs = 0;
- }
- else if ((winNum >= 4)&&(winNum <=5))
- {
- pWinRegInfo->baseLowRegOffs = PEX_WIN4_5_BASE_REG(pexIf,winNum);
- pWinRegInfo->baseHighRegOffs = 0;
- pWinRegInfo->sizeRegOffs = PEX_WIN4_5_CTRL_REG(pexIf,winNum);
- pWinRegInfo->remapLowRegOffs = PEX_WIN4_5_REMAP_REG(pexIf,winNum);
- pWinRegInfo->remapHighRegOffs = PEX_WIN4_5_REMAP_HIGH_REG(pexIf,winNum);
-
- }
- else if (MV_PEX_WIN_DEFAULT == winNum)
- {
- pWinRegInfo->baseLowRegOffs = 0;
- pWinRegInfo->baseHighRegOffs = 0;
- pWinRegInfo->sizeRegOffs = PEX_WIN_DEFAULT_CTRL_REG(pexIf);
- pWinRegInfo->remapLowRegOffs = 0;
- pWinRegInfo->remapHighRegOffs = 0;
- }
- else if (MV_PEX_WIN_EXP_ROM == winNum)
- {
- pWinRegInfo->baseLowRegOffs = 0;
- pWinRegInfo->baseHighRegOffs = 0;
- pWinRegInfo->sizeRegOffs = PEX_WIN_EXP_ROM_CTRL_REG(pexIf);
- pWinRegInfo->remapLowRegOffs = PEX_WIN_EXP_ROM_REMAP_REG(pexIf);
- pWinRegInfo->remapHighRegOffs = 0;
-
- }
-
- return MV_OK;
-}
-
-/*******************************************************************************
-* pexBarNameGet - Get the string name of PEX BAR.
-*
-* DESCRIPTION:
-* This function get the string name of PEX BAR.
-*
-* INPUT:
-* bar - PEX bar number.
-*
-* OUTPUT:
-* None.
-*
-* RETURN:
-* pointer to the string name of PEX BAR.
-*
-*******************************************************************************/
-const MV_8* pexBarNameGet( MV_U32 bar )
-{
- switch( bar )
- {
- case PEX_INTER_REGS_BAR:
- return "Internal Regs Bar0....";
- case PEX_DRAM_BAR:
- return "DRAM Bar1.............";
- case PEX_DEVICE_BAR:
- return "Devices Bar2..........";
- default:
- return "Bar unknown";
- }
-}
-/*******************************************************************************
-* mvPexAddrDecShow - Print the PEX address decode map (BARs and windows).
-*
-* DESCRIPTION:
-* This function print the PEX address decode map (BARs and windows).
-*
-* INPUT:
-* None.
-*
-* OUTPUT:
-* None.
-*
-* RETURN:
-* None.
-*
-*******************************************************************************/
-MV_VOID mvPexAddrDecShow(MV_VOID)
-{
- MV_PEX_BAR pexBar;
- MV_PEX_DEC_WIN win;
- MV_U32 pexIf;
- MV_U32 bar,winNum;
-
- for( pexIf = 0; pexIf < mvCtrlPexMaxIfGet(); pexIf++ )
- {
- if (MV_FALSE == mvCtrlPwrClckGet(PEX_UNIT_ID, pexIf)) continue;
- mvOsOutput( "\n" );
- mvOsOutput( "PEX%d:\n", pexIf );
- mvOsOutput( "-----\n" );
-
- mvOsOutput( "\nPex Bars \n\n");
-
- for( bar = 0; bar < PEX_MAX_BARS; bar++ )
- {
- memset( &pexBar, 0, sizeof(MV_PEX_BAR) );
-
- mvOsOutput( "%s ", pexBarNameGet(bar) );
-
- if( mvPexBarGet( pexIf, bar, &pexBar ) == MV_OK )
- {
- if( pexBar.enable )
- {
- mvOsOutput( "base %08x, ", pexBar.addrWin.baseLow );
- mvSizePrint( pexBar.addrWin.size );
- mvOsOutput( "\n" );
- }
- else
- mvOsOutput( "disable\n" );
- }
- }
- mvOsOutput( "\nPex Decode Windows\n\n");
-
- for( winNum = 0; winNum < PEX_MAX_TARGET_WIN - 2; winNum++)
- {
- memset( &win, 0,sizeof(MV_PEX_DEC_WIN) );
-
- mvOsOutput( "win%d - ", winNum );
-
- if ( mvPexTargetWinGet(pexIf,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" );
-
-
- }
- }
-
- memset( &win, 0,sizeof(MV_PEX_DEC_WIN) );
-
- mvOsOutput( "default win - " );
-
- if ( mvPexTargetWinGet(pexIf, MV_PEX_WIN_DEFAULT, &win) == MV_OK)
- {
- mvOsOutput( "%s ",
- mvCtrlTargetNameGet(win.target) );
- mvOsOutput( "\n" );
- }
- memset( &win, 0,sizeof(MV_PEX_DEC_WIN) );
-
- mvOsOutput( "Expansion ROM - " );
-
- if ( mvPexTargetWinGet(pexIf, MV_PEX_WIN_EXP_ROM, &win) == MV_OK)
- {
- mvOsOutput( "%s ",
- mvCtrlTargetNameGet(win.target) );
- mvOsOutput( "\n" );
- }
-
- }
-}
-
-