Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/sh/boards/board-edosk7760.c
26424 views
1
// SPDX-License-Identifier: GPL-2.0+
2
/*
3
* Renesas Europe EDOSK7760 Board Support
4
*
5
* Copyright (C) 2008 SPES Societa' Progettazione Elettronica e Software Ltd.
6
* Author: Luca Santini <[email protected]>
7
*/
8
#include <linux/init.h>
9
#include <linux/types.h>
10
#include <linux/platform_device.h>
11
#include <linux/smc91x.h>
12
#include <linux/interrupt.h>
13
#include <linux/sh_intc.h>
14
#include <linux/i2c.h>
15
#include <linux/mtd/physmap.h>
16
#include <asm/machvec.h>
17
#include <asm/io.h>
18
#include <asm/addrspace.h>
19
#include <asm/delay.h>
20
#include <asm/i2c-sh7760.h>
21
#include <linux/sizes.h>
22
23
/* Bus state controller registers for CS4 area */
24
#define BSC_CS4BCR 0xA4FD0010
25
#define BSC_CS4WCR 0xA4FD0030
26
27
#define SMC_IOBASE 0xA2000000
28
#define SMC_IO_OFFSET 0x300
29
#define SMC_IOADDR (SMC_IOBASE + SMC_IO_OFFSET)
30
31
/* NOR flash */
32
static struct mtd_partition edosk7760_nor_flash_partitions[] = {
33
{
34
.name = "bootloader",
35
.offset = 0,
36
.size = SZ_256K,
37
.mask_flags = MTD_WRITEABLE, /* Read-only */
38
}, {
39
.name = "kernel",
40
.offset = MTDPART_OFS_APPEND,
41
.size = SZ_2M,
42
}, {
43
.name = "fs",
44
.offset = MTDPART_OFS_APPEND,
45
.size = (26 << 20),
46
}, {
47
.name = "other",
48
.offset = MTDPART_OFS_APPEND,
49
.size = MTDPART_SIZ_FULL,
50
},
51
};
52
53
static struct physmap_flash_data edosk7760_nor_flash_data = {
54
.width = 4,
55
.parts = edosk7760_nor_flash_partitions,
56
.nr_parts = ARRAY_SIZE(edosk7760_nor_flash_partitions),
57
};
58
59
static struct resource edosk7760_nor_flash_resources[] = {
60
[0] = {
61
.name = "NOR Flash",
62
.start = 0x00000000,
63
.end = 0x00000000 + SZ_32M - 1,
64
.flags = IORESOURCE_MEM,
65
}
66
};
67
68
static struct platform_device edosk7760_nor_flash_device = {
69
.name = "physmap-flash",
70
.resource = edosk7760_nor_flash_resources,
71
.num_resources = ARRAY_SIZE(edosk7760_nor_flash_resources),
72
.dev = {
73
.platform_data = &edosk7760_nor_flash_data,
74
},
75
};
76
77
/* i2c initialization functions */
78
static struct sh7760_i2c_platdata i2c_pd = {
79
.speed_khz = 400,
80
};
81
82
static struct resource sh7760_i2c1_res[] = {
83
{
84
.start = SH7760_I2C1_MMIO,
85
.end = SH7760_I2C1_MMIOEND,
86
.flags = IORESOURCE_MEM,
87
},{
88
.start = evt2irq(0x9e0),
89
.end = evt2irq(0x9e0),
90
.flags = IORESOURCE_IRQ,
91
},
92
};
93
94
static struct platform_device sh7760_i2c1_dev = {
95
.dev = {
96
.platform_data = &i2c_pd,
97
},
98
99
.name = SH7760_I2C_DEVNAME,
100
.id = 1,
101
.resource = sh7760_i2c1_res,
102
.num_resources = ARRAY_SIZE(sh7760_i2c1_res),
103
};
104
105
static struct resource sh7760_i2c0_res[] = {
106
{
107
.start = SH7760_I2C0_MMIO,
108
.end = SH7760_I2C0_MMIOEND,
109
.flags = IORESOURCE_MEM,
110
}, {
111
.start = evt2irq(0x9c0),
112
.end = evt2irq(0x9c0),
113
.flags = IORESOURCE_IRQ,
114
},
115
};
116
117
static struct platform_device sh7760_i2c0_dev = {
118
.dev = {
119
.platform_data = &i2c_pd,
120
},
121
.name = SH7760_I2C_DEVNAME,
122
.id = 0,
123
.resource = sh7760_i2c0_res,
124
.num_resources = ARRAY_SIZE(sh7760_i2c0_res),
125
};
126
127
/* eth initialization functions */
128
static struct smc91x_platdata smc91x_info = {
129
.flags = SMC91X_USE_16BIT | SMC91X_IO_SHIFT_1 | IORESOURCE_IRQ_LOWLEVEL,
130
};
131
132
static struct resource smc91x_res[] = {
133
[0] = {
134
.start = SMC_IOADDR,
135
.end = SMC_IOADDR + SZ_32 - 1,
136
.flags = IORESOURCE_MEM,
137
},
138
[1] = {
139
.start = evt2irq(0x2a0),
140
.end = evt2irq(0x2a0),
141
.flags = IORESOURCE_IRQ ,
142
}
143
};
144
145
static struct platform_device smc91x_dev = {
146
.name = "smc91x",
147
.id = -1,
148
.num_resources = ARRAY_SIZE(smc91x_res),
149
.resource = smc91x_res,
150
151
.dev = {
152
.platform_data = &smc91x_info,
153
},
154
};
155
156
/* platform init code */
157
static struct platform_device *edosk7760_devices[] __initdata = {
158
&smc91x_dev,
159
&edosk7760_nor_flash_device,
160
&sh7760_i2c0_dev,
161
&sh7760_i2c1_dev,
162
};
163
164
static int __init init_edosk7760_devices(void)
165
{
166
plat_irq_setup_pins(IRQ_MODE_IRQ);
167
168
return platform_add_devices(edosk7760_devices,
169
ARRAY_SIZE(edosk7760_devices));
170
}
171
device_initcall(init_edosk7760_devices);
172
173
/*
174
* The Machine Vector
175
*/
176
struct sh_machine_vector mv_edosk7760 __initmv = {
177
.mv_name = "EDOSK7760",
178
};
179
180