Beispiel #1
0
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;
	}
}
Beispiel #2
0
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;
}
Beispiel #3
0
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;
 
}