1 /*
2  * linux/arch/sh/boards/lbox/setup.c
3  *
4  * Copyright (C) 2007 Nobuhiro Iwamatsu
5  *
6  * NTT COMWARE L-BOX RE2 Support
7  *
8  * This file is subject to the terms and conditions of the GNU General Public
9  * License.  See the file "COPYING" in the main directory of this archive
10  * for more details.
11  *
12  */
13 
14 #include <linux/init.h>
15 #include <linux/platform_device.h>
16 #include <linux/ata_platform.h>
17 #include <asm/machvec.h>
18 #include <asm/addrspace.h>
19 #include <mach/lboxre2.h>
20 #include <asm/io.h>
21 
22 static struct resource cf_ide_resources[] = {
23 	[0] = {
24 		.start  = 0x1f0,
25 		.end    = 0x1f0 + 8 ,
26 		.flags  = IORESOURCE_IO,
27 	},
28 	[1] = {
29 		.start  = 0x1f0 + 0x206,
30 		.end    = 0x1f0 +8 + 0x206 + 8,
31 		.flags  = IORESOURCE_IO,
32 	},
33 	[2] = {
34 		.start  = IRQ_CF0,
35 		.flags  = IORESOURCE_IRQ,
36 	},
37 };
38 
39 static struct platform_device cf_ide_device  = {
40 	.name           = "pata_platform",
41 	.id             = -1,
42 	.num_resources  = ARRAY_SIZE(cf_ide_resources),
43 	.resource       = cf_ide_resources,
44 };
45 
46 static struct platform_device *lboxre2_devices[] __initdata = {
47        &cf_ide_device,
48 };
49 
50 static int __init lboxre2_devices_setup(void)
51 {
52 	u32 cf0_io_base;	/* Boot CF base address */
53 	pgprot_t prot;
54 	unsigned long paddrbase, psize;
55 
56 	/* open I/O area window */
57 	paddrbase = virt_to_phys((void*)PA_AREA5_IO);
58 	psize = PAGE_SIZE;
59 	prot = PAGE_KERNEL_PCC(1, _PAGE_PCC_IO16);
60 	cf0_io_base = (u32)ioremap_prot(paddrbase, psize, pgprot_val(prot));
61 	if (!cf0_io_base) {
62 		printk(KERN_ERR "%s : can't open CF I/O window!\n" , __func__ );
63 		return -ENOMEM;
64 	}
65 
66 	cf_ide_resources[0].start += cf0_io_base ;
67 	cf_ide_resources[0].end   += cf0_io_base ;
68 	cf_ide_resources[1].start += cf0_io_base ;
69 	cf_ide_resources[1].end   += cf0_io_base ;
70 
71 	return platform_add_devices(lboxre2_devices,
72 			ARRAY_SIZE(lboxre2_devices));
73 
74 }
75 device_initcall(lboxre2_devices_setup);
76 
77 /*
78  * The Machine Vector
79  */
80 static struct sh_machine_vector mv_lboxre2 __initmv = {
81 	.mv_name		= "L-BOX RE2",
82 	.mv_nr_irqs		= 72,
83 	.mv_init_irq		= init_lboxre2_IRQ,
84 };
85