Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
dac9e97d
Commit
dac9e97d
authored
Feb 05, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://bk.arm.linux.org.uk/linux-2.6-rmk
into home.osdl.org:/home/torvalds/v2.5/linux
parents
9e81ab3b
617a1bc9
Changes
24
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
736 additions
and
104 deletions
+736
-104
arch/arm/Kconfig
arch/arm/Kconfig
+6
-0
arch/arm/common/amba.c
arch/arm/common/amba.c
+118
-22
arch/arm/kernel/calls.S
arch/arm/kernel/calls.S
+3
-0
arch/arm/kernel/vmlinux.lds.S
arch/arm/kernel/vmlinux.lds.S
+6
-0
arch/arm/mach-integrator/Kconfig
arch/arm/mach-integrator/Kconfig
+9
-0
arch/arm/mach-integrator/Makefile
arch/arm/mach-integrator/Makefile
+1
-0
arch/arm/mach-integrator/core.c
arch/arm/mach-integrator/core.c
+30
-5
arch/arm/mach-integrator/cpu.c
arch/arm/mach-integrator/cpu.c
+22
-15
arch/arm/mach-integrator/impd1.c
arch/arm/mach-integrator/impd1.c
+2
-1
arch/arm/mach-integrator/integrator_ap.c
arch/arm/mach-integrator/integrator_ap.c
+2
-5
arch/arm/mach-integrator/integrator_cp.c
arch/arm/mach-integrator/integrator_cp.c
+367
-0
arch/arm/mach-integrator/leds.c
arch/arm/mach-integrator/leds.c
+5
-11
arch/arm/mach-pxa/lubbock.c
arch/arm/mach-pxa/lubbock.c
+26
-0
arch/arm/mach-sa1100/assabet.c
arch/arm/mach-sa1100/assabet.c
+2
-9
arch/arm/mach-sa1100/neponset.c
arch/arm/mach-sa1100/neponset.c
+26
-0
include/asm-arm/arch-integrator/cm.h
include/asm-arm/arch-integrator/cm.h
+36
-0
include/asm-arm/arch-integrator/irqs.h
include/asm-arm/arch-integrator/irqs.h
+25
-0
include/asm-arm/arch-integrator/system.h
include/asm-arm/arch-integrator/system.h
+2
-7
include/asm-arm/arch-integrator/time.h
include/asm-arm/arch-integrator/time.h
+26
-12
include/asm-arm/hardware/amba.h
include/asm-arm/hardware/amba.h
+11
-1
include/asm-arm/hardware/sa1111.h
include/asm-arm/hardware/sa1111.h
+0
-8
include/asm-arm/pci.h
include/asm-arm/pci.h
+1
-1
include/asm-arm/semaphore.h
include/asm-arm/semaphore.h
+7
-7
include/asm-arm/unistd.h
include/asm-arm/unistd.h
+3
-0
No files found.
arch/arm/Kconfig
View file @
dac9e97d
...
...
@@ -616,6 +616,8 @@ source "drivers/ide/Kconfig"
source "drivers/scsi/Kconfig"
source "drivers/message/fusion/Kconfig"
source "drivers/ieee1394/Kconfig"
source "drivers/message/i2o/Kconfig"
...
...
@@ -629,6 +631,10 @@ source "drivers/input/Kconfig"
source "drivers/char/Kconfig"
source "drivers/i2c/Kconfig"
source "drivers/l3/Kconfig"
source "drivers/media/Kconfig"
source "fs/Kconfig"
...
...
arch/arm/common/amba.c
View file @
dac9e97d
...
...
@@ -12,6 +12,7 @@
#include <linux/device.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/hardware/amba.h>
#include <asm/sizes.h>
...
...
@@ -41,6 +42,23 @@ static int amba_match(struct device *dev, struct device_driver *drv)
return
amba_lookup
(
pcdrv
->
id_table
,
pcdev
)
!=
NULL
;
}
#ifdef CONFIG_HOTPLUG
static
int
amba_hotplug
(
struct
device
*
dev
,
char
**
envp
,
int
nr_env
,
char
*
buf
,
int
bufsz
)
{
struct
amba_device
*
pcdev
=
to_amba_device
(
dev
);
if
(
nr_env
<
2
)
return
-
ENOMEM
;
snprintf
(
buf
,
bufsz
,
"AMBA_ID=%08lx"
,
pcdev
->
periphid
);
*
envp
++
=
buf
;
*
envp
++
=
NULL
;
return
0
;
}
#else
#define amba_hotplug NULL
#endif
static
int
amba_suspend
(
struct
device
*
dev
,
u32
state
)
{
struct
amba_driver
*
drv
=
to_amba_driver
(
dev
->
driver
);
...
...
@@ -68,6 +86,7 @@ static int amba_resume(struct device *dev)
static
struct
bus_type
amba_bustype
=
{
.
name
=
"amba"
,
.
match
=
amba_match
,
.
hotplug
=
amba_hotplug
,
.
suspend
=
amba_suspend
,
.
resume
=
amba_resume
,
};
...
...
@@ -149,27 +168,19 @@ static void amba_device_release(struct device *dev)
kfree
(
d
);
}
static
ssize_t
show_id
(
struct
device
*
_dev
,
char
*
buf
)
{
struct
amba_device
*
dev
=
to_amba_device
(
_dev
);
return
sprintf
(
buf
,
"%08x
\n
"
,
dev
->
periphid
);
}
static
DEVICE_ATTR
(
id
,
S_IRUGO
,
show_id
,
NULL
);
#define amba_attr(name,fmt,arg...) \
static ssize_t show_##name(struct device *_dev, char *buf) \
{ \
struct amba_device *dev = to_amba_device(_dev); \
return sprintf(buf, fmt, arg); \
} \
static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL)
static
ssize_t
show_irq
(
struct
device
*
_dev
,
char
*
buf
)
{
struct
amba_device
*
dev
=
to_amba_device
(
_dev
);
return
sprintf
(
buf
,
"%u
\n
"
,
dev
->
irq
);
}
static
DEVICE_ATTR
(
irq
,
S_IRUGO
,
show_irq
,
NULL
);
static
ssize_t
show_res
(
struct
device
*
_dev
,
char
*
buf
)
{
struct
amba_device
*
dev
=
to_amba_device
(
_dev
);
return
sprintf
(
buf
,
"
\t
%08lx
\t
%08lx
\t
%08lx
\n
"
,
dev
->
res
.
start
,
dev
->
res
.
end
,
dev
->
res
.
flags
);
}
static
DEVICE_ATTR
(
resource
,
S_IRUGO
,
show_res
,
NULL
);
amba_attr
(
id
,
"%08x
\n
"
,
dev
->
periphid
);
amba_attr
(
irq0
,
"%u
\n
"
,
dev
->
irq
[
0
]);
amba_attr
(
irq1
,
"%u
\n
"
,
dev
->
irq
[
1
]);
amba_attr
(
resource
,
"
\t
%08lx
\t
%08lx
\t
%08lx
\n
"
,
dev
->
res
.
start
,
dev
->
res
.
end
,
dev
->
res
.
flags
);
/**
* amba_device_register - register an AMBA device
...
...
@@ -208,10 +219,17 @@ int amba_device_register(struct amba_device *dev, struct resource *parent)
if
(
cid
==
0xb105f00d
)
dev
->
periphid
=
pid
;
ret
=
device_register
(
&
dev
->
dev
);
if
(
dev
->
periphid
)
ret
=
device_register
(
&
dev
->
dev
);
else
ret
=
-
ENODEV
;
if
(
ret
==
0
)
{
device_create_file
(
&
dev
->
dev
,
&
dev_attr_id
);
device_create_file
(
&
dev
->
dev
,
&
dev_attr_irq
);
if
(
dev
->
irq
[
0
]
!=
NO_IRQ
)
device_create_file
(
&
dev
->
dev
,
&
dev_attr_irq0
);
if
(
dev
->
irq
[
1
]
!=
NO_IRQ
)
device_create_file
(
&
dev
->
dev
,
&
dev_attr_irq1
);
device_create_file
(
&
dev
->
dev
,
&
dev_attr_resource
);
}
else
{
out:
...
...
@@ -237,7 +255,85 @@ void amba_device_unregister(struct amba_device *dev)
device_unregister
(
&
dev
->
dev
);
}
struct
find_data
{
struct
amba_device
*
dev
;
struct
device
*
parent
;
const
char
*
busid
;
unsigned
int
id
;
unsigned
int
mask
;
};
static
int
amba_find_match
(
struct
device
*
dev
,
void
*
data
)
{
struct
find_data
*
d
=
data
;
struct
amba_device
*
pcdev
=
to_amba_device
(
dev
);
int
r
;
r
=
(
pcdev
->
periphid
&
d
->
mask
)
==
d
->
id
;
if
(
d
->
parent
)
r
&=
d
->
parent
==
dev
->
parent
;
if
(
d
->
busid
)
r
&=
strcmp
(
dev
->
bus_id
,
d
->
busid
)
==
0
;
if
(
r
)
{
get_device
(
dev
);
d
->
dev
=
pcdev
;
}
return
r
;
}
/**
* amba_find_device - locate an AMBA device given a bus id
* @busid: bus id for device (or NULL)
* @parent: parent device (or NULL)
* @id: peripheral ID (or 0)
* @mask: peripheral ID mask (or 0)
*
* Return the AMBA device corresponding to the supplied parameters.
* If no device matches, returns NULL.
*
* NOTE: When a valid device is found, its refcount is
* incremented, and must be decremented before the returned
* reference.
*/
struct
amba_device
*
amba_find_device
(
const
char
*
busid
,
struct
device
*
parent
,
unsigned
int
id
,
unsigned
int
mask
)
{
struct
find_data
data
;
data
.
dev
=
NULL
;
data
.
parent
=
parent
;
data
.
busid
=
busid
;
data
.
id
=
id
;
data
.
mask
=
mask
;
bus_for_each_dev
(
&
amba_bustype
,
NULL
,
&
data
,
amba_find_match
);
return
data
.
dev
;
}
int
amba_request_regions
(
struct
amba_device
*
dev
,
const
char
*
name
)
{
int
ret
=
0
;
if
(
!
request_mem_region
(
dev
->
res
.
start
,
SZ_4K
,
name
))
ret
=
-
EBUSY
;
return
ret
;
}
void
amba_release_regions
(
struct
amba_device
*
dev
)
{
release_mem_region
(
dev
->
res
.
start
,
SZ_4K
);
}
EXPORT_SYMBOL
(
amba_driver_register
);
EXPORT_SYMBOL
(
amba_driver_unregister
);
EXPORT_SYMBOL
(
amba_device_register
);
EXPORT_SYMBOL
(
amba_device_unregister
);
EXPORT_SYMBOL
(
amba_find_device
);
EXPORT_SYMBOL
(
amba_request_regions
);
EXPORT_SYMBOL
(
amba_release_regions
);
arch/arm/kernel/calls.S
View file @
dac9e97d
...
...
@@ -285,6 +285,9 @@ __syscall_start:
.
long
sys_tgkill
.
long
sys_utimes
/*
270
*/
.
long
sys_fadvise64_64
.
long
sys_pciconfig_iobase
.
long
sys_pciconfig_read
.
long
sys_pciconfig_write
__syscall_end
:
.
rept
NR_syscalls
-
(
__syscall_end
-
__syscall_start
)
/
4
...
...
arch/arm/kernel/vmlinux.lds.S
View file @
dac9e97d
...
...
@@ -102,6 +102,12 @@ SECTIONS
*/
*(.
init.task
)
.
=
ALIGN
(
4096
)
;
__nosave_begin
=
.
;
*(.
data.nosave
)
.
=
ALIGN
(
4096
)
;
__nosave_end
=
.
;
/
*
*
then
the
cacheline
aligned
data
*/
...
...
arch/arm/mach-integrator/Kconfig
View file @
dac9e97d
...
...
@@ -7,6 +7,15 @@ config ARCH_INTEGRATOR_AP
Include support for the ARM(R) Integrator/AP and
Integrator/PP2 platforms.
config ARCH_INTEGRATOR_CP
bool "Support Integrator/CP platform"
select ARCH_CINTEGRATOR
help
Include support for the ARM(R) Integrator CP platform.
config ARCH_CINTEGRATOR
bool
config INTEGRATOR_IMPD1
tristate "Include support for Integrator/IM-PD1"
depends on ARCH_INTEGRATOR_AP
...
...
arch/arm/mach-integrator/Makefile
View file @
dac9e97d
...
...
@@ -6,6 +6,7 @@
obj-y
:=
core.o lm.o time.o
obj-$(CONFIG_ARCH_INTEGRATOR_AP)
+=
integrator_ap.o
obj-$(CONFIG_ARCH_INTEGRATOR_CP)
+=
integrator_cp.o
obj-$(CONFIG_LEDS)
+=
leds.o
obj-$(CONFIG_PCI)
+=
pci_v3.o pci.o
...
...
arch/arm/mach-integrator/core.c
View file @
dac9e97d
...
...
@@ -11,10 +11,13 @@
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/spinlock.h>
#include <asm/hardware.h>
#include <asm/irq.h>
#include <asm/io.h>
#include <asm/hardware/amba.h>
#include <asm/arch/cm.h>
static
struct
amba_device
rtc_device
=
{
.
dev
=
{
...
...
@@ -25,7 +28,7 @@ static struct amba_device rtc_device = {
.
end
=
INTEGRATOR_RTC_BASE
+
SZ_4K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
.
irq
=
IRQ_RTCINT
,
.
irq
=
{
IRQ_RTCINT
,
NO_IRQ
}
,
.
periphid
=
0x00041030
,
};
...
...
@@ -38,7 +41,7 @@ static struct amba_device uart0_device = {
.
end
=
INTEGRATOR_UART0_BASE
+
SZ_4K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
.
irq
=
IRQ_UARTINT0
,
.
irq
=
{
IRQ_UARTINT0
,
NO_IRQ
}
,
.
periphid
=
0x0041010
,
};
...
...
@@ -51,7 +54,7 @@ static struct amba_device uart1_device = {
.
end
=
INTEGRATOR_UART1_BASE
+
SZ_4K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
.
irq
=
IRQ_UARTINT1
,
.
irq
=
{
IRQ_UARTINT1
,
NO_IRQ
}
,
.
periphid
=
0x0041010
,
};
...
...
@@ -64,7 +67,7 @@ static struct amba_device kmi0_device = {
.
end
=
KMI0_BASE
+
SZ_4K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
.
irq
=
IRQ_KMIINT0
,
.
irq
=
{
IRQ_KMIINT0
,
NO_IRQ
}
,
.
periphid
=
0x00041050
,
};
...
...
@@ -77,7 +80,7 @@ static struct amba_device kmi1_device = {
.
end
=
KMI1_BASE
+
SZ_4K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
.
irq
=
IRQ_KMIINT1
,
.
irq
=
{
IRQ_KMIINT1
,
NO_IRQ
}
,
.
periphid
=
0x00041050
,
};
...
...
@@ -102,3 +105,25 @@ static int __init integrator_init(void)
}
arch_initcall
(
integrator_init
);
#define CM_CTRL IO_ADDRESS(INTEGRATOR_HDR_BASE) + INTEGRATOR_HDR_CTRL_OFFSET
static
spinlock_t
cm_lock
;
/**
* cm_control - update the CM_CTRL register.
* @mask: bits to change
* @set: bits to set
*/
void
cm_control
(
u32
mask
,
u32
set
)
{
unsigned
long
flags
;
u32
val
;
spin_lock_irqsave
(
&
cm_lock
,
flags
);
val
=
readl
(
CM_CTRL
)
&
~
mask
;
writel
(
val
|
set
,
CM_CTRL
);
spin_unlock_irqrestore
(
&
cm_lock
,
flags
);
}
EXPORT_SYMBOL
(
cm_control
);
arch/arm/mach-integrator/cpu.c
View file @
dac9e97d
...
...
@@ -22,6 +22,7 @@
#include <asm/hardware.h>
#include <asm/io.h>
#include <asm/mach-types.h>
#include <asm/hardware/icst525.h>
static
struct
cpufreq_driver
integrator_driver
;
...
...
@@ -98,7 +99,12 @@ static int integrator_set_target(struct cpufreq_policy *policy,
/* get current setting */
cm_osc
=
__raw_readl
(
CM_OSC
);
vco
.
s
=
(
cm_osc
>>
8
)
&
7
;
if
(
machine_is_integrator
())
{
vco
.
s
=
(
cm_osc
>>
8
)
&
7
;
}
else
if
(
machine_is_cintegrator
())
{
vco
.
s
=
1
;
}
vco
.
v
=
cm_osc
&
255
;
vco
.
r
=
22
;
freqs
.
old
=
icst525_khz
(
&
cclk_params
,
vco
);
...
...
@@ -107,7 +113,7 @@ static int integrator_set_target(struct cpufreq_policy *policy,
* larger freq in case of CPUFREQ_RELATION_L.
*/
if
(
relation
==
CPUFREQ_RELATION_L
)
target_freq
+=
1
999
;
target_freq
+=
999
;
if
(
target_freq
>
policy
->
max
)
target_freq
=
policy
->
max
;
vco
=
icst525_khz_to_vco
(
&
cclk_params
,
target_freq
);
...
...
@@ -123,8 +129,14 @@ static int integrator_set_target(struct cpufreq_policy *policy,
cpufreq_notify_transition
(
&
freqs
,
CPUFREQ_PRECHANGE
);
cm_osc
=
__raw_readl
(
CM_OSC
);
cm_osc
&=
0xfffff800
;
cm_osc
|=
vco
.
v
|
vco
.
s
<<
8
;
if
(
machine_is_integrator
())
{
cm_osc
&=
0xfffff800
;
cm_osc
|=
vco
.
s
<<
8
;
}
else
if
(
machine_is_cintegrator
())
{
cm_osc
&=
0xffffff00
;
}
cm_osc
|=
vco
.
v
;
__raw_writel
(
0xa05f
,
CM_LOCK
);
__raw_writel
(
cm_osc
,
CM_OSC
);
...
...
@@ -144,7 +156,7 @@ static int integrator_cpufreq_init(struct cpufreq_policy *policy)
{
unsigned
long
cpus_allowed
;
unsigned
int
cpu
=
policy
->
cpu
;
u_int
cm_osc
,
cm_stat
,
mem_freq_khz
;
u_int
cm_osc
;
struct
icst525_vco
vco
;
cpus_allowed
=
current
->
cpus_allowed
;
...
...
@@ -153,18 +165,13 @@ static int integrator_cpufreq_init(struct cpufreq_policy *policy)
BUG_ON
(
cpu
!=
smp_processor_id
());
/* detect memory etc. */
cm_stat
=
__raw_readl
(
CM_STAT
);
cm_osc
=
__raw_readl
(
CM_OSC
);
vco
.
s
=
(
cm_osc
>>
20
)
&
7
;
vco
.
v
=
(
cm_osc
>>
12
)
&
255
;
vco
.
r
=
22
;
mem_freq_khz
=
icst525_khz
(
&
lclk_params
,
vco
)
/
2
;
printk
(
KERN_INFO
"CPU%d: Module id: %d
\n
"
,
cpu
,
cm_stat
&
255
);
printk
(
KERN_INFO
"CPU%d: Memory clock = %d.%03d MHz
\n
"
,
cpu
,
mem_freq_khz
/
1000
,
mem_freq_khz
%
1000
);
vco
.
s
=
(
cm_osc
>>
8
)
&
7
;
if
(
machine_is_integrator
())
{
vco
.
s
=
(
cm_osc
>>
8
)
&
7
;
}
else
if
(
machine_is_cintegrator
())
{
vco
.
s
=
1
;
}
vco
.
v
=
cm_osc
&
255
;
vco
.
r
=
22
;
...
...
arch/arm/mach-integrator/impd1.c
View file @
dac9e97d
...
...
@@ -188,7 +188,8 @@ static int impd1_probe(struct lm_device *dev)
d
->
res
.
start
=
dev
->
resource
.
start
+
idev
->
offset
;
d
->
res
.
end
=
d
->
res
.
start
+
SZ_4K
-
1
;
d
->
res
.
flags
=
IORESOURCE_MEM
;
d
->
irq
=
dev
->
irq
;
d
->
irq
[
0
]
=
dev
->
irq
;
d
->
irq
[
1
]
=
dev
->
irq
;
d
->
periphid
=
idev
->
id
;
ret
=
amba_device_register
(
d
,
&
dev
->
resource
);
...
...
arch/arm/mach-integrator/integrator_ap.c
View file @
dac9e97d
...
...
@@ -251,7 +251,7 @@ static struct platform_device cfi_flash_device = {
.
resource
=
&
cfi_flash_resource
,
};
static
int
__init
ap_init
(
void
)
static
void
__init
ap_init
(
void
)
{
unsigned
long
sc_dec
;
int
i
;
...
...
@@ -279,16 +279,13 @@ static int __init ap_init(void)
lm_device_register
(
lmdev
);
}
return
0
;
}
arch_initcall
(
ap_init
);
MACHINE_START
(
INTEGRATOR
,
"ARM-Integrator"
)
MAINTAINER
(
"ARM Ltd/Deep Blue Solutions Ltd"
)
BOOT_MEM
(
0x00000000
,
0x16000000
,
0xf1600000
)
BOOT_PARAMS
(
0x00000100
)
MAPIO
(
ap_map_io
)
INITIRQ
(
ap_init_irq
)
INIT_MACHINE
(
ap_init
)
MACHINE_END
arch/arm/mach-integrator/integrator_cp.c
0 → 100644
View file @
dac9e97d
/*
* linux/arch/arm/mach-integrator/integrator_cp.c
*
* Copyright (C) 2003 Deep Blue Solutions Ltd
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
*/
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/list.h>
#include <linux/device.h>
#include <linux/slab.h>
#include <linux/string.h>
#include <linux/sysdev.h>
#include <asm/hardware.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/setup.h>
#include <asm/mach-types.h>
#include <asm/hardware/amba.h>
#include <asm/hardware/amba_kmi.h>
#include <asm/arch/lm.h>
#include <asm/mach/arch.h>
#include <asm/mach/flash.h>
#include <asm/mach/irq.h>
#include <asm/mach/mmc.h>
#include <asm/mach/map.h>
#define INTCP_PA_MMC_BASE 0x1c000000
#define INTCP_PA_AACI_BASE 0x1d000000
#define INTCP_PA_FLASH_BASE 0x24000000
#define INTCP_FLASH_SIZE SZ_32M
#define INTCP_VA_CIC_BASE 0xf1000040
#define INTCP_VA_PIC_BASE 0xf1400000
#define INTCP_VA_SIC_BASE 0xfca00000
#define INTCP_PA_ETH_BASE 0xc8000000
#define INTCP_ETH_SIZE 0x10
#define INTCP_VA_CTRL_BASE 0xfcb00000
#define INTCP_FLASHPROG 0x04
#define CINTEGRATOR_FLASHPROG_FLVPPEN (1 << 0)
#define CINTEGRATOR_FLASHPROG_FLWREN (1 << 1)
/*
* Logical Physical
* f1000000 10000000 Core module registers
* f1100000 11000000 System controller registers
* f1200000 12000000 EBI registers
* f1300000 13000000 Counter/Timer
* f1400000 14000000 Interrupt controller
* f1600000 16000000 UART 0
* f1700000 17000000 UART 1
* f1a00000 1a000000 Debug LEDs
* f1b00000 1b000000 GPIO
*/
static
struct
map_desc
intcp_io_desc
[]
__initdata
=
{
{
IO_ADDRESS
(
INTEGRATOR_HDR_BASE
),
INTEGRATOR_HDR_BASE
,
SZ_4K
,
MT_DEVICE
},
{
IO_ADDRESS
(
INTEGRATOR_SC_BASE
),
INTEGRATOR_SC_BASE
,
SZ_4K
,
MT_DEVICE
},
{
IO_ADDRESS
(
INTEGRATOR_EBI_BASE
),
INTEGRATOR_EBI_BASE
,
SZ_4K
,
MT_DEVICE
},
{
IO_ADDRESS
(
INTEGRATOR_CT_BASE
),
INTEGRATOR_CT_BASE
,
SZ_4K
,
MT_DEVICE
},
{
IO_ADDRESS
(
INTEGRATOR_IC_BASE
),
INTEGRATOR_IC_BASE
,
SZ_4K
,
MT_DEVICE
},
{
IO_ADDRESS
(
INTEGRATOR_UART0_BASE
),
INTEGRATOR_UART0_BASE
,
SZ_4K
,
MT_DEVICE
},
{
IO_ADDRESS
(
INTEGRATOR_UART1_BASE
),
INTEGRATOR_UART1_BASE
,
SZ_4K
,
MT_DEVICE
},
{
IO_ADDRESS
(
INTEGRATOR_DBG_BASE
),
INTEGRATOR_DBG_BASE
,
SZ_4K
,
MT_DEVICE
},
{
IO_ADDRESS
(
INTEGRATOR_GPIO_BASE
),
INTEGRATOR_GPIO_BASE
,
SZ_4K
,
MT_DEVICE
},
{
0xfc900000
,
0xc9000000
,
SZ_4K
,
MT_DEVICE
},
{
0xfca00000
,
0xca000000
,
SZ_4K
,
MT_DEVICE
},
{
0xfcb00000
,
0xcb000000
,
SZ_4K
,
MT_DEVICE
},
};
static
void
__init
intcp_map_io
(
void
)
{
iotable_init
(
intcp_io_desc
,
ARRAY_SIZE
(
intcp_io_desc
));
}
#define cic_writel __raw_writel
#define cic_readl __raw_readl
#define pic_writel __raw_writel
#define pic_readl __raw_readl
#define sic_writel __raw_writel
#define sic_readl __raw_readl
static
void
cic_mask_irq
(
unsigned
int
irq
)
{
irq
-=
IRQ_CIC_START
;
cic_writel
(
1
<<
irq
,
INTCP_VA_CIC_BASE
+
IRQ_ENABLE_CLEAR
);
}
static
void
cic_unmask_irq
(
unsigned
int
irq
)
{
irq
-=
IRQ_CIC_START
;
cic_writel
(
1
<<
irq
,
INTCP_VA_CIC_BASE
+
IRQ_ENABLE_SET
);
}
static
struct
irqchip
cic_chip
=
{
.
ack
=
cic_mask_irq
,
.
mask
=
cic_mask_irq
,
.
unmask
=
cic_unmask_irq
,
};
static
void
pic_mask_irq
(
unsigned
int
irq
)
{
irq
-=
IRQ_PIC_START
;
pic_writel
(
1
<<
irq
,
INTCP_VA_PIC_BASE
+
IRQ_ENABLE_CLEAR
);
}
static
void
pic_unmask_irq
(
unsigned
int
irq
)
{
irq
-=
IRQ_PIC_START
;
pic_writel
(
1
<<
irq
,
INTCP_VA_PIC_BASE
+
IRQ_ENABLE_SET
);
}
static
struct
irqchip
pic_chip
=
{
.
ack
=
pic_mask_irq
,
.
mask
=
pic_mask_irq
,
.
unmask
=
pic_unmask_irq
,
};
static
void
sic_mask_irq
(
unsigned
int
irq
)
{
irq
-=
IRQ_SIC_START
;
sic_writel
(
1
<<
irq
,
INTCP_VA_SIC_BASE
+
IRQ_ENABLE_CLEAR
);
}
static
void
sic_unmask_irq
(
unsigned
int
irq
)
{
irq
-=
IRQ_SIC_START
;
sic_writel
(
1
<<
irq
,
INTCP_VA_SIC_BASE
+
IRQ_ENABLE_SET
);
}
static
struct
irqchip
sic_chip
=
{
.
ack
=
sic_mask_irq
,
.
mask
=
sic_mask_irq
,
.
unmask
=
sic_unmask_irq
,
};
static
void
sic_handle_irq
(
unsigned
int
irq
,
struct
irqdesc
*
desc
,
struct
pt_regs
*
regs
)
{
unsigned
long
status
=
sic_readl
(
INTCP_VA_SIC_BASE
+
IRQ_STATUS
);
if
(
status
==
0
)
{
do_bad_IRQ
(
irq
,
desc
,
regs
);
return
;
}
do
{
irq
=
ffs
(
status
)
-
1
;
status
&=
~
(
1
<<
irq
);
irq
+=
IRQ_SIC_START
;
desc
=
irq_desc
+
irq
;
desc
->
handle
(
irq
,
desc
,
regs
);
}
while
(
status
);
}
static
void
__init
intcp_init_irq
(
void
)
{
unsigned
int
i
;
/*
* Disable all interrupt sources
*/
pic_writel
(
0xffffffff
,
INTCP_VA_PIC_BASE
+
IRQ_ENABLE_CLEAR
);
pic_writel
(
0xffffffff
,
INTCP_VA_PIC_BASE
+
FIQ_ENABLE_CLEAR
);
for
(
i
=
IRQ_PIC_START
;
i
<=
IRQ_PIC_END
;
i
++
)
{
if
(
i
==
11
)
i
=
22
;
if
(
i
==
IRQ_CP_CPPLDINT
)
i
++
;
if
(
i
==
29
)
break
;
set_irq_chip
(
i
,
&
pic_chip
);
set_irq_handler
(
i
,
do_level_IRQ
);
set_irq_flags
(
i
,
IRQF_VALID
|
IRQF_PROBE
);
}
cic_writel
(
0xffffffff
,
INTCP_VA_CIC_BASE
+
IRQ_ENABLE_CLEAR
);
cic_writel
(
0xffffffff
,
INTCP_VA_CIC_BASE
+
FIQ_ENABLE_CLEAR
);
for
(
i
=
IRQ_CIC_START
;
i
<=
IRQ_CIC_END
;
i
++
)
{
set_irq_chip
(
i
,
&
cic_chip
);
set_irq_handler
(
i
,
do_level_IRQ
);
set_irq_flags
(
i
,
IRQF_VALID
);
}
sic_writel
(
0x00000fff
,
INTCP_VA_SIC_BASE
+
IRQ_ENABLE_CLEAR
);
sic_writel
(
0x00000fff
,
INTCP_VA_SIC_BASE
+
FIQ_ENABLE_CLEAR
);
for
(
i
=
IRQ_SIC_START
;
i
<=
IRQ_SIC_END
;
i
++
)
{
set_irq_chip
(
i
,
&
sic_chip
);
set_irq_handler
(
i
,
do_level_IRQ
);
set_irq_flags
(
i
,
IRQF_VALID
|
IRQF_PROBE
);
}
set_irq_handler
(
IRQ_CP_CPPLDINT
,
sic_handle_irq
);
pic_unmask_irq
(
IRQ_CP_CPPLDINT
);
}
/*
* Flash handling.
*/
static
int
intcp_flash_init
(
void
)
{
u32
val
;
val
=
readl
(
INTCP_VA_CTRL_BASE
+
INTCP_FLASHPROG
);
val
|=
CINTEGRATOR_FLASHPROG_FLWREN
;
writel
(
val
,
INTCP_VA_CTRL_BASE
+
INTCP_FLASHPROG
);
return
0
;
}
static
void
intcp_flash_exit
(
void
)
{
u32
val
;
val
=
readl
(
INTCP_VA_CTRL_BASE
+
INTCP_FLASHPROG
);
val
&=
~
(
CINTEGRATOR_FLASHPROG_FLVPPEN
|
CINTEGRATOR_FLASHPROG_FLWREN
);
writel
(
val
,
INTCP_VA_CTRL_BASE
+
INTCP_FLASHPROG
);
}
static
void
intcp_flash_set_vpp
(
int
on
)
{
u32
val
;
val
=
readl
(
INTCP_VA_CTRL_BASE
+
INTCP_FLASHPROG
);
if
(
on
)
val
|=
CINTEGRATOR_FLASHPROG_FLVPPEN
;
else
val
&=
~
CINTEGRATOR_FLASHPROG_FLVPPEN
;
writel
(
val
,
INTCP_VA_CTRL_BASE
+
INTCP_FLASHPROG
);
}
static
struct
flash_platform_data
intcp_flash_data
=
{
.
map_name
=
"cfi_probe"
,
.
width
=
4
,
.
init
=
intcp_flash_init
,
.
exit
=
intcp_flash_exit
,
.
set_vpp
=
intcp_flash_set_vpp
,
};
static
struct
resource
intcp_flash_resource
=
{
.
start
=
INTCP_PA_FLASH_BASE
,
.
end
=
INTCP_PA_FLASH_BASE
+
INTCP_FLASH_SIZE
-
1
,
.
flags
=
IORESOURCE_MEM
,
};
static
struct
platform_device
intcp_flash_device
=
{
.
name
=
"armflash"
,
.
id
=
0
,
.
dev
=
{
.
platform_data
=
&
intcp_flash_data
,
},
.
num_resources
=
1
,
.
resource
=
&
intcp_flash_resource
,
};
static
struct
resource
smc91x_resources
[]
=
{
[
0
]
=
{
.
start
=
INTCP_PA_ETH_BASE
,
.
end
=
INTCP_PA_ETH_BASE
+
INTCP_ETH_SIZE
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
IRQ_CP_ETHINT
,
.
end
=
IRQ_CP_ETHINT
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
smc91x_device
=
{
.
name
=
"smc91x"
,
.
id
=
0
,
.
num_resources
=
ARRAY_SIZE
(
smc91x_resources
),
.
resource
=
smc91x_resources
,
};
static
struct
platform_device
*
intcp_devs
[]
__initdata
=
{
&
intcp_flash_device
,
&
smc91x_device
,
};
/*
* It seems that the card insertion interrupt remains active after
* we've acknowledged it. We therefore ignore the interrupt, and
* rely on reading it from the SIC. This also means that we must
* clear the latched interrupt.
*/
static
unsigned
int
mmc_status
(
struct
device
*
dev
)
{
unsigned
int
status
=
readl
(
0xfca00004
);
writel
(
8
,
0xfcb00008
);
return
status
&
8
;
}
static
struct
mmc_platform_data
mmc_data
=
{
.
mclk
=
33000000
,
.
ocr_mask
=
MMC_VDD_32_33
|
MMC_VDD_33_34
,
.
status
=
mmc_status
,
};
static
struct
amba_device
mmc_device
=
{
.
dev
=
{
.
bus_id
=
"mb:1c"
,
.
platform_data
=
&
mmc_data
,
},
.
res
=
{
.
start
=
INTCP_PA_MMC_BASE
,
.
end
=
INTCP_PA_MMC_BASE
+
SZ_4K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
.
irq
=
{
IRQ_CP_MMCIINT0
,
IRQ_CP_MMCIINT1
},
.
periphid
=
0
,
};
static
struct
amba_device
aaci_device
=
{
.
dev
=
{
.
bus_id
=
"mb:1d"
,
},
.
res
=
{
.
start
=
INTCP_PA_AACI_BASE
,
.
end
=
INTCP_PA_AACI_BASE
+
SZ_4K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
.
irq
=
{
IRQ_CP_AACIINT
,
NO_IRQ
},
.
periphid
=
0
,
};
static
struct
amba_device
*
amba_devs
[]
__initdata
=
{
&
mmc_device
,
&
aaci_device
,
};
static
void
__init
intcp_init
(
void
)
{
int
i
;
platform_add_devices
(
intcp_devs
,
ARRAY_SIZE
(
intcp_devs
));
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
amba_devs
);
i
++
)
{
struct
amba_device
*
d
=
amba_devs
[
i
];
amba_device_register
(
d
,
&
iomem_resource
);
}
}
MACHINE_START
(
CINTEGRATOR
,
"ARM-IntegratorCP"
)
MAINTAINER
(
"ARM Ltd/Deep Blue Solutions Ltd"
)
BOOT_MEM
(
0x00000000
,
0x16000000
,
0xf1600000
)
BOOT_PARAMS
(
0x00000100
)
MAPIO
(
intcp_map_io
)
INITIRQ
(
intcp_init_irq
)
INIT_MACHINE
(
intcp_init
)
MACHINE_END
arch/arm/mach-integrator/leds.c
View file @
dac9e97d
/*
* linux/arch/arm/mach-integrator/leds.c
*
* Integrator LED control routines
* Integrator
/AP and Integrator/CP
LED control routines
*
* Copyright (C) 1999 ARM Limited
* Copyright (C) 2000 Deep Blue Solutions Ltd
...
...
@@ -28,6 +28,7 @@
#include <asm/leds.h>
#include <asm/system.h>
#include <asm/mach-types.h>
#include <asm/arch/cm.h>
static
int
saved_leds
;
...
...
@@ -35,9 +36,6 @@ static void integrator_leds_event(led_event_t ledevt)
{
unsigned
long
flags
;
const
unsigned
int
dbg_base
=
IO_ADDRESS
(
INTEGRATOR_DBG_BASE
);
const
unsigned
int
hdr_ctrl
=
IO_ADDRESS
(
INTEGRATOR_HDR_BASE
)
+
INTEGRATOR_HDR_CTRL_OFFSET
;
unsigned
int
ctrl
;
unsigned
int
update_alpha_leds
;
// yup, change the LEDs
...
...
@@ -46,15 +44,11 @@ static void integrator_leds_event(led_event_t ledevt)
switch
(
ledevt
)
{
case
led_idle_start
:
ctrl
=
__raw_readl
(
hdr_ctrl
);
ctrl
&=
~
INTEGRATOR_HDR_CTRL_LED
;
__raw_writel
(
ctrl
,
hdr_ctrl
);
cm_control
(
CM_CTRL_LED
,
0
);
break
;
case
led_idle_end
:
ctrl
=
__raw_readl
(
hdr_ctrl
);
ctrl
|=
INTEGRATOR_HDR_CTRL_LED
;
__raw_writel
(
ctrl
,
hdr_ctrl
);
cm_control
(
CM_CTRL_LED
,
CM_CTRL_LED
);
break
;
case
led_timer
:
...
...
@@ -85,7 +79,7 @@ static void integrator_leds_event(led_event_t ledevt)
static
int
__init
leds_init
(
void
)
{
if
(
machine_is_integrator
())
if
(
machine_is_integrator
()
||
machine_is_cintegrator
()
)
leds_event
=
integrator_leds_event
;
return
0
;
...
...
arch/arm/mach-pxa/lubbock.c
View file @
dac9e97d
...
...
@@ -119,8 +119,34 @@ static struct platform_device sa1111_device = {
.
resource
=
sa1111_resources
,
};
static
struct
resource
smc91x_resources
[]
=
{
[
0
]
=
{
.
start
=
0x0c000000
,
.
end
=
0x0c0fffff
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
LUBBOCK_ETH_IRQ
,
.
end
=
LUBBOCK_ETH_IRQ
,
.
flags
=
IORESOURCE_IRQ
,
},
[
2
]
=
{
.
start
=
0x0e000000
,
.
end
=
0x0e0fffff
,
.
flags
=
IORESOURCE_MEM
,
},
};
static
struct
platform_device
smc91x_device
=
{
.
name
=
"smc91x"
,
.
id
=
0
,
.
num_resources
=
ARRAY_SIZE
(
smc91x_resources
),
.
resource
=
smc91x_resources
,
};
static
struct
platform_device
*
devices
[]
__initdata
=
{
&
sa1111_device
,
&
smc91x_device
,
};
static
void
__init
lubbock_init
(
void
)
...
...
arch/arm/mach-sa1100/assabet.c
View file @
dac9e97d
...
...
@@ -92,11 +92,8 @@ static void assabet_lcd_power(int on)
ASSABET_BCR_clear
(
ASSABET_BCR_LCD_ON
);
}
static
int
__init
assabet_init
(
void
)
static
void
__init
assabet_init
(
void
)
{
if
(
!
machine_is_assabet
())
return
-
EINVAL
;
/*
* Ensure that the power supply is in "high power" mode.
*/
...
...
@@ -139,13 +136,8 @@ static int __init assabet_init(void)
"hasn't been configured in the kernel
\n
"
);
#endif
}
return
0
;
}
arch_initcall
(
assabet_init
);
/*
* On Assabet, we must probe for the Neponset board _before_
* paging_init() has occurred to actually determine the amount
...
...
@@ -332,4 +324,5 @@ MACHINE_START(ASSABET, "Intel-Assabet")
FIXUP
(
fixup_assabet
)
MAPIO
(
assabet_map_io
)
INITIRQ
(
sa1100_init_irq
)
INIT_MACHINE
(
assabet_init
)
MACHINE_END
arch/arm/mach-sa1100/neponset.c
View file @
dac9e97d
...
...
@@ -256,9 +256,35 @@ static struct platform_device sa1111_device = {
.
resource
=
sa1111_resources
,
};
static
struct
resource
smc91x_resources
[]
=
{
[
0
]
=
{
.
start
=
SA1100_CS3_PHYS
,
.
end
=
SA1100_CS3_PHYS
+
0x01ffffff
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
IRQ_NEPONSET_SMC9196
,
.
end
=
IRQ_NEPONSET_SMC9196
,
.
flags
=
IORESOURCE_IRQ
,
},
[
2
]
=
{
.
start
=
SA1100_CS3_PHYS
+
0x02000000
,
.
end
=
SA1100_CS3_PHYS
+
0x03ffffff
,
.
flags
=
IORESOURCE_MEM
,
},
};
static
struct
platform_device
smc91x_device
=
{
.
name
=
"smc91x"
,
.
id
=
0
,
.
num_resources
=
ARRAY_SIZE
(
smc91x_resources
),
.
resource
=
smc91x_resources
,
};
static
struct
platform_device
*
devices
[]
__initdata
=
{
&
neponset_device
,
&
sa1111_device
,
&
smc91x_device
,
};
static
int
__init
neponset_init
(
void
)
...
...
include/asm-arm/arch-integrator/cm.h
0 → 100644
View file @
dac9e97d
/*
* update the core module control register.
*/
void
cm_control
(
u32
,
u32
);
#define CM_CTRL_LED (1 << 0)
#define CM_CTRL_nMBDET (1 << 1)
#define CM_CTRL_REMAP (1 << 2)
#define CM_CTRL_RESET (1 << 3)
/*
* Integrator/AP,PP2 specific
*/
#define CM_CTRL_HIGHVECTORS (1 << 4)
#define CM_CTRL_BIGENDIAN (1 << 5)
#define CM_CTRL_FASTBUS (1 << 6)
#define CM_CTRL_SYNC (1 << 7)
/*
* ARM926/946/966 Integrator/CP specific
*/
#define CM_CTRL_LCDBIASEN (1 << 8)
#define CM_CTRL_LCDBIASUP (1 << 9)
#define CM_CTRL_LCDBIASDN (1 << 10)
#define CM_CTRL_LCDMUXSEL_MASK (7 << 11)
#define CM_CTRL_LCDMUXSEL_GENLCD (1 << 11)
#define CM_CTRL_LCDMUXSEL_SHARPLCD1 (3 << 11)
#define CM_CTRL_LCDMUXSEL_SHARPLCD2 (4 << 11)
#define CM_CTRL_LCDMUXSEL_VGA (7 << 11)
#define CM_CTRL_LCDEN0 (1 << 14)
#define CM_CTRL_LCDEN1 (1 << 15)
#define CM_CTRL_STATIC1 (1 << 16)
#define CM_CTRL_STATIC2 (1 << 17)
#define CM_CTRL_STATIC (1 << 18)
#define CM_CTRL_n24BITEN (1 << 19)
#define CM_CTRL_EBIWP (1 << 20)
include/asm-arm/arch-integrator/irqs.h
View file @
dac9e97d
...
...
@@ -45,6 +45,13 @@
#define IRQ_AP_CPINT1 19
#define IRQ_AP_LBUSTIMEOUT 20
#define IRQ_AP_APCINT 21
#define IRQ_CP_CLCDCINT 22
#define IRQ_CP_MMCIINT0 23
#define IRQ_CP_MMCIINT1 24
#define IRQ_CP_AACIINT 25
#define IRQ_CP_CPPLDINT 26
#define IRQ_CP_ETHINT 27
#define IRQ_CP_TSPENINT 28
#define IRQ_PIC_END 31
#define IRQ_CIC_START 32
...
...
@@ -53,5 +60,23 @@
#define IRQ_CM_COMMTX 34
#define IRQ_CIC_END 34
/*
* IntegratorCP only
*/
#define IRQ_SIC_START 35
#define IRQ_SIC_CP_SOFTINT 35
#define IRQ_SIC_CP_RI0 36
#define IRQ_SIC_CP_RI1 37
#define IRQ_SIC_CP_CARDIN 38
#define IRQ_SIC_CP_LMINT0 39
#define IRQ_SIC_CP_LMINT1 40
#define IRQ_SIC_CP_LMINT2 41
#define IRQ_SIC_CP_LMINT3 42
#define IRQ_SIC_CP_LMINT4 43
#define IRQ_SIC_CP_LMINT5 44
#define IRQ_SIC_CP_LMINT6 45
#define IRQ_SIC_CP_LMINT7 46
#define IRQ_SIC_END 46
#define NR_IRQS 47
include/asm-arm/arch-integrator/system.h
View file @
dac9e97d
...
...
@@ -21,7 +21,7 @@
#ifndef __ASM_ARCH_SYSTEM_H
#define __ASM_ARCH_SYSTEM_H
#include <asm/arch/
platfor
m.h>
#include <asm/arch/
c
m.h>
static
inline
void
arch_idle
(
void
)
{
...
...
@@ -34,16 +34,11 @@ static inline void arch_idle(void)
static
inline
void
arch_reset
(
char
mode
)
{
unsigned
int
hdr_ctrl
=
(
IO_ADDRESS
(
INTEGRATOR_HDR_BASE
)
+
INTEGRATOR_HDR_CTRL_OFFSET
);
unsigned
int
val
;
/*
* To reset, we hit the on-board reset register
* in the system FPGA
*/
val
=
__raw_readl
(
hdr_ctrl
);
val
|=
INTEGRATOR_HDR_CTRL_RESET
;
__raw_writel
(
val
,
hdr_ctrl
);
cm_control
(
CM_CTRL_RESET
,
CM_CTRL_RESET
);
}
#endif
include/asm-arm/arch-integrator/time.h
View file @
dac9e97d
...
...
@@ -17,6 +17,7 @@
*/
#include <asm/system.h>
#include <asm/leds.h>
#include <asm/mach-types.h>
/*
* Where is the timer (VA)?
...
...
@@ -31,19 +32,15 @@
*/
#define TIMER_INTERVAL (TICKS_PER_uSEC * mSEC_10)
#if TIMER_INTERVAL >= 0x100000
#define TIMER_RELOAD (TIMER_INTERVAL >> 8)
/* Divide by 256 */
#define TIMER_CTRL 0x88
/* Enable, Clock / 256 */
#define TICKS2USECS(x) (256 * (x) / TICKS_PER_uSEC)
#elif TIMER_INTERVAL >= 0x10000
#define TIMER_RELOAD (TIMER_INTERVAL >> 4)
/* Divide by 16 */
#define TIMER_CTRL 0x84
/* Enable, Clock / 16 */
#define TICKS2USECS(x) (16 * (x) / TICKS_PER_uSEC)
#else
#define TIMER_RELOAD (TIMER_INTERVAL)
#define TIMER_CTRL 0x80
/* Enable */
#define TICKS2USECS(x) ((x) / TICKS_PER_uSEC)
#endif
#define TIMER_CTRL_IE (1 << 5)
/* Interrupt Enable */
/*
* What does it look like?
*/
...
...
@@ -56,6 +53,8 @@ typedef struct TimerStruct {
extern
unsigned
long
(
*
gettimeoffset
)(
void
);
static
unsigned
long
timer_reload
;
/*
* Returns number of ms since last clock interrupt. Note that interrupts
* will have been disabled by do_gettimeoffset()
...
...
@@ -81,13 +80,13 @@ static unsigned long integrator_gettimeoffset(void)
/*
* Number of ticks since last interrupt.
*/
ticks1
=
TIMER_RELOAD
-
ticks2
;
ticks1
=
timer_reload
-
ticks2
;
/*
* Interrupt pending? If so, we've reloaded once already.
*/
if
(
status
&
(
1
<<
IRQ_TIMERINT1
))
ticks1
+=
TIMER_RELOAD
;
ticks1
+=
timer_reload
;
/*
* Convert the ticks to usecs
...
...
@@ -121,8 +120,21 @@ void __init time_init(void)
volatile
TimerStruct_t
*
timer0
=
(
volatile
TimerStruct_t
*
)
TIMER0_VA_BASE
;
volatile
TimerStruct_t
*
timer1
=
(
volatile
TimerStruct_t
*
)
TIMER1_VA_BASE
;
volatile
TimerStruct_t
*
timer2
=
(
volatile
TimerStruct_t
*
)
TIMER2_VA_BASE
;
timer_irq
.
handler
=
integrator_timer_interrupt
;
unsigned
int
timer_ctrl
=
0x80
|
0x40
;
/* periodic */
if
(
machine_is_integrator
())
{
timer_reload
=
1000000
*
TICKS_PER_uSEC
/
HZ
;
}
else
if
(
machine_is_cintegrator
())
{
timer_reload
=
1000000
/
HZ
;
timer_ctrl
|=
TIMER_CTRL_IE
;
}
if
(
timer_reload
>
0x100000
)
{
timer_reload
>>=
8
;
timer_ctrl
|=
0x08
;
/* /256 */
}
else
if
(
timer_reload
>
0x010000
)
{
timer_reload
>>=
4
;
timer_ctrl
|=
0x04
;
/* /16 */
}
/*
* Initialise to a known state (all timers off)
...
...
@@ -131,12 +143,14 @@ void __init time_init(void)
timer1
->
TimerControl
=
0
;
timer2
->
TimerControl
=
0
;
timer1
->
TimerLoad
=
TIMER_RELOAD
;
timer1
->
TimerControl
=
TIMER_CTRL
|
0x40
;
/* periodic */
timer1
->
TimerLoad
=
timer_reload
;
timer1
->
TimerValue
=
timer_reload
;
timer1
->
TimerControl
=
timer_ctrl
;
/*
* Make irqs happen for the system timer
*/
timer_irq
.
handler
=
integrator_timer_interrupt
;
setup_irq
(
IRQ_TIMERINT1
,
&
timer_irq
);
gettimeoffset
=
integrator_gettimeoffset
;
}
include/asm-arm/hardware/amba.h
View file @
dac9e97d
...
...
@@ -10,11 +10,13 @@
#ifndef ASMARM_AMBA_H
#define ASMARM_AMBA_H
#define AMBA_NR_IRQS 2
struct
amba_device
{
struct
device
dev
;
struct
resource
res
;
unsigned
int
irq
;
unsigned
int
periphid
;
unsigned
int
irq
[
AMBA_NR_IRQS
];
};
struct
amba_id
{
...
...
@@ -40,5 +42,13 @@ int amba_driver_register(struct amba_driver *);
void
amba_driver_unregister
(
struct
amba_driver
*
);
int
amba_device_register
(
struct
amba_device
*
,
struct
resource
*
);
void
amba_device_unregister
(
struct
amba_device
*
);
struct
amba_device
*
amba_find_device
(
const
char
*
,
struct
device
*
,
unsigned
int
,
unsigned
int
);
int
amba_request_regions
(
struct
amba_device
*
,
const
char
*
);
void
amba_release_regions
(
struct
amba_device
*
);
#define amba_config(d) (((d)->periphid >> 24) & 0xff)
#define amba_rev(d) (((d)->periphid >> 20) & 0x0f)
#define amba_manf(d) (((d)->periphid >> 12) & 0xff)
#define amba_part(d) ((d)->periphid & 0xfff)
#endif
include/asm-arm/hardware/sa1111.h
View file @
dac9e97d
...
...
@@ -219,8 +219,6 @@
#define _SAITR _SA1111( 0x065c )
#define _SADR _SA1111( 0x0680 )
#if LANGUAGE == C
#define SACR0 __CCREG(0x0600)
#define SACR1 __CCREG(0x0604)
#define SACR2 __CCREG(0x0608)
...
...
@@ -246,8 +244,6 @@
#define SAITR __CCREG(0x065c)
#define SADR __CCREG(0x0680)
#endif
/* LANGUAGE == C */
#define SACR0_ENB (1<<0)
#define SACR0_BCKD (1<<2)
#define SACR0_RST (1<<3)
...
...
@@ -368,8 +364,6 @@
#define _PC_SDR _SA1111( 0x1028 )
#define _PC_SSR _SA1111( 0x102c )
#if LANGUAGE == C
#define PA_DDR __CCREG(0x1000)
#define PA_DRR __CCREG(0x1004)
#define PA_DWR __CCREG(0x1004)
...
...
@@ -386,8 +380,6 @@
#define PC_SDR __CCREG(0x1028)
#define PC_SSR __CCREG(0x102c)
#endif
/* LANGUAGE == C */
/*
* Interrupt Controller
*
...
...
include/asm-arm/pci.h
View file @
dac9e97d
...
...
@@ -75,7 +75,7 @@ pci_unmap_single(struct pci_dev *hwdev, dma_addr_t handle, size_t size, int dir)
return
;
}
return
dma_unmap_single
(
hwdev
?
&
hwdev
->
dev
:
NULL
,
handle
,
size
,
dir
);
dma_unmap_single
(
hwdev
?
&
hwdev
->
dev
:
NULL
,
handle
,
size
,
dir
);
}
static
inline
int
...
...
include/asm-arm/semaphore.h
View file @
dac9e97d
...
...
@@ -16,12 +16,12 @@ struct semaphore {
atomic_t
count
;
int
sleepers
;
wait_queue_head_t
wait
;
#if WAITQUEUE_DEBUG
#if
def
WAITQUEUE_DEBUG
long
__magic
;
#endif
};
#if WAITQUEUE_DEBUG
#if
def
WAITQUEUE_DEBUG
# define __SEM_DEBUG_INIT(name) .__magic = (long)&(name).__magic
#else
# define __SEM_DEBUG_INIT(name)
...
...
@@ -46,7 +46,7 @@ static inline void sema_init(struct semaphore *sem, int val)
atomic_set
(
&
sem
->
count
,
val
);
sem
->
sleepers
=
0
;
init_waitqueue_head
(
&
sem
->
wait
);
#if WAITQUEUE_DEBUG
#if
def
WAITQUEUE_DEBUG
sem
->
__magic
=
(
long
)
&
sem
->
__magic
;
#endif
}
...
...
@@ -85,7 +85,7 @@ extern void __up(struct semaphore * sem);
*/
static
inline
void
down
(
struct
semaphore
*
sem
)
{
#if WAITQUEUE_DEBUG
#if
def
WAITQUEUE_DEBUG
CHECK_MAGIC
(
sem
->
__magic
);
#endif
might_sleep
();
...
...
@@ -98,7 +98,7 @@ static inline void down(struct semaphore * sem)
*/
static
inline
int
down_interruptible
(
struct
semaphore
*
sem
)
{
#if WAITQUEUE_DEBUG
#if
def
WAITQUEUE_DEBUG
CHECK_MAGIC
(
sem
->
__magic
);
#endif
might_sleep
();
...
...
@@ -107,7 +107,7 @@ static inline int down_interruptible (struct semaphore * sem)
static
inline
int
down_trylock
(
struct
semaphore
*
sem
)
{
#if WAITQUEUE_DEBUG
#if
def
WAITQUEUE_DEBUG
CHECK_MAGIC
(
sem
->
__magic
);
#endif
...
...
@@ -122,7 +122,7 @@ static inline int down_trylock(struct semaphore *sem)
*/
static
inline
void
up
(
struct
semaphore
*
sem
)
{
#if WAITQUEUE_DEBUG
#if
def
WAITQUEUE_DEBUG
CHECK_MAGIC
(
sem
->
__magic
);
#endif
...
...
include/asm-arm/unistd.h
View file @
dac9e97d
...
...
@@ -296,6 +296,9 @@
#define __NR_tgkill (__NR_SYSCALL_BASE+268)
#define __NR_utimes (__NR_SYSCALL_BASE+269)
#define __NR_fadvise64_64 (__NR_SYSCALL_BASE+270)
#define __NR_pciconfig_iobase (__NR_SYSCALL_BASE+271)
#define __NR_pciconfig_read (__NR_SYSCALL_BASE+272)
#define __NR_pciconfig_write (__NR_SYSCALL_BASE+273)
/*
* The following SWIs are ARM private.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment