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