static void __init _apbuart_init_bases(void) { int i; amba_apb_device dev[8]; if (!_apbuart_init_bases_done) { unsigned long clk = ((unsigned long)(((LEON3_BYPASS_LOAD_PA (&LEON3_GpTimer_Regs->scalar_reload)) + 1))); printk("Attaching grlib apbuart serial drivers (clk:%ihz):\n", (int)clk); leon_ports_nr = amba_get_free_apbslv_devices(VENDOR_GAISLER, GAISLER_APBUART, dev, 8); for (i = 0; i < leon_ports_nr; i++) { leon_ports[i].port.membase = (void *)dev[i].start; leon_ports[i].port.mapbase = dev[i].start; leon_ports[i].port.irq = dev[i].irq; leon_ports[i].port.iotype = SERIAL_IO_MEM; leon_ports[i].port.uartclk = clk * 1000 * 1000; leon_ports[i].port.fifosize = 1; leon_ports[i].port.ops = &leon_pops; leon_ports[i].port.flags = ASYNC_BOOT_AUTOCONF; leon_ports[i].port.line = i; } _apbuart_init_bases_done = 1; } }
con_type_init(unsigned long kmem_start, const char **display_desc) { int i,j; amba_apb_device dev[1]; video_type = VIDEO_TYPE_LEON; *display_desc = "*Leon"; video_mem_base = kmem_start; video_mem_term = kmem_start + ((LEON_VGAMEM_SIZE) * sizeof (short)); printk("Attaching textvga drivers [0x%x-0x%x]: ",video_mem_base,video_mem_term); j = amba_get_free_apbslv_devices (VENDOR_GAISLER, GAISLER_VGA, dev, 1); if (j >= 1) { leon_apbvga = (LEON3_VGA_Regs_Map *)dev[0].start; printk("0x%x\n",leon_apbvga); } else { printk("##! error GAISLER_VGA(0x%x) not found\n",GAISLER_VGA); } return video_mem_term; }
static int __init grusbhc_platform_init(void) { unsigned int i; unsigned int devcnt; struct platform_device *grusbhc_uhci = NULL, *grusbhc_ehci = NULL; amba_apb_device ehc; amba_ahb_device uhc; int retval = 0; struct resource ruhc[2]; struct resource rehc[2]; /* Try to locate GRUSBHC 1.1 controllers */ devcnt = amba_get_number_ahbslv_devices(VENDOR_GAISLER, GAISLER_USBUHC); for (i = 0; i < devcnt; i++) { memset(&ruhc,0,sizeof(ruhc)); if (!amba_get_free_ahbslv_devices( VENDOR_GAISLER,GAISLER_USBUHC, &uhc, 1)) { retval = -ENODEV; break; } ruhc[0].start = uhc.start[0]; ruhc[0].end = uhc.start[0] + GRUSBHC_AHB_SPACE_LENGTH - 1; ruhc[0].flags = IORESOURCE_MEM; ruhc[1].start = ruhc[1].end = uhc.irq; ruhc[1].flags = IORESOURCE_IRQ; grusbhc_uhci = platform_device_register_simple("grusbhc-uhci",i,ruhc,2); grusbhc_uhci->dev.coherent_dma_mask = 0xffffffffUL; grusbhc_uhci->dev.dma_mask = &grusbhc_uhci->dev.coherent_dma_mask; } if (devcnt == 0) { retval = -ENODEV; }; /* Try to locate GRUSBHC 2.0 controllers */ devcnt = amba_get_number_apbslv_devices(VENDOR_GAISLER, GAISLER_USBEHC); for (i = 0; i < devcnt; i++) { memset(&rehc,0,sizeof(rehc)); if (!amba_get_free_apbslv_devices( VENDOR_GAISLER,GAISLER_USBEHC,&ehc,1)) { retval = -ENODEV; break; } rehc[0].start = ehc.start; rehc[0].end = ehc.start + GRUSBHC_APB_SPACE_LENGTH - 1; rehc[0].flags = IORESOURCE_MEM; rehc[1].start = rehc[1].end = ehc.irq; rehc[1].flags = IORESOURCE_IRQ; grusbhc_ehci = platform_device_register_simple("grusbhc-ehci",i,rehc,2); grusbhc_ehci->dev.coherent_dma_mask = 0xffffffffUL; grusbhc_ehci->dev.dma_mask = &grusbhc_ehci->dev.coherent_dma_mask; } if (devcnt == 0 && retval == -ENODEV) { retval = -ENODEV; }; return retval; }