123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422 |
- /**
- * @file IxFeatureCtrl.c
- *
- * @author Intel Corporation
- * @date 29-Jan-2003
- *
- * @brief Feature Control Public API Implementation
- *
- *
- * @par
- * IXP400 SW Release version 2.0
- *
- * -- Copyright Notice --
- *
- * @par
- * Copyright 2001-2005, Intel Corporation.
- * All rights reserved.
- *
- * @par
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 3. Neither the name of the Intel Corporation nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * @par
- * 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.
- *
- * @par
- * -- End of Copyright Notice --
- */
- #include "IxOsal.h"
- #include "IxVersionId.h"
- #include "IxFeatureCtrl.h"
- /* Macro to read from the Feature Control Register */
- #define IX_FEATURE_CTRL_READ(result) \
- do { \
- ixFeatureCtrlExpMap(); \
- (result) = IX_OSAL_READ_LONG(ixFeatureCtrlRegister); \
- } while (0)
- /* Macro to write to the Feature Control Register */
- #define IX_FEATURE_CTRL_WRITE(value) \
- do { \
- ixFeatureCtrlExpMap(); \
- IX_OSAL_WRITE_LONG(ixFeatureCtrlRegister, (value)); \
- } while (0)
- /*
- * This is the offset of the feature register relative to the base of the
- * Expansion Bus Controller MMR.
- */
- #define IX_FEATURE_CTRL_REG_OFFSET (0x00000028)
- /* Boolean to mark the fact that the EXP_CONFIG address space was mapped */
- PRIVATE BOOL ixFeatureCtrlExpCfgRegionMapped = FALSE;
- /* Pointer holding the virtual address of the Feature Control Register */
- PRIVATE VUINT32 *ixFeatureCtrlRegister = NULL;
- /* Place holder to store the software configuration */
- PRIVATE BOOL swConfiguration[IX_FEATURECTRL_SWCONFIG_MAX];
- /* Flag to control swConfiguration[] is initialized once */
- PRIVATE BOOL swConfigurationFlag = FALSE ;
- /* Array containing component mask values */
- #ifdef __ixp42X
- UINT32 componentMask[IX_FEATURECTRL_MAX_COMPONENTS] = {
- (0x1<<IX_FEATURECTRL_RCOMP),
- (0x1<<IX_FEATURECTRL_USB),
- (0x1<<IX_FEATURECTRL_HASH),
- (0x1<<IX_FEATURECTRL_AES),
- (0x1<<IX_FEATURECTRL_DES),
- (0x1<<IX_FEATURECTRL_HDLC),
- (0x1<<IX_FEATURECTRL_AAL),
- (0x1<<IX_FEATURECTRL_HSS),
- (0x1<<IX_FEATURECTRL_UTOPIA),
- (0x1<<IX_FEATURECTRL_ETH0),
- (0x1<<IX_FEATURECTRL_ETH1),
- (0x1<<IX_FEATURECTRL_NPEA),
- (0x1<<IX_FEATURECTRL_NPEB),
- (0x1<<IX_FEATURECTRL_NPEC),
- (0x1<<IX_FEATURECTRL_PCI),
- IX_FEATURECTRL_COMPONENT_NOT_AVAILABLE,
- (0x3<<IX_FEATURECTRL_UTOPIA_PHY_LIMIT),
- (0x1<<IX_FEATURECTRL_UTOPIA_PHY_LIMIT_BIT2),
- IX_FEATURECTRL_COMPONENT_NOT_AVAILABLE,
- IX_FEATURECTRL_COMPONENT_NOT_AVAILABLE,
- IX_FEATURECTRL_COMPONENT_NOT_AVAILABLE,
- IX_FEATURECTRL_COMPONENT_NOT_AVAILABLE,
- IX_FEATURECTRL_COMPONENT_NOT_AVAILABLE
- };
- #elif defined (__ixp46X)
- UINT32 componentMask[IX_FEATURECTRL_MAX_COMPONENTS] = {
- (0x1<<IX_FEATURECTRL_RCOMP),
- (0x1<<IX_FEATURECTRL_USB),
- (0x1<<IX_FEATURECTRL_HASH),
- (0x1<<IX_FEATURECTRL_AES),
- (0x1<<IX_FEATURECTRL_DES),
- (0x1<<IX_FEATURECTRL_HDLC),
- IX_FEATURECTRL_COMPONENT_ALWAYS_AVAILABLE, /* AAL component is always on */
- (0x1<<IX_FEATURECTRL_HSS),
- (0x1<<IX_FEATURECTRL_UTOPIA),
- (0x1<<IX_FEATURECTRL_ETH0),
- (0x1<<IX_FEATURECTRL_ETH1),
- (0x1<<IX_FEATURECTRL_NPEA),
- (0x1<<IX_FEATURECTRL_NPEB),
- (0x1<<IX_FEATURECTRL_NPEC),
- (0x1<<IX_FEATURECTRL_PCI),
- (0x1<<IX_FEATURECTRL_ECC_TIMESYNC),
- (0x3<<IX_FEATURECTRL_UTOPIA_PHY_LIMIT),
- (0x1<<IX_FEATURECTRL_UTOPIA_PHY_LIMIT_BIT2), /* NOT TO BE USED */
- (0x1<<IX_FEATURECTRL_USB_HOST_CONTROLLER),
- (0x1<<IX_FEATURECTRL_NPEA_ETH),
- (0x1<<IX_FEATURECTRL_NPEB_ETH),
- (0x1<<IX_FEATURECTRL_RSA),
- (0x3<<IX_FEATURECTRL_XSCALE_MAX_FREQ),
- (0x1<<IX_FEATURECTRL_XSCALE_MAX_FREQ_BIT2)
- };
- #endif /* __ixp42X */
- /**
- * Forward declaration
- */
- PRIVATE
- void ixFeatureCtrlExpMap(void);
- PRIVATE
- void ixFeatureCtrlSwConfigurationInit(void);
- /**
- * Function to map EXP_CONFIG space
- */
- PRIVATE
- void ixFeatureCtrlExpMap(void)
- {
- UINT32 expCfgBaseAddress = 0;
- /* If the EXP Configuration space has already been mapped then
- * return */
- if (ixFeatureCtrlExpCfgRegionMapped == TRUE)
- {
- return;
- }
- /* Map (get virtual address) for the EXP_CONFIG space */
- expCfgBaseAddress = (UINT32)
- (IX_OSAL_MEM_MAP(IX_OSAL_IXP400_EXP_BUS_REGS_PHYS_BASE,
- IX_OSAL_IXP400_EXP_REG_MAP_SIZE));
- /* Assert that the mapping operation succeeded */
- IX_OSAL_ASSERT(expCfgBaseAddress);
- /* Set the address of the Feature register */
- ixFeatureCtrlRegister =
- (VUINT32 *) (expCfgBaseAddress + IX_FEATURE_CTRL_REG_OFFSET);
- /* Mark the fact that the EXP_CONFIG space has already been mapped */
- ixFeatureCtrlExpCfgRegionMapped = TRUE;
- }
- /**
- * Function definition: ixFeatureCtrlSwConfigurationInit
- * This function will only initialize software configuration once.
- */
- PRIVATE void ixFeatureCtrlSwConfigurationInit(void)
- {
- UINT32 i;
- if (FALSE == swConfigurationFlag)
- {
- for (i=0; i<IX_FEATURECTRL_SWCONFIG_MAX ; i++)
- {
- /* By default, all software configuration are enabled */
- swConfiguration[i]= TRUE ;
- }
- /*Make sure this function only initializes swConfiguration[] once*/
- swConfigurationFlag = TRUE ;
- }
- }
- /**
- * Function definition: ixFeatureCtrlRead
- */
- IxFeatureCtrlReg
- ixFeatureCtrlRead (void)
- {
- IxFeatureCtrlReg result;
- #if CPU!=SIMSPARCSOLARIS
- /* Read the feature control register */
- IX_FEATURE_CTRL_READ(result);
- return result;
- #else
- /* Return an invalid value for VxWorks simulation */
- result = 0xFFFFFFFF;
- return result;
- #endif
- }
- /**
- * Function definition: ixFeatureCtrlWrite
- */
- void
- ixFeatureCtrlWrite (IxFeatureCtrlReg expUnitReg)
- {
- #if CPU!=SIMSPARCSOLARIS
- /* Write value to feature control register */
- IX_FEATURE_CTRL_WRITE(expUnitReg);
- #endif
- }
- /**
- * Function definition: ixFeatureCtrlHwCapabilityRead
- */
- IxFeatureCtrlReg
- ixFeatureCtrlHwCapabilityRead (void)
- {
- IxFeatureCtrlReg currentReg, hwCapability;
-
- /* Capture a copy of feature control register */
- currentReg = ixFeatureCtrlRead();
- /* Try to enable all hardware components.
- * Only software disable hardware can be enabled again */
- ixFeatureCtrlWrite(0);
-
- /* Read feature control register to know the hardware capability. */
- hwCapability = ixFeatureCtrlRead();
-
- /* Restore initial feature control value */
- ixFeatureCtrlWrite(currentReg);
- /* return Hardware Capability */
- return hwCapability;
- }
- /**
- * Function definition: ixFeatureCtrlComponentCheck
- */
- IX_STATUS
- ixFeatureCtrlComponentCheck (IxFeatureCtrlComponentType componentType)
- {
- IxFeatureCtrlReg expUnitReg;
- UINT32 mask = 0;
- /* Lookup mask of component */
- mask=componentMask[componentType];
- /* Check if mask is available or not */
- if(IX_FEATURECTRL_COMPONENT_NOT_AVAILABLE == mask)
- {
- return IX_FEATURE_CTRL_COMPONENT_DISABLED;
- }
- if(IX_FEATURECTRL_COMPONENT_ALWAYS_AVAILABLE == mask)
- {
- return IX_FEATURE_CTRL_COMPONENT_ENABLED;
- }
- /* Read feature control register to know current hardware capability. */
- expUnitReg = ixFeatureCtrlRead();
- /* For example: To check for Hashing Coprocessor (bit-2)
- * expUniteg = 0x0010
- * ~expUnitReg = 0x1101
- * componentType = 0x0100
- * ~expUnitReg & componentType = 0x0100 (Not zero)
- */
-
- /*
- * Inverse the bit value because available component is 0 in value
- */
- expUnitReg = ~expUnitReg ;
- if (expUnitReg & mask)
- {
- return (IX_FEATURE_CTRL_COMPONENT_ENABLED);
- }
- else
- {
- return (IX_FEATURE_CTRL_COMPONENT_DISABLED);
- }
- }
- /**
- * Function definition: ixFeatureCtrlProductIdRead
- */
- IxFeatureCtrlProductId
- ixFeatureCtrlProductIdRead ()
- {
- #if CPU!=SIMSPARCSOLARIS
- IxFeatureCtrlProductId pdId = 0 ;
-
- /* Use ARM instruction to move register0 from coprocessor to ARM register */
-
- #ifndef __wince
- __asm("mrc p15, 0, %0, cr0, cr0, 0;" : "=r"(pdId) :);
- #else
-
- #ifndef IN_KERNEL
- BOOL mode;
- #endif
- extern IxFeatureCtrlProductId AsmixFeatureCtrlProductIdRead();
-
- #ifndef IN_KERNEL
- mode = SetKMode(TRUE);
- #endif
- pdId = AsmixFeatureCtrlProductIdRead();
- #ifndef IN_KERNEL
- SetKMode(mode);
- #endif
- #endif
- return (pdId);
- #else
- /* Return an invalid value for VxWorks simulation */
- return 0xffffffff;
- #endif
- }
- /**
- * Function definition: ixFeatureCtrlDeviceRead
- */
- IxFeatureCtrlDeviceId
- ixFeatureCtrlDeviceRead ()
- {
- return ((ixFeatureCtrlProductIdRead() >> IX_FEATURE_CTRL_DEVICE_TYPE_OFFSET)
- & IX_FEATURE_CTRL_DEVICE_TYPE_MASK);
- } /* End function ixFeatureCtrlDeviceRead */
- /**
- * Function definition: ixFeatureCtrlSwConfigurationCheck
- */
- IX_STATUS
- ixFeatureCtrlSwConfigurationCheck (IxFeatureCtrlSwConfig swConfigType)
- {
- if (swConfigType >= IX_FEATURECTRL_SWCONFIG_MAX)
- {
- ixOsalLog(IX_OSAL_LOG_LVL_WARNING,
- IX_OSAL_LOG_DEV_STDOUT,
- "FeatureCtrl: Invalid software configuraiton input.\n",
- 0, 0, 0, 0, 0, 0);
- return IX_FEATURE_CTRL_SWCONFIG_DISABLED;
- }
- /* The function will only initialize once. */
- ixFeatureCtrlSwConfigurationInit();
-
- /* Check and return software configuration */
- return ((swConfiguration[(UINT32)swConfigType] == TRUE) ? IX_FEATURE_CTRL_SWCONFIG_ENABLED: IX_FEATURE_CTRL_SWCONFIG_DISABLED);
- }
- /**
- * Function definition: ixFeatureCtrlSwConfigurationWrite
- */
- void
- ixFeatureCtrlSwConfigurationWrite (IxFeatureCtrlSwConfig swConfigType, BOOL enabled)
- {
- if (swConfigType >= IX_FEATURECTRL_SWCONFIG_MAX)
- {
- ixOsalLog(IX_OSAL_LOG_LVL_WARNING,
- IX_OSAL_LOG_DEV_STDOUT,
- "FeatureCtrl: Invalid software configuraiton input.\n",
- 0, 0, 0, 0, 0, 0);
- return;
- }
- /* The function will only initialize once. */
- ixFeatureCtrlSwConfigurationInit();
-
- /* Write software configuration */
- swConfiguration[(UINT32)swConfigType]=enabled ;
- }
- /**
- * Function definition: ixFeatureCtrlIxp400SwVersionShow
- */
- void
- ixFeatureCtrlIxp400SwVersionShow (void)
- {
- printf ("\nIXP400 Software Release %s %s\n\n", IX_VERSION_ID, IX_VERSION_INTERNAL_ID);
- }
- /**
- * Function definition: ixFeatureCtrlSoftwareBuildGet
- */
- IxFeatureCtrlBuildDevice
- ixFeatureCtrlSoftwareBuildGet (void)
- {
- #ifdef __ixp42X
- return IX_FEATURE_CTRL_SW_BUILD_IXP42X;
- #else
- return IX_FEATURE_CTRL_SW_BUILD_IXP46X;
- #endif
- }
|