int __po_hi_driver_xc4v_fpga_initialize() { int ret; int instance = 0; int pbus = 0; int pdev = 0; int pfun = 0; init_pci (); ret = BSP_pciFindDevice (__PO_HI_DRIVER_XC4V_VENDOR_ID, __PO_HI_DRIVER_XC4V_DEVICE_ID, instance, &pbus, &pdev, &pfun); if (ret != 0) { __DEBUGMSG ("Device not found, return =%d\n"); return 0; } else { __DEBUGMSG ("Device found, bus=0x%x, dev=0x%x, fun=0x%x\n", pbus, pdev, pfun); } pci_read_config_dword(pbus, pdev, pfun, 0x10, &__po_hi_driver_xc4v_bar0); __DEBUGMSG ("Configuration, bar0=0x%x\n", __po_hi_driver_xc4v_bar0); /* * The three lines above are equivalent to the Configure_XC4V * Ada procedure */ __po_hi_driver_xc4v_fpga_set_page0_register (0x80000000); __po_hi_driver_xc4v_fpga_set_grpci_mmap (0x400, 0x40000000); __po_hi_driver_xc4v_fpga_set_page1_register (0x400, 0x40000000); /* * Equivalent to the Configure_IO_Port procedure of Ada */ __po_hi_driver_xc4v_fpga_configure_ioports (); __po_hi_driver_xc4v_drv_addr = __po_hi_driver_xc4v_bar0; return 1; }
int rasta_register(void) { uint32_t bar0, bar1, data; unsigned int *page0 = NULL; unsigned int *apb_base = NULL; int found=0; DBG("Searching for RASTA board ..."); /* Search PCI vendor/device id. */ if (BSP_pciFindDevice(0x1AC8, 0x0010, 0, &bus, &dev, &fun) == 0) { found = 1; } /* Search old PCI vendor/device id. */ if ( (!found) && (BSP_pciFindDevice(0x16E3, 0x0210, 0, &bus, &dev, &fun) == 0) ) { found = 1; } /* Did we find a RASTA board? */ if ( !found ) return -1; DBG(" found it (dev/fun: %d/%d).\n", dev, fun); pci_read_config_dword(bus, dev, fun, 0x10, &bar0); pci_read_config_dword(bus, dev, fun, 0x14, &bar1); page0 = (unsigned int *)(bar0 + 0x400000); *page0 = 0x80000000; /* Point PAGE0 to start of APB */ apb_base = (unsigned int *)(bar0+APB2_OFFSET); /* apb_base[0] = 0x000002ff; apb_base[1] = 0x8a205260; apb_base[2] = 0x00184000; */ /* Configure memory controller */ #ifdef RASTA_SRAM apb_base[0] = 0x000002ff; apb_base[1] = 0x00001260; apb_base[2] = 0x000e8000; #else apb_base[0] = 0x000002ff; apb_base[1] = 0x82206000; apb_base[2] = 0x000e8000; #endif /* Set up rasta irq controller */ irq = (struct irqmp_regs *) (bar0+IRQ_OFFSET); irq->iclear = 0xffff; irq->ilevel = 0; irq->mask[0] = 0xffff & ~(UART0_IRQ|UART1_IRQ|SPW0_IRQ|SPW1_IRQ|SPW2_IRQ|GRCAN_IRQ|BRM_IRQ); /* Configure AT697 ioport bit 7 to input pci irq */ regs->PIO_Direction &= ~(1<<7); regs->PIO_Interrupt |= (0x87<<8); /* level sensitive */ apb_base[0x100] |= 0x40000000; /* Set GRPCI mmap 0x4 */ apb_base[0x104] = 0x40000000; /* 0xA0000000; Point PAGE1 to RAM */ /* set parity error response */ pci_read_config_dword(bus, dev, fun, 0x4, &data); pci_write_config_dword(bus, dev, fun, 0x4, data|0x40); pci_master_enable(bus, dev, fun); /* install PCI interrupt vector */ /* set_vector(pci_interrupt_handler,14+0x10, 1); */ /* install interrupt vector */ set_vector(rasta_interrupt_handler, RASTA_IRQ+0x10, 1); /* Scan AMBA Plug&Play */ /* AMBA MAP bar0 (in CPU) ==> 0x80000000(remote amba address) */ amba_maps[0].size = 0x10000000; amba_maps[0].local_adr = bar0; amba_maps[0].remote_adr = 0x80000000; /* AMBA MAP bar1 (in CPU) ==> 0x40000000(remote amba address) */ amba_maps[1].size = 0x10000000; amba_maps[1].local_adr = bar1; amba_maps[1].remote_adr = 0x40000000; /* Mark end of table */ amba_maps[2].size=0; amba_maps[2].local_adr = 0; amba_maps[2].remote_adr = 0; memset(&abus,0,sizeof(abus)); /* Start AMBA PnP scan at first AHB bus */ ambapp_scan(&abus, bar0 + (AHB1_IOAREA_BASE_ADDR & ~0xf0000000), NULL, &amba_maps[0]); printk("Registering RASTA GRCAN driver\n\r"); /*grhcan_register(bar0 + GRHCAN_OFFSET, bar1);*/ grcan_rasta_int_reg=rasta_interrrupt_register; if ( grcan_rasta_ram_register(&abus,bar1+0x20000) ){ printk("Failed to register RASTA GRCAN driver\n\r"); return -1; } printk("Registering RASTA BRM driver\n\r"); /*brm_register(bar0 + BRM_OFFSET, bar1);*/ /* register the BRM RASTA driver, use 128k on RASTA SRAM... */ b1553brm_rasta_int_reg=rasta_interrrupt_register; if ( b1553brm_rasta_register(&abus,2,0,3,bar1,0x40000000) ){ printk("Failed to register BRM RASTA driver\n"); return -1; } /* provide the spacewire driver with AMBA Plug&Play * info so that it can find the GRSPW cores. */ grspw_rasta_int_reg=rasta_interrrupt_register; if ( grspw_rasta_register(&abus,bar1) ){ printk("Failed to register RASTA GRSPW driver\n\r"); return -1; } /* provide the spacewire driver with AMBA Plug&Play * info so that it can find the GRSPW cores. */ apbuart_rasta_int_reg=rasta_interrrupt_register; if ( apbuart_rasta_register(&abus) ){ printk("Failed to register RASTA APBUART driver\n\r"); return -1; } /* Find GPIO0 address */ if ( rasta_get_gpio(&abus,0,&gpio0,NULL) ){ printk("Failed to get address for RASTA GPIO0\n\r"); return -1; } /* Find GPIO1 address */ if ( rasta_get_gpio(&abus,1,&gpio1,NULL) ){ printk("Failed to get address for RASTA GPIO1\n\r"); return -1; } /* Successfully registered the RASTA board */ return 0; }