 63dc02bde6
			
		
	
	
	63dc02bde6
	
	
	
		
			
			Everything is using sparseirq these days, so we have no need to arbitrarily size nr_irqs ahead of time. The legacy IRQ pre-allocation likewise has no meaning for us, so that's killed off too. We now depend on nr_irqs expansion by the generic hardirq layer instead. It's also worth noting that the majority of boards had completely bogus values for their nr_irqs relative to their CPU and configurations, so this ends up correcting behaviour for quite a few platforms. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
		
			
				
	
	
		
			83 lines
		
	
	
	
		
			1.9 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
	
		
			1.9 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * linux/arch/sh/boards/lbox/setup.c
 | |
|  *
 | |
|  * Copyright (C) 2007 Nobuhiro Iwamatsu
 | |
|  *
 | |
|  * NTT COMWARE L-BOX RE2 Support
 | |
|  *
 | |
|  * This file is subject to the terms and conditions of the GNU General Public
 | |
|  * License.  See the file "COPYING" in the main directory of this archive
 | |
|  * for more details.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| #include <linux/init.h>
 | |
| #include <linux/platform_device.h>
 | |
| #include <linux/ata_platform.h>
 | |
| #include <asm/machvec.h>
 | |
| #include <asm/addrspace.h>
 | |
| #include <mach/lboxre2.h>
 | |
| #include <asm/io.h>
 | |
| 
 | |
| static struct resource cf_ide_resources[] = {
 | |
| 	[0] = {
 | |
| 		.start  = 0x1f0,
 | |
| 		.end    = 0x1f0 + 8 ,
 | |
| 		.flags  = IORESOURCE_IO,
 | |
| 	},
 | |
| 	[1] = {
 | |
| 		.start  = 0x1f0 + 0x206,
 | |
| 		.end    = 0x1f0 +8 + 0x206 + 8,
 | |
| 		.flags  = IORESOURCE_IO,
 | |
| 	},
 | |
| 	[2] = {
 | |
| 		.start  = IRQ_CF0,
 | |
| 		.flags  = IORESOURCE_IRQ,
 | |
| 	},
 | |
| };
 | |
| 
 | |
| static struct platform_device cf_ide_device  = {
 | |
| 	.name           = "pata_platform",
 | |
| 	.id             = -1,
 | |
| 	.num_resources  = ARRAY_SIZE(cf_ide_resources),
 | |
| 	.resource       = cf_ide_resources,
 | |
| };
 | |
| 
 | |
| static struct platform_device *lboxre2_devices[] __initdata = {
 | |
|        &cf_ide_device,
 | |
| };
 | |
| 
 | |
| static int __init lboxre2_devices_setup(void)
 | |
| {
 | |
| 	u32 cf0_io_base;	/* Boot CF base address */
 | |
| 	pgprot_t prot;
 | |
| 	unsigned long paddrbase, psize;
 | |
| 
 | |
| 	/* open I/O area window */
 | |
| 	paddrbase = virt_to_phys((void*)PA_AREA5_IO);
 | |
| 	psize = PAGE_SIZE;
 | |
| 	prot = PAGE_KERNEL_PCC(1, _PAGE_PCC_IO16);
 | |
| 	cf0_io_base = (u32)ioremap_prot(paddrbase, psize, pgprot_val(prot));
 | |
| 	if (!cf0_io_base) {
 | |
| 		printk(KERN_ERR "%s : can't open CF I/O window!\n" , __func__ );
 | |
| 		return -ENOMEM;
 | |
| 	}
 | |
| 
 | |
| 	cf_ide_resources[0].start += cf0_io_base ;
 | |
| 	cf_ide_resources[0].end   += cf0_io_base ;
 | |
| 	cf_ide_resources[1].start += cf0_io_base ;
 | |
| 	cf_ide_resources[1].end   += cf0_io_base ;
 | |
| 
 | |
| 	return platform_add_devices(lboxre2_devices,
 | |
| 			ARRAY_SIZE(lboxre2_devices));
 | |
| 
 | |
| }
 | |
| device_initcall(lboxre2_devices_setup);
 | |
| 
 | |
| /*
 | |
|  * The Machine Vector
 | |
|  */
 | |
| static struct sh_machine_vector mv_lboxre2 __initmv = {
 | |
| 	.mv_name		= "L-BOX RE2",
 | |
| 	.mv_init_irq		= init_lboxre2_IRQ,
 | |
| };
 |