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