Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/arm/mach-imx/mach-apf9328.c
10817 views
1
/*
2
* linux/arch/arm/mach-imx/mach-apf9328.c
3
*
4
* Copyright (c) 2005-2011 ARMadeus systems <[email protected]>
5
*
6
* This work is based on mach-scb9328.c which is:
7
* Copyright (c) 2004 Sascha Hauer <[email protected]>
8
* Copyright (c) 2006-2008 Juergen Beisert <[email protected]>
9
*
10
* This program is free software; you can redistribute it and/or modify
11
* it under the terms of the GNU General Public License version 2 as
12
* published by the Free Software Foundation.
13
*
14
*/
15
16
#include <linux/init.h>
17
#include <linux/kernel.h>
18
#include <linux/platform_device.h>
19
#include <linux/mtd/physmap.h>
20
#include <linux/dm9000.h>
21
22
#include <asm/mach-types.h>
23
#include <asm/mach/arch.h>
24
#include <asm/mach/time.h>
25
26
#include <mach/common.h>
27
#include <mach/hardware.h>
28
#include <mach/irqs.h>
29
#include <mach/iomux-mx1.h>
30
31
#include "devices-imx1.h"
32
33
static const int apf9328_pins[] __initconst = {
34
/* UART1 */
35
PC9_PF_UART1_CTS,
36
PC10_PF_UART1_RTS,
37
PC11_PF_UART1_TXD,
38
PC12_PF_UART1_RXD,
39
/* UART2 */
40
PB28_PF_UART2_CTS,
41
PB29_PF_UART2_RTS,
42
PB30_PF_UART2_TXD,
43
PB31_PF_UART2_RXD,
44
};
45
46
/*
47
* The APF9328 can have up to 32MB NOR Flash
48
*/
49
static struct resource flash_resource = {
50
.start = MX1_CS0_PHYS,
51
.end = MX1_CS0_PHYS + SZ_32M - 1,
52
.flags = IORESOURCE_MEM,
53
};
54
55
static struct physmap_flash_data apf9328_flash_data = {
56
.width = 2,
57
};
58
59
static struct platform_device apf9328_flash_device = {
60
.name = "physmap-flash",
61
.id = 0,
62
.dev = {
63
.platform_data = &apf9328_flash_data,
64
},
65
.resource = &flash_resource,
66
.num_resources = 1,
67
};
68
69
/*
70
* APF9328 has a DM9000 Ethernet controller
71
*/
72
static struct dm9000_plat_data dm9000_setup = {
73
.flags = DM9000_PLATF_16BITONLY
74
};
75
76
static struct resource dm9000_resources[] = {
77
{
78
.start = MX1_CS4_PHYS + 0x00C00000,
79
.end = MX1_CS4_PHYS + 0x00C00001,
80
.flags = IORESOURCE_MEM,
81
}, {
82
.start = MX1_CS4_PHYS + 0x00C00002,
83
.end = MX1_CS4_PHYS + 0x00C00003,
84
.flags = IORESOURCE_MEM,
85
}, {
86
.start = IRQ_GPIOB(14),
87
.end = IRQ_GPIOB(14),
88
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
89
},
90
};
91
92
static struct platform_device dm9000x_device = {
93
.name = "dm9000",
94
.id = 0,
95
.num_resources = ARRAY_SIZE(dm9000_resources),
96
.resource = dm9000_resources,
97
.dev = {
98
.platform_data = &dm9000_setup,
99
}
100
};
101
102
/* --- SERIAL RESSOURCE --- */
103
static const struct imxuart_platform_data uart0_pdata __initconst = {
104
.flags = 0,
105
};
106
107
static const struct imxuart_platform_data uart1_pdata __initconst = {
108
.flags = IMXUART_HAVE_RTSCTS,
109
};
110
111
static struct platform_device *devices[] __initdata = {
112
&apf9328_flash_device,
113
&dm9000x_device,
114
};
115
116
static void __init apf9328_init(void)
117
{
118
mxc_gpio_setup_multiple_pins(apf9328_pins,
119
ARRAY_SIZE(apf9328_pins),
120
"APF9328");
121
122
imx1_add_imx_uart0(&uart0_pdata);
123
imx1_add_imx_uart1(&uart1_pdata);
124
125
platform_add_devices(devices, ARRAY_SIZE(devices));
126
}
127
128
static void __init apf9328_timer_init(void)
129
{
130
mx1_clocks_init(32768);
131
}
132
133
static struct sys_timer apf9328_timer = {
134
.init = apf9328_timer_init,
135
};
136
137
MACHINE_START(APF9328, "Armadeus APF9328")
138
/* Maintainer: Gwenhael Goavec-Merou, ARMadeus Systems */
139
.map_io = mx1_map_io,
140
.init_early = imx1_init_early,
141
.init_irq = mx1_init_irq,
142
.timer = &apf9328_timer,
143
.init_machine = apf9328_init,
144
MACHINE_END
145
146