Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/sh/boards/board-sh2007.c
10817 views
1
/*
2
* SH-2007 board support.
3
*
4
* Copyright (C) 2003, 2004 SUGIOKA Toshinobu
5
* Copyright (C) 2010 Hitoshi Mitake <[email protected]>
6
*/
7
#include <linux/init.h>
8
#include <linux/irq.h>
9
#include <linux/smsc911x.h>
10
#include <linux/platform_device.h>
11
#include <linux/ata_platform.h>
12
#include <linux/io.h>
13
#include <asm/machvec.h>
14
#include <mach/sh2007.h>
15
16
struct smsc911x_platform_config smc911x_info = {
17
.flags = SMSC911X_USE_32BIT,
18
.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
19
.irq_type = SMSC911X_IRQ_TYPE_PUSH_PULL,
20
};
21
22
static struct resource smsc9118_0_resources[] = {
23
[0] = {
24
.start = SMC0_BASE,
25
.end = SMC0_BASE + 0xff,
26
.flags = IORESOURCE_MEM,
27
},
28
[1] = {
29
.start = evt2irq(0x240),
30
.end = evt2irq(0x240),
31
.flags = IORESOURCE_IRQ,
32
}
33
};
34
35
static struct resource smsc9118_1_resources[] = {
36
[0] = {
37
.start = SMC1_BASE,
38
.end = SMC1_BASE + 0xff,
39
.flags = IORESOURCE_MEM,
40
},
41
[1] = {
42
.start = evt2irq(0x280),
43
.end = evt2irq(0x280),
44
.flags = IORESOURCE_IRQ,
45
}
46
};
47
48
static struct platform_device smsc9118_0_device = {
49
.name = "smsc911x",
50
.id = 0,
51
.num_resources = ARRAY_SIZE(smsc9118_0_resources),
52
.resource = smsc9118_0_resources,
53
.dev = {
54
.platform_data = &smc911x_info,
55
},
56
};
57
58
static struct platform_device smsc9118_1_device = {
59
.name = "smsc911x",
60
.id = 1,
61
.num_resources = ARRAY_SIZE(smsc9118_1_resources),
62
.resource = smsc9118_1_resources,
63
.dev = {
64
.platform_data = &smc911x_info,
65
},
66
};
67
68
static struct resource cf_resources[] = {
69
[0] = {
70
.start = CF_BASE + CF_OFFSET,
71
.end = CF_BASE + CF_OFFSET + 0x0f,
72
.flags = IORESOURCE_MEM,
73
},
74
[1] = {
75
.start = CF_BASE + CF_OFFSET + 0x206,
76
.end = CF_BASE + CF_OFFSET + 0x20f,
77
.flags = IORESOURCE_MEM,
78
},
79
[2] = {
80
.start = evt2irq(0x2c0),
81
.end = evt2irq(0x2c0),
82
.flags = IORESOURCE_IRQ,
83
},
84
};
85
86
static struct platform_device cf_device = {
87
.name = "pata_platform",
88
.id = 0,
89
.num_resources = ARRAY_SIZE(cf_resources),
90
.resource = cf_resources,
91
};
92
93
static struct platform_device *sh2007_devices[] __initdata = {
94
&smsc9118_0_device,
95
&smsc9118_1_device,
96
&cf_device,
97
};
98
99
static int __init sh2007_io_init(void)
100
{
101
platform_add_devices(sh2007_devices, ARRAY_SIZE(sh2007_devices));
102
return 0;
103
}
104
subsys_initcall(sh2007_io_init);
105
106
static void __init sh2007_init_irq(void)
107
{
108
plat_irq_setup_pins(IRQ_MODE_IRQ);
109
}
110
111
/*
112
* Initialize the board
113
*/
114
static void __init sh2007_setup(char **cmdline_p)
115
{
116
printk(KERN_INFO "SH-2007 Setup...");
117
118
/* setup wait control registers for area 5 */
119
__raw_writel(CS5BCR_D, CS5BCR);
120
__raw_writel(CS5WCR_D, CS5WCR);
121
__raw_writel(CS5PCR_D, CS5PCR);
122
123
printk(KERN_INFO " done.\n");
124
}
125
126
/*
127
* The Machine Vector
128
*/
129
struct sh_machine_vector mv_sh2007 __initmv = {
130
.mv_setup = sh2007_setup,
131
.mv_name = "sh2007",
132
.mv_init_irq = sh2007_init_irq,
133
};
134
135