⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hawkphb.c

📁 VxWorks下 MV2400的BSP源码
💻 C
字号:
/* hawkPhb.c - Hawk PCI-Host Bridge (PHB) chip initialization *//* Copyright 1984-1999 Wind River Systems, Inc. *//* Copyright 1996-1999 Motorola, Inc., All Rights Reserved *//*modification history--------------------01e,09jul99,rhv  Created #defines for Hawk configuration constants in mv2400.h.01d,30jun99,rhv  Incorporating WRS code review changes.01c,04feb99,rhv  Changing PCI arbiter configuration.01b,29jan99,rhv  Splitting PHB init into 2 phases.01a,20jan99,rhv  Created (derived from Mesquite/Sitka ravenI04febnit.c 01a)*//*DESCRIPTIONThe following contains the initialization routinesfor the Hawk PHB, a Host PCI Bridge/Memory Controller used inMotorola's PowerPC based boards..CS   Initialize the HAWK PHB registers.   notes:   1. For the standard vxWorks configuration the CPU to      PCI mapping registers are initialized to the PReP      model with some additions:   CPU Address Range   PCI Address Range      Definition   -----------------   -----------------   -----------------   80000000 BF7FFFFF   00000000 3F7FFFFF   ISA/PCI I/O space   C0000000 FCFFFFFF   00000000 3CFFFFFF   ISA/PCI Mem space w/MPIC   FD000000 FDFFFFFF   00000000 00FFFFFF   ISA/PCI Mem space   FE000000 FE7FFFFF   00000000 007FFFFF   ISA/PCI I/O space   2. These assignments do not include the entire PReP PCI      address space, this is due to the conflicting local      resources of the H/W.   3. When EXTENDED_VME is defined the mapping is as follows:   CPU Address Range   PCI Address Range      Definition   -----------------   ------------------  -----------------   10000000 FBFFFFFF   10000000 FBFFFFFF   VME address space (1)   FC000000 FCFFFFFF   FC000000 FCFFFFFF   MPIC/Reg space   FD000000 FDFFFFFF   FD000000 FDFFFFFF   ISA/PCI Memory space   FE000000 FE7FFFFF   00000000 007FFFFF   ISA/PCI I/O space   Note 1, the starting address is controlled by the macro   VME_A32_MSTR_LOCAL.CE*//* includes *//* defines */#define HAWK_ADDR( reg )        ( HAWK_PHB_BASE_ADRS + reg )#define HAWK_WRITE8( writeAddr, data )  ( *(UINT8 *)(writeAddr) = data )#define HAWK_WRITE16( writeAddr, data )  ( *(UINT16 *)(writeAddr) = data )#define HAWK_WRITE32( writeAddr, data )  ( *(UINT32 *)(writeAddr) = data )/* typedefs *//* globals *//* forward declarations *//* externals */UINT32 sysGetBusSpd(void);/********************************************************************************* hawkPhbInit - initialize the Hawk PHB registers** This function performs the first phase of the Hawk PPC-bus registers and* sets up the CPU->PCI windows.** RETURNS: N/A*/void hawkPhbInit (void)    {    /* make sure MPIC is enabled */    HAWK_WRITE16( HAWK_ADDR(HAWK_MPC_GCSR), HAWK_MPC_GCSR_OPIC_ENA);    EIEIO_SYNC;    /* Configure the hawk 60x and PCI bus arbiters. */    HAWK_WRITE32( HAWK_ADDR(HAWK_MPC_MARB), HAWK_MPC_MARB_VAL);    EIEIO_SYNC;    HAWK_WRITE16( HAWK_ADDR(HAWK_MPC_MEREN), 0 );    EIEIO_SYNC;    HAWK_WRITE8( HAWK_ADDR(HAWK_MPC_MERST), 0xFF );    EIEIO_SYNC;    /* initially set the CPU->PCI attribute registers to disabled */    HAWK_WRITE8( HAWK_ADDR(HAWK_MPC_MSATT0), 0 );    EIEIO_SYNC;    HAWK_WRITE8( HAWK_ADDR(HAWK_MPC_MSATT1), 0 );    EIEIO_SYNC;    HAWK_WRITE8( HAWK_ADDR(HAWK_MPC_MSATT2), 0 );    EIEIO_SYNC;    HAWK_WRITE8( HAWK_ADDR(HAWK_MPC_MSATT3), 0 );    EIEIO_SYNC;    /* Do all of the CPU to PCI window registers */    /* MSADD0, MSOFF0, MSATT0 registers */    HAWK_WRITE32( HAWK_ADDR(HAWK_MPC_MSADD0), 		   ((CPU2PCI_ADDR0_START<<16) | CPU2PCI_ADDR0_END) );    EIEIO_SYNC;    HAWK_WRITE16( HAWK_ADDR(HAWK_MPC_MSOFF0), CPU2PCI_OFFSET0 );    EIEIO_SYNC;    HAWK_WRITE8( HAWK_ADDR(HAWK_MPC_MSATT0), CPU2PCI_MSATT0 );    EIEIO_SYNC;    /* MSADD1, MSOFF1, MSATT1 registers */    HAWK_WRITE32( HAWK_ADDR(HAWK_MPC_MSADD1),		   ((CPU2PCI_ADDR1_START<<16) | CPU2PCI_ADDR1_END) );    EIEIO_SYNC;    HAWK_WRITE16( HAWK_ADDR(HAWK_MPC_MSOFF1), CPU2PCI_OFFSET1 );    EIEIO_SYNC;    HAWK_WRITE8( HAWK_ADDR(HAWK_MPC_MSATT1), CPU2PCI_MSATT1 );    EIEIO_SYNC;    /* MSADD2, MSOFF2, MSATT2 registers */        HAWK_WRITE32( HAWK_ADDR(HAWK_MPC_MSADD2),                   ((CPU2PCI_ADDR2_START<<16) | CPU2PCI_ADDR2_END) );    EIEIO_SYNC;    HAWK_WRITE16( HAWK_ADDR(HAWK_MPC_MSOFF2), CPU2PCI_OFFSET2 );    EIEIO_SYNC;    HAWK_WRITE8( HAWK_ADDR(HAWK_MPC_MSATT2), CPU2PCI_MSATT2 );    EIEIO_SYNC;    /*     * PCI address space 3 registers supports config. space access and     * special cycle generation.  It should be configured for I/O space.     */    HAWK_WRITE32( HAWK_ADDR(HAWK_MPC_MSADD3),                   ((CPU2PCI_ADDR3_START<<16) | CPU2PCI_ADDR3_END) );    EIEIO_SYNC;    HAWK_WRITE16( HAWK_ADDR(HAWK_MPC_MSOFF3), CPU2PCI_OFFSET3 );    EIEIO_SYNC;    HAWK_WRITE8( HAWK_ADDR(HAWK_MPC_MSATT3), CPU2PCI_MSATT3 );    EIEIO_SYNC;    }/********************************************************************************* hawkPhbInit2 - initialize the Hawk PHB registers which require VPD** This function performs the second phase of the Hawk PPC-bus registers.* These registers require information contained in the VPD.** RETURNS: N/A*/void hawkPhbInit2 (void)    {    HAWK_WRITE8( HAWK_ADDR(HAWK_MPC_PADJ),                 ( 256 - (sysGetBusSpd () + 500000)/1000000) );    EIEIO_SYNC;    }/******************************************************************************** hawkInitPhbExt - initialize the extended portion of the Hawk PHB PCI header** This routine initializes the extended portion of the PCI header for the* Motorola Hawk PCI-Host Bridge Controller (PHB).** RETURNS: OK, always**/STATUS hawkInitPhbExt    (    int busNo,          /* bus number */    int deviceNo,       /* device number */    int funcNo          /* function number */    )    {    /*     * Init Hawk's MPIC control register access addresses in I/O and     * memory spaces:     *     * IOSPACE  - 0x00000000  [no access]     * MEMSPACE - 0x3C000000  [MPIC_PCI_BASE_ADRS]     */    pciConfigOutLong (busNo, deviceNo, funcNo, PCI_CFG_BASE_ADDRESS_0,                      0x00000000);    pciConfigOutLong (busNo, deviceNo, funcNo, PCI_CFG_BASE_ADDRESS_1,                      MPIC_PCI_BASE_ADRS);    /*     *  Init Hawk's Slave decoders (range/offset/attributes)     *     *  These decoders map addresses on the PCI bus to the CPU for     *  access to local DRAM.     *     *  Because hardware can read past real memory, it is necessary to disable     *  Read Ahead for the last 64k of physical memory (DRAM).     */    pciConfigOutLong (busNo, deviceNo, funcNo, PCI_CFG_HAWK_PSADD0,                      PCI2CPU_ADDR0_RANGE);    pciConfigOutWord (busNo, deviceNo, funcNo, PCI_CFG_HAWK_PSOFF0,                      PCI2CPU_OFFSET0);    pciConfigOutByte (busNo, deviceNo, funcNo, PCI_CFG_HAWK_PSATT0,                      PCI2CPU_ATT0);    pciConfigOutLong (busNo, deviceNo, funcNo, PCI_CFG_HAWK_PSADD1,                      PCI2CPU_ADDR1_RANGE);    pciConfigOutWord (busNo, deviceNo, funcNo, PCI_CFG_HAWK_PSOFF1,                      PCI2CPU_OFFSET1);    pciConfigOutByte (busNo, deviceNo, funcNo, PCI_CFG_HAWK_PSATT1,                      PCI2CPU_ATT1);    pciConfigOutLong (busNo, deviceNo, funcNo, PCI_CFG_HAWK_PSADD2,                      PCI2CPU_ADDR2_RANGE);    pciConfigOutWord (busNo, deviceNo, funcNo, PCI_CFG_HAWK_PSOFF2,                      PCI2CPU_OFFSET2);    pciConfigOutByte (busNo, deviceNo, funcNo, PCI_CFG_HAWK_PSATT2,                      PCI2CPU_ATT2);    pciConfigOutLong (busNo, deviceNo, funcNo, PCI_CFG_HAWK_PSADD3,                      PCI2CPU_ADDR3_RANGE);    pciConfigOutWord (busNo, deviceNo, funcNo, PCI_CFG_HAWK_PSOFF3,                      PCI2CPU_OFFSET3);    pciConfigOutByte (busNo, deviceNo, funcNo, PCI_CFG_HAWK_PSATT3,                      PCI2CPU_ATT3);    /*     *  Enable Hawk's PCI master capability and MEM space     *  (i.e., enable PCI space decoders).     */    pciConfigOutWord (busNo, deviceNo, funcNo, PCI_CFG_COMMAND,                      PCI_CMD_MEM_ENABLE | PCI_CMD_MASTER_ENABLE);    return(OK);    }/******************************************************************************** hawkErrClr - Clear error conditions in Hawk** This routine clears any existing errors in the Motorola Hawk PCI Host Bridge* Controller.** RETURNS: N/A*/void hawkErrClr (void)    {    /* Clear MPC Error Status register */    sysOutByte ((HAWK_PHB_BASE_ADRS + HAWK_MPC_MERST), HAWK_MPC_MERST_CLR);    /* get and clear Hawk PCI status reg */    pciConfigOutWord (hawkPciBusNo, hawkPciDevNo, hawkPciFuncNo, PCI_CFG_STATUS,                      HAWK_PCI_CFG_STATUS_DPAR | HAWK_PCI_CFG_STATUS_SIGTA |                      HAWK_PCI_CFG_STATUS_RCVTA | HAWK_PCI_CFG_STATUS_RCVMA |                      HAWK_PCI_CFG_STATUS_SIGSE | HAWK_PCI_CFG_STATUS_RCVPE);    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -