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

📄 mot85xxpci.c

📁 vxworks MPC8541 BSP
💻 C
字号:
/* mot85xxPci.c - Motorola ads 85xx PCI Bridge functions *//* Copyright 1984-2004 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------01d,28oct04,jln  add PCI2 support01c,04aug03,dtr  Move LAWAR2 to LAWAR3.01b,30jul03,dtr  Fixing some magic numbers and setting PCI snoop.01a,04jul02,dtr  File created.*//* PCI Host Bridge setup File */#include "vxWorks.h"#include "config.h"#include "sysLib.h"#include "drv/pci/pciConfigLib.h"#include "drv/pci/pciIntLib.h"#include "drv/pci/pciAutoConfigLib.h"#include "sysBusPci.h"#include "mot85xxPci.h"#include "m85xxMemc.h"#define MAX_NUM_VECTORS 4UINT32 pciRegRead(UINT32 *adrs);void   pciRegWrite(UINT32 *adrs,UINT32 value);void pciConfigTest(int pciSys);#define PCI_REG_READ  pciRegRead#define PCI_REG_WRITE  pciRegWrite/************************************************************************* *  * mot85xxBridgeInit - This function performs all the initialisation  * required for the Bridge/Interrupts/PCI Bus to function. It does some * low level processor initialisation which might normally be done in  * romInit as it is optional to do use this and shows what the core  * changes required to bring up the bridge. *  * RETURNS : NONE * *//*lint -save -e572*//*lint -save -e550*/void mot85xxBridgeInit()    {      STATUS          result;      volatile UINT32 valRead;      /* Initialise LAWBAR/LAWAR for PCI */      *M85XX_LAWBAR3(CCSBAR) = CPU_PCI_MEM_ADRS >> LAWBAR_ADRS_SHIFT;      *M85XX_LAWAR3(CCSBAR)  = LAWAR_ENABLE | LAWAR_TGTIF_PCI | LAWAR_SIZE_512MB;#ifdef INCLUDE_SECONDARY_PCI      *M85XX_LAWBAR4(CCSBAR) = CPU_PCI_MEM_ADRS2 >> LAWBAR_ADRS_SHIFT;      *M85XX_LAWAR4(CCSBAR)  = LAWAR_ENABLE | LAWAR_TGTIF_PCI2 | LAWAR_SIZE_512MB;      valRead =  *M85XX_LAWAR4(CCSBAR);#else      valRead =  *M85XX_LAWAR3(CCSBAR);#endif /* INCLUDE_SECONDARY_PCI */      WRS_ASM("isync");      /* Set outbound translation window adresses */      sysPciConfigEnable (1);         result = sysPciConfigWrite(0,0,0,				 PCI_CFG_BASE_ADDRESS_0,				 0x4,				 PCI_BRIDGE_PIMMR_BASE_ADRS);      /* for PCI 1 */      PCI_REG_WRITE((UINT32*)(PCI_OUTBOUND_BASE_ADRS_REG0(CCSBAR)),		    (CPU_PCI_MEM_ADRS>>12) & 0xfffff);      PCI_REG_WRITE((UINT32*)(PCI_OUTBOUND_TRANS_ADRS_REG0(CCSBAR)),		    (PCI_MEM_ADRS>>12) & 0xfffff);      PCI_REG_WRITE((UINT32*)(PCI_OUTBOUND_BASE_ADRS_REG1(CCSBAR)),		    (CPU_PCI_MEMIO_ADRS>>12) & 0xfffff);      PCI_REG_WRITE((UINT32*)(PCI_OUTBOUND_TRANS_ADRS_REG1(CCSBAR)),		    (PCI_MEMIO_ADRS>>12) & 0xfffff);      PCI_REG_WRITE((UINT32*)(PCI_OUTBOUND_BASE_ADRS_REG2(CCSBAR)),		    (CPU_PCI_IO_ADRS>>12) & 0xfffff);      PCI_REG_WRITE((UINT32*)(PCI_OUTBOUND_TRANS_ADRS_REG2(CCSBAR)),		    (PCI_IO_ADRS>>12) & 0xfffff);      PCI_REG_WRITE((UINT32*)(PCI_OUTBOUND_ATTR_REG0(CCSBAR)),		    PCI_WINDOW_ENABLE_BIT | PCI_OUT_ATTR_RTT_MEM | \                    PCI_OUT_ATTR_WTT_MEM | PCI_MEM_SIZE_MASK);      PCI_REG_WRITE((UINT32*)(PCI_OUTBOUND_ATTR_REG1(CCSBAR)),		    PCI_WINDOW_ENABLE_BIT |PCI_OUT_ATTR_RTT_MEM | \                    PCI_OUT_ATTR_WTT_MEM | PCI_MEMIO_SIZE_MASK);      PCI_REG_WRITE((UINT32*)(PCI_OUTBOUND_ATTR_REG2(CCSBAR)),		    PCI_WINDOW_ENABLE_BIT |PCI_OUT_ATTR_RTT_IO | \                    PCI_OUT_ATTR_WTT_IO | PCI_IO_SIZE_MASK);      /* Switch on the inbound windows */      PCI_REG_WRITE((UINT32*)(PCI_INBOUND_BASE_ADRS_REG1(CCSBAR)),		    (PCI_MSTR_MEM_BUS>>12) & 0xfffff);      PCI_REG_WRITE((UINT32*)(PCI_INBOUND_TRANS_ADRS_REG1(CCSBAR)),		    (LOCAL_MEM_LOCAL_ADRS>>12) & 0xfffff);			        PCI_REG_WRITE((UINT32*)(PCI_INBOUND_ATTR_REG1(CCSBAR)),		    PCI_WINDOW_ENABLE_BIT | \		    PCI_IN_ATTR_RTT_LM_READ_SNOOP | \                    PCI_IN_ATTR_RTT_LM_WRITE_SNOOP | PCI_IN_ATTR_TGI_LM | 		    PCI_LOCAL_MEM_SIZE_MASK);      PCI_REG_WRITE((UINT32*)(PCI_INBOUND_ATTR_REG2(CCSBAR)),		    PCI_IN_ATTR_RTT_LM_READ_SNOOP | \                    PCI_IN_ATTR_RTT_LM_WRITE_SNOOP | PCI_IN_ATTR_TGI_LM | PCI_LOCAL_MEM_SIZE_MASK);      PCI_REG_WRITE((UINT32*)(PCI_INBOUND_ATTR_REG3(CCSBAR)),		    PCI_IN_ATTR_RTT_LM_READ_SNOOP | \                    PCI_IN_ATTR_RTT_LM_WRITE_SNOOP | PCI_IN_ATTR_TGI_LM | PCI_LOCAL_MEM_SIZE_MASK);      /* configure the bridge as bus master */      result = sysPciConfigWrite(0,0,0,				 COMMAND_REGISTER_OFFSET,				 COMMAND_REGISTER_WIDTH,				 PCI_CMD_IO_ENABLE |				 PCI_CMD_MEM_ENABLE | 				 PCI_CMD_MASTER_ENABLE);      WRS_ASM("sync;eieio");#ifdef INCLUDE_SECONDARY_PCI      sysPciConfigEnable (2);      /* for PCI 2 */      PCI_REG_WRITE((UINT32*)(PCI2_OUTBOUND_BASE_ADRS_REG0(CCSBAR)),		    (CPU_PCI_MEM_ADRS2>>12) & 0xfffff);      PCI_REG_WRITE((UINT32*)(PCI2_OUTBOUND_TRANS_ADRS_REG0(CCSBAR)),		    (PCI_MEM_ADRS2>>12) & 0xfffff);      PCI_REG_WRITE((UINT32*)(PCI2_OUTBOUND_BASE_ADRS_REG1(CCSBAR)),		    (CPU_PCI_MEMIO_ADRS2>>12) & 0xfffff);      PCI_REG_WRITE((UINT32*)(PCI2_OUTBOUND_TRANS_ADRS_REG1(CCSBAR)),		    (PCI_MEMIO_ADRS2>>12) & 0xfffff);      PCI_REG_WRITE((UINT32*)(PCI2_OUTBOUND_BASE_ADRS_REG2(CCSBAR)),		    (CPU_PCI_IO_ADRS2>>12) & 0xfffff);      PCI_REG_WRITE((UINT32*)(PCI2_OUTBOUND_TRANS_ADRS_REG2(CCSBAR)),		    (PCI_IO_ADRS2>>12) & 0xfffff);      PCI_REG_WRITE((UINT32*)(PCI2_OUTBOUND_ATTR_REG0(CCSBAR)),		    PCI_WINDOW_ENABLE_BIT | PCI_OUT_ATTR_RTT_MEM | \                    PCI_OUT_ATTR_WTT_MEM | PCI_MEM_SIZE_MASK);      PCI_REG_WRITE((UINT32*)(PCI2_OUTBOUND_ATTR_REG1(CCSBAR)),		    PCI_WINDOW_ENABLE_BIT |PCI_OUT_ATTR_RTT_MEM | \                    PCI_OUT_ATTR_WTT_MEM | PCI_MEMIO_SIZE_MASK);      PCI_REG_WRITE((UINT32*)(PCI2_OUTBOUND_ATTR_REG2(CCSBAR)),		    PCI_WINDOW_ENABLE_BIT |PCI_OUT_ATTR_RTT_IO | \                    PCI_OUT_ATTR_WTT_IO | PCI_IO_SIZE_MASK);      /* Switch on the inbound windows */      PCI_REG_WRITE((UINT32*)(PCI2_INBOUND_BASE_ADRS_REG1(CCSBAR)),		    (PCI_MSTR_MEM_BUS>>12) & 0xfffff);      PCI_REG_WRITE((UINT32*)(PCI2_INBOUND_TRANS_ADRS_REG1(CCSBAR)),		    (LOCAL_MEM_LOCAL_ADRS>>12) & 0xfffff);			        PCI_REG_WRITE((UINT32*)(PCI2_INBOUND_ATTR_REG1(CCSBAR)),		    PCI_WINDOW_ENABLE_BIT | \		    PCI_IN_ATTR_RTT_LM_READ_SNOOP | \                    PCI_IN_ATTR_RTT_LM_WRITE_SNOOP | PCI_IN_ATTR_TGI_LM | 		    PCI_LOCAL_MEM_SIZE_MASK);      PCI_REG_WRITE((UINT32*)(PCI2_INBOUND_ATTR_REG2(CCSBAR)),		    PCI_IN_ATTR_RTT_LM_READ_SNOOP | \                    PCI_IN_ATTR_RTT_LM_WRITE_SNOOP | PCI_IN_ATTR_TGI_LM | PCI_LOCAL_MEM_SIZE_MASK);      PCI_REG_WRITE((UINT32*)(PCI2_INBOUND_ATTR_REG3(CCSBAR)),		    PCI_IN_ATTR_RTT_LM_READ_SNOOP | \                    PCI_IN_ATTR_RTT_LM_WRITE_SNOOP | PCI_IN_ATTR_TGI_LM | PCI_LOCAL_MEM_SIZE_MASK);      result = sysPciConfigWrite(0,0,0,				 COMMAND_REGISTER_OFFSET,				 COMMAND_REGISTER_WIDTH,				 PCI_CMD_IO_ENABLE |				 PCI_CMD_MEM_ENABLE | 				 PCI_CMD_MASTER_ENABLE);      WRS_ASM("sync;eieio");      /* change to default PCI system 1 */      sysPciConfigEnable (1);#endif /* INCLUDE_SECONDARY_PCI */    }/*lint -restore*//*lint -restore*//******************************************************** * pciRegWrite - write to memeory-map PCI registers * * This function write ATMU registers for PCI *  * RETURN: N/A */ void pciRegWrite(UINT32 *adrs,UINT32 value)    {    *adrs = value;    WRS_ASM("sync;eieio");    }/******************************************************** * pciRegRead - read from memeory-map PCI registers * * This function read ATMU registers for PCI *  * RETURN: N/A */UINT32 pciRegRead(UINT32 *adrs)    {    return (*adrs);    }/******************************************************** * pciConfigTest - dump on-chip PCI configuration header * * This function print out PCI configuration header *  * RETURN: N/A */void pciConfigTest    (    int pciSys    )    {    int loop;    UINT32 var;    if (pciSys == 1)        sysPciConfigEnable (1);    else        sysPciConfigEnable (2);    for(loop = 0; loop < 0x40; loop += 4)        {        sysPciConfigRead(0,0,0,loop,0x4,&var);        printf("Word %d Value %x\n",loop,var);        }    }

⌨️ 快捷键说明

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