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
cfa024f4
Commit
cfa024f4
authored
Nov 02, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/home/rmk/linux-2.6-arm
parents
3a714237
a054a811
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
250 additions
and
57 deletions
+250
-57
arch/arm/Kconfig
arch/arm/Kconfig
+7
-0
arch/arm/kernel/irq.c
arch/arm/kernel/irq.c
+31
-0
arch/arm/kernel/process.c
arch/arm/kernel/process.c
+9
-0
arch/arm/kernel/smp.c
arch/arm/kernel/smp.c
+100
-9
arch/arm/mach-realview/realview_eb.c
arch/arm/mach-realview/realview_eb.c
+37
-7
arch/arm/mm/init.c
arch/arm/mm/init.c
+8
-1
drivers/video/amba-clcd.c
drivers/video/amba-clcd.c
+2
-2
include/asm-arm/arch-ixp4xx/io.h
include/asm-arm/arch-ixp4xx/io.h
+40
-34
include/asm-arm/arch-realview/memory.h
include/asm-arm/arch-realview/memory.h
+1
-1
include/asm-arm/cpu.h
include/asm-arm/cpu.h
+1
-0
include/asm-arm/irq.h
include/asm-arm/irq.h
+1
-0
include/asm-arm/smp.h
include/asm-arm/smp.h
+10
-0
include/asm-arm/spinlock.h
include/asm-arm/spinlock.h
+3
-3
No files found.
arch/arm/Kconfig
View file @
cfa024f4
...
@@ -349,6 +349,13 @@ config NR_CPUS
...
@@ -349,6 +349,13 @@ config NR_CPUS
depends on SMP
depends on SMP
default "4"
default "4"
config HOTPLUG_CPU
bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
depends on SMP && HOTPLUG && EXPERIMENTAL
help
Say Y here to experiment with turning CPUs off and on. CPUs
can be controlled through /sys/devices/system/cpu.
config PREEMPT
config PREEMPT
bool "Preemptible Kernel (EXPERIMENTAL)"
bool "Preemptible Kernel (EXPERIMENTAL)"
depends on EXPERIMENTAL
depends on EXPERIMENTAL
...
...
arch/arm/kernel/irq.c
View file @
cfa024f4
...
@@ -1050,3 +1050,34 @@ static int __init noirqdebug_setup(char *str)
...
@@ -1050,3 +1050,34 @@ static int __init noirqdebug_setup(char *str)
}
}
__setup
(
"noirqdebug"
,
noirqdebug_setup
);
__setup
(
"noirqdebug"
,
noirqdebug_setup
);
#ifdef CONFIG_HOTPLUG_CPU
/*
* The CPU has been marked offline. Migrate IRQs off this CPU. If
* the affinity settings do not allow other CPUs, force them onto any
* available CPU.
*/
void
migrate_irqs
(
void
)
{
unsigned
int
i
,
cpu
=
smp_processor_id
();
for
(
i
=
0
;
i
<
NR_IRQS
;
i
++
)
{
struct
irqdesc
*
desc
=
irq_desc
+
i
;
if
(
desc
->
cpu
==
cpu
)
{
unsigned
int
newcpu
=
any_online_cpu
(
desc
->
affinity
);
if
(
newcpu
==
NR_CPUS
)
{
if
(
printk_ratelimit
())
printk
(
KERN_INFO
"IRQ%u no longer affine to CPU%u
\n
"
,
i
,
cpu
);
cpus_setall
(
desc
->
affinity
);
newcpu
=
any_online_cpu
(
desc
->
affinity
);
}
route_irq
(
desc
,
i
,
newcpu
);
}
}
}
#endif
/* CONFIG_HOTPLUG_CPU */
arch/arm/kernel/process.c
View file @
cfa024f4
...
@@ -26,6 +26,7 @@
...
@@ -26,6 +26,7 @@
#include <linux/interrupt.h>
#include <linux/interrupt.h>
#include <linux/kallsyms.h>
#include <linux/kallsyms.h>
#include <linux/init.h>
#include <linux/init.h>
#include <linux/cpu.h>
#include <asm/system.h>
#include <asm/system.h>
#include <asm/io.h>
#include <asm/io.h>
...
@@ -105,6 +106,14 @@ void cpu_idle(void)
...
@@ -105,6 +106,14 @@ void cpu_idle(void)
/* endless idle loop with no priority at all */
/* endless idle loop with no priority at all */
while
(
1
)
{
while
(
1
)
{
void
(
*
idle
)(
void
)
=
pm_idle
;
void
(
*
idle
)(
void
)
=
pm_idle
;
#ifdef CONFIG_HOTPLUG_CPU
if
(
cpu_is_offline
(
smp_processor_id
()))
{
leds_event
(
led_idle_start
);
cpu_die
();
}
#endif
if
(
!
idle
)
if
(
!
idle
)
idle
=
default_idle
;
idle
=
default_idle
;
preempt_disable
();
preempt_disable
();
...
...
arch/arm/kernel/smp.c
View file @
cfa024f4
...
@@ -80,19 +80,23 @@ static DEFINE_SPINLOCK(smp_call_function_lock);
...
@@ -80,19 +80,23 @@ static DEFINE_SPINLOCK(smp_call_function_lock);
int
__cpuinit
__cpu_up
(
unsigned
int
cpu
)
int
__cpuinit
__cpu_up
(
unsigned
int
cpu
)
{
{
struct
task_struct
*
idle
;
struct
cpuinfo_arm
*
ci
=
&
per_cpu
(
cpu_data
,
cpu
);
struct
task_struct
*
idle
=
ci
->
idle
;
pgd_t
*
pgd
;
pgd_t
*
pgd
;
pmd_t
*
pmd
;
pmd_t
*
pmd
;
int
ret
;
int
ret
;
/*
/*
* Spawn a new process manually
. Grab a pointer to
* Spawn a new process manually
, if not already done.
* its task struct so we can mess with it
*
Grab a pointer to
its task struct so we can mess with it
*/
*/
idle
=
fork_idle
(
cpu
);
if
(
!
idle
)
{
if
(
IS_ERR
(
idle
))
{
idle
=
fork_idle
(
cpu
);
printk
(
KERN_ERR
"CPU%u: fork() failed
\n
"
,
cpu
);
if
(
IS_ERR
(
idle
))
{
return
PTR_ERR
(
idle
);
printk
(
KERN_ERR
"CPU%u: fork() failed
\n
"
,
cpu
);
return
PTR_ERR
(
idle
);
}
ci
->
idle
=
idle
;
}
}
/*
/*
...
@@ -155,6 +159,91 @@ int __cpuinit __cpu_up(unsigned int cpu)
...
@@ -155,6 +159,91 @@ int __cpuinit __cpu_up(unsigned int cpu)
return
ret
;
return
ret
;
}
}
#ifdef CONFIG_HOTPLUG_CPU
/*
* __cpu_disable runs on the processor to be shutdown.
*/
int
__cpuexit
__cpu_disable
(
void
)
{
unsigned
int
cpu
=
smp_processor_id
();
struct
task_struct
*
p
;
int
ret
;
ret
=
mach_cpu_disable
(
cpu
);
if
(
ret
)
return
ret
;
/*
* Take this CPU offline. Once we clear this, we can't return,
* and we must not schedule until we're ready to give up the cpu.
*/
cpu_clear
(
cpu
,
cpu_online_map
);
/*
* OK - migrate IRQs away from this CPU
*/
migrate_irqs
();
/*
* Flush user cache and TLB mappings, and then remove this CPU
* from the vm mask set of all processes.
*/
flush_cache_all
();
local_flush_tlb_all
();
read_lock
(
&
tasklist_lock
);
for_each_process
(
p
)
{
if
(
p
->
mm
)
cpu_clear
(
cpu
,
p
->
mm
->
cpu_vm_mask
);
}
read_unlock
(
&
tasklist_lock
);
return
0
;
}
/*
* called on the thread which is asking for a CPU to be shutdown -
* waits until shutdown has completed, or it is timed out.
*/
void
__cpuexit
__cpu_die
(
unsigned
int
cpu
)
{
if
(
!
platform_cpu_kill
(
cpu
))
printk
(
"CPU%u: unable to kill
\n
"
,
cpu
);
}
/*
* Called from the idle thread for the CPU which has been shutdown.
*
* Note that we disable IRQs here, but do not re-enable them
* before returning to the caller. This is also the behaviour
* of the other hotplug-cpu capable cores, so presumably coming
* out of idle fixes this.
*/
void
__cpuexit
cpu_die
(
void
)
{
unsigned
int
cpu
=
smp_processor_id
();
local_irq_disable
();
idle_task_exit
();
/*
* actual CPU shutdown procedure is at least platform (if not
* CPU) specific
*/
platform_cpu_die
(
cpu
);
/*
* Do not return to the idle loop - jump back to the secondary
* cpu initialisation. There's some initialisation which needs
* to be repeated to undo the effects of taking the CPU offline.
*/
__asm__
(
"mov sp, %0
\n
"
" b secondary_start_kernel"
:
:
"r"
((
void
*
)
current
->
thread_info
+
THREAD_SIZE
-
8
));
}
#endif
/* CONFIG_HOTPLUG_CPU */
/*
/*
* This is the secondary CPU boot entry. We're using this CPUs
* This is the secondary CPU boot entry. We're using this CPUs
* idle thread stack, but a set of temporary page tables.
* idle thread stack, but a set of temporary page tables.
...
@@ -236,6 +325,8 @@ void __init smp_prepare_boot_cpu(void)
...
@@ -236,6 +325,8 @@ void __init smp_prepare_boot_cpu(void)
{
{
unsigned
int
cpu
=
smp_processor_id
();
unsigned
int
cpu
=
smp_processor_id
();
per_cpu
(
cpu_data
,
cpu
).
idle
=
current
;
cpu_set
(
cpu
,
cpu_possible_map
);
cpu_set
(
cpu
,
cpu_possible_map
);
cpu_set
(
cpu
,
cpu_present_map
);
cpu_set
(
cpu
,
cpu_present_map
);
cpu_set
(
cpu
,
cpu_online_map
);
cpu_set
(
cpu
,
cpu_online_map
);
...
@@ -309,8 +400,8 @@ int smp_call_function_on_cpu(void (*func)(void *info), void *info, int retry,
...
@@ -309,8 +400,8 @@ int smp_call_function_on_cpu(void (*func)(void *info), void *info, int retry,
printk
(
KERN_CRIT
printk
(
KERN_CRIT
"CPU%u: smp_call_function timeout for %p(%p)
\n
"
"CPU%u: smp_call_function timeout for %p(%p)
\n
"
" callmap %lx pending %lx, %swait
\n
"
,
" callmap %lx pending %lx, %swait
\n
"
,
smp_processor_id
(),
func
,
info
,
callmap
,
data
.
pending
,
smp_processor_id
(),
func
,
info
,
*
cpus_addr
(
callmap
)
,
wait
?
""
:
"no "
);
*
cpus_addr
(
data
.
pending
),
wait
?
""
:
"no "
);
/*
/*
* TRACE
* TRACE
...
...
arch/arm/mach-realview/realview_eb.c
View file @
cfa024f4
...
@@ -43,14 +43,44 @@
...
@@ -43,14 +43,44 @@
#include "clock.h"
#include "clock.h"
static
struct
map_desc
realview_eb_io_desc
[]
__initdata
=
{
static
struct
map_desc
realview_eb_io_desc
[]
__initdata
=
{
{
IO_ADDRESS
(
REALVIEW_SYS_BASE
),
REALVIEW_SYS_BASE
,
SZ_4K
,
MT_DEVICE
},
{
{
IO_ADDRESS
(
REALVIEW_GIC_CPU_BASE
),
REALVIEW_GIC_CPU_BASE
,
SZ_4K
,
MT_DEVICE
},
.
virtual
=
IO_ADDRESS
(
REALVIEW_SYS_BASE
),
{
IO_ADDRESS
(
REALVIEW_GIC_DIST_BASE
),
REALVIEW_GIC_DIST_BASE
,
SZ_4K
,
MT_DEVICE
},
.
pfn
=
__phys_to_pfn
(
REALVIEW_SYS_BASE
),
{
IO_ADDRESS
(
REALVIEW_SCTL_BASE
),
REALVIEW_SCTL_BASE
,
SZ_4K
,
MT_DEVICE
},
.
length
=
SZ_4K
,
{
IO_ADDRESS
(
REALVIEW_TIMER0_1_BASE
),
REALVIEW_TIMER0_1_BASE
,
SZ_4K
,
MT_DEVICE
},
.
type
=
MT_DEVICE
,
{
IO_ADDRESS
(
REALVIEW_TIMER2_3_BASE
),
REALVIEW_TIMER2_3_BASE
,
SZ_4K
,
MT_DEVICE
},
},
{
.
virtual
=
IO_ADDRESS
(
REALVIEW_GIC_CPU_BASE
),
.
pfn
=
__phys_to_pfn
(
REALVIEW_GIC_CPU_BASE
),
.
length
=
SZ_4K
,
.
type
=
MT_DEVICE
,
},
{
.
virtual
=
IO_ADDRESS
(
REALVIEW_GIC_DIST_BASE
),
.
pfn
=
__phys_to_pfn
(
REALVIEW_GIC_DIST_BASE
),
.
length
=
SZ_4K
,
.
type
=
MT_DEVICE
,
},
{
.
virtual
=
IO_ADDRESS
(
REALVIEW_SCTL_BASE
),
.
pfn
=
__phys_to_pfn
(
REALVIEW_SCTL_BASE
),
.
length
=
SZ_4K
,
.
type
=
MT_DEVICE
,
},
{
.
virtual
=
IO_ADDRESS
(
REALVIEW_TIMER0_1_BASE
),
.
pfn
=
__phys_to_pfn
(
REALVIEW_TIMER0_1_BASE
),
.
length
=
SZ_4K
,
.
type
=
MT_DEVICE
,
},
{
.
virtual
=
IO_ADDRESS
(
REALVIEW_TIMER2_3_BASE
),
.
pfn
=
__phys_to_pfn
(
REALVIEW_TIMER2_3_BASE
),
.
length
=
SZ_4K
,
.
type
=
MT_DEVICE
,
},
#ifdef CONFIG_DEBUG_LL
#ifdef CONFIG_DEBUG_LL
{
IO_ADDRESS
(
REALVIEW_UART0_BASE
),
REALVIEW_UART0_BASE
,
SZ_4K
,
MT_DEVICE
},
{
.
virtual
=
IO_ADDRESS
(
REALVIEW_UART0_BASE
),
.
pfn
=
__phys_to_pfn
(
REALVIEW_UART0_BASE
),
.
length
=
SZ_4K
,
.
type
=
MT_DEVICE
,
}
#endif
#endif
};
};
...
...
arch/arm/mm/init.c
View file @
cfa024f4
...
@@ -486,10 +486,17 @@ static void __init devicemaps_init(struct machine_desc *mdesc)
...
@@ -486,10 +486,17 @@ static void __init devicemaps_init(struct machine_desc *mdesc)
/*
/*
* Ask the machine support to map in the statically mapped devices.
* Ask the machine support to map in the statically mapped devices.
* After this point, we can start to touch devices again.
*/
*/
if
(
mdesc
->
map_io
)
if
(
mdesc
->
map_io
)
mdesc
->
map_io
();
mdesc
->
map_io
();
/*
* Finally flush the tlb again - this ensures that we're in a
* consistent state wrt the writebuffer if the writebuffer needs
* draining. After this point, we can start to touch devices
* again.
*/
local_flush_tlb_all
();
}
}
/*
/*
...
...
drivers/video/amba-clcd.c
View file @
cfa024f4
...
@@ -505,14 +505,14 @@ static int clcdfb_remove(struct amba_device *dev)
...
@@ -505,14 +505,14 @@ static int clcdfb_remove(struct amba_device *dev)
static
struct
amba_id
clcdfb_id_table
[]
=
{
static
struct
amba_id
clcdfb_id_table
[]
=
{
{
{
.
id
=
0x00041110
,
.
id
=
0x00041110
,
.
mask
=
0x000ffff
f
,
.
mask
=
0x000ffff
e
,
},
},
{
0
,
0
},
{
0
,
0
},
};
};
static
struct
amba_driver
clcd_driver
=
{
static
struct
amba_driver
clcd_driver
=
{
.
drv
=
{
.
drv
=
{
.
name
=
"clcd-pl11
0
"
,
.
name
=
"clcd-pl11
x
"
,
},
},
.
probe
=
clcdfb_probe
,
.
probe
=
clcdfb_probe
,
.
remove
=
clcdfb_remove
,
.
remove
=
clcdfb_remove
,
...
...
include/asm-arm/arch-ixp4xx/io.h
View file @
cfa024f4
...
@@ -80,9 +80,9 @@ __ixp4xx_iounmap(void __iomem *addr)
...
@@ -80,9 +80,9 @@ __ixp4xx_iounmap(void __iomem *addr)
#define __arch_ioremap(a, s, f, x) __ixp4xx_ioremap(a, s, f, x)
#define __arch_ioremap(a, s, f, x) __ixp4xx_ioremap(a, s, f, x)
#define __arch_iounmap(a) __ixp4xx_iounmap(a)
#define __arch_iounmap(a) __ixp4xx_iounmap(a)
#define writeb(
p, v) __ixp4xx_writeb(p, v
)
#define writeb(
v, p) __ixp4xx_writeb(v, p
)
#define writew(
p, v) __ixp4xx_writew(p, v
)
#define writew(
v, p) __ixp4xx_writew(v, p
)
#define writel(
p, v) __ixp4xx_writel(p, v
)
#define writel(
v, p) __ixp4xx_writel(v, p
)
#define writesb(p, v, l) __ixp4xx_writesb(p, v, l)
#define writesb(p, v, l) __ixp4xx_writesb(p, v, l)
#define writesw(p, v, l) __ixp4xx_writesw(p, v, l)
#define writesw(p, v, l) __ixp4xx_writesw(p, v, l)
...
@@ -97,8 +97,9 @@ __ixp4xx_iounmap(void __iomem *addr)
...
@@ -97,8 +97,9 @@ __ixp4xx_iounmap(void __iomem *addr)
#define readsl(p, v, l) __ixp4xx_readsl(p, v, l)
#define readsl(p, v, l) __ixp4xx_readsl(p, v, l)
static
inline
void
static
inline
void
__ixp4xx_writeb
(
u8
value
,
u32
addr
)
__ixp4xx_writeb
(
u8
value
,
volatile
void
__iomem
*
p
)
{
{
u32
addr
=
(
u32
)
p
;
u32
n
,
byte_enables
,
data
;
u32
n
,
byte_enables
,
data
;
if
(
addr
>=
VMALLOC_START
)
{
if
(
addr
>=
VMALLOC_START
)
{
...
@@ -113,15 +114,16 @@ __ixp4xx_writeb(u8 value, u32 addr)
...
@@ -113,15 +114,16 @@ __ixp4xx_writeb(u8 value, u32 addr)
}
}
static
inline
void
static
inline
void
__ixp4xx_writesb
(
u32
bus_addr
,
const
u8
*
vaddr
,
int
count
)
__ixp4xx_writesb
(
volatile
void
__iomem
*
bus_addr
,
const
u8
*
vaddr
,
int
count
)
{
{
while
(
count
--
)
while
(
count
--
)
writeb
(
*
vaddr
++
,
bus_addr
);
writeb
(
*
vaddr
++
,
bus_addr
);
}
}
static
inline
void
static
inline
void
__ixp4xx_writew
(
u16
value
,
u32
addr
)
__ixp4xx_writew
(
u16
value
,
volatile
void
__iomem
*
p
)
{
{
u32
addr
=
(
u32
)
p
;
u32
n
,
byte_enables
,
data
;
u32
n
,
byte_enables
,
data
;
if
(
addr
>=
VMALLOC_START
)
{
if
(
addr
>=
VMALLOC_START
)
{
...
@@ -136,15 +138,16 @@ __ixp4xx_writew(u16 value, u32 addr)
...
@@ -136,15 +138,16 @@ __ixp4xx_writew(u16 value, u32 addr)
}
}
static
inline
void
static
inline
void
__ixp4xx_writesw
(
u32
bus_addr
,
const
u16
*
vaddr
,
int
count
)
__ixp4xx_writesw
(
volatile
void
__iomem
*
bus_addr
,
const
u16
*
vaddr
,
int
count
)
{
{
while
(
count
--
)
while
(
count
--
)
writew
(
*
vaddr
++
,
bus_addr
);
writew
(
*
vaddr
++
,
bus_addr
);
}
}
static
inline
void
static
inline
void
__ixp4xx_writel
(
u32
value
,
u32
addr
)
__ixp4xx_writel
(
u32
value
,
volatile
void
__iomem
*
p
)
{
{
u32
addr
=
(
u32
)
p
;
if
(
addr
>=
VMALLOC_START
)
{
if
(
addr
>=
VMALLOC_START
)
{
__raw_writel
(
value
,
addr
);
__raw_writel
(
value
,
addr
);
return
;
return
;
...
@@ -154,15 +157,16 @@ __ixp4xx_writel(u32 value, u32 addr)
...
@@ -154,15 +157,16 @@ __ixp4xx_writel(u32 value, u32 addr)
}
}
static
inline
void
static
inline
void
__ixp4xx_writesl
(
u32
bus_addr
,
const
u32
*
vaddr
,
int
count
)
__ixp4xx_writesl
(
volatile
void
__iomem
*
bus_addr
,
const
u32
*
vaddr
,
int
count
)
{
{
while
(
count
--
)
while
(
count
--
)
writel
(
*
vaddr
++
,
bus_addr
);
writel
(
*
vaddr
++
,
bus_addr
);
}
}
static
inline
unsigned
char
static
inline
unsigned
char
__ixp4xx_readb
(
u32
addr
)
__ixp4xx_readb
(
const
volatile
void
__iomem
*
p
)
{
{
u32
addr
=
(
u32
)
p
;
u32
n
,
byte_enables
,
data
;
u32
n
,
byte_enables
,
data
;
if
(
addr
>=
VMALLOC_START
)
if
(
addr
>=
VMALLOC_START
)
...
@@ -177,15 +181,16 @@ __ixp4xx_readb(u32 addr)
...
@@ -177,15 +181,16 @@ __ixp4xx_readb(u32 addr)
}
}
static
inline
void
static
inline
void
__ixp4xx_readsb
(
u32
bus_addr
,
u8
*
vaddr
,
u32
count
)
__ixp4xx_readsb
(
const
volatile
void
__iomem
*
bus_addr
,
u8
*
vaddr
,
u32
count
)
{
{
while
(
count
--
)
while
(
count
--
)
*
vaddr
++
=
readb
(
bus_addr
);
*
vaddr
++
=
readb
(
bus_addr
);
}
}
static
inline
unsigned
short
static
inline
unsigned
short
__ixp4xx_readw
(
u32
addr
)
__ixp4xx_readw
(
const
volatile
void
__iomem
*
p
)
{
{
u32
addr
=
(
u32
)
p
;
u32
n
,
byte_enables
,
data
;
u32
n
,
byte_enables
,
data
;
if
(
addr
>=
VMALLOC_START
)
if
(
addr
>=
VMALLOC_START
)
...
@@ -200,15 +205,16 @@ __ixp4xx_readw(u32 addr)
...
@@ -200,15 +205,16 @@ __ixp4xx_readw(u32 addr)
}
}
static
inline
void
static
inline
void
__ixp4xx_readsw
(
u32
bus_addr
,
u16
*
vaddr
,
u32
count
)
__ixp4xx_readsw
(
const
volatile
void
__iomem
*
bus_addr
,
u16
*
vaddr
,
u32
count
)
{
{
while
(
count
--
)
while
(
count
--
)
*
vaddr
++
=
readw
(
bus_addr
);
*
vaddr
++
=
readw
(
bus_addr
);
}
}
static
inline
unsigned
long
static
inline
unsigned
long
__ixp4xx_readl
(
u32
addr
)
__ixp4xx_readl
(
const
volatile
void
__iomem
*
p
)
{
{
u32
addr
=
(
u32
)
p
;
u32
data
;
u32
data
;
if
(
addr
>=
VMALLOC_START
)
if
(
addr
>=
VMALLOC_START
)
...
@@ -221,7 +227,7 @@ __ixp4xx_readl(u32 addr)
...
@@ -221,7 +227,7 @@ __ixp4xx_readl(u32 addr)
}
}
static
inline
void
static
inline
void
__ixp4xx_readsl
(
u32
bus_addr
,
u32
*
vaddr
,
u32
count
)
__ixp4xx_readsl
(
const
volatile
void
__iomem
*
bus_addr
,
u32
*
vaddr
,
u32
count
)
{
{
while
(
count
--
)
while
(
count
--
)
*
vaddr
++
=
readl
(
bus_addr
);
*
vaddr
++
=
readl
(
bus_addr
);
...
@@ -239,7 +245,7 @@ __ixp4xx_readsl(u32 bus_addr, u32 *vaddr, u32 count)
...
@@ -239,7 +245,7 @@ __ixp4xx_readsl(u32 bus_addr, u32 *vaddr, u32 count)
eth_copy_and_sum((s),__mem_pci(c),(l),(b))
eth_copy_and_sum((s),__mem_pci(c),(l),(b))
static
inline
int
static
inline
int
check_signature
(
unsigned
long
bus_addr
,
const
unsigned
char
*
signature
,
check_signature
(
const
unsigned
char
__iomem
*
bus_addr
,
const
unsigned
char
*
signature
,
int
length
)
int
length
)
{
{
int
retval
=
0
;
int
retval
=
0
;
...
@@ -389,7 +395,7 @@ __ixp4xx_insl(u32 io_addr, u32 *vaddr, u32 count)
...
@@ -389,7 +395,7 @@ __ixp4xx_insl(u32 io_addr, u32 *vaddr, u32 count)
#define __is_io_address(p) (((unsigned long)p >= PIO_OFFSET) && \
#define __is_io_address(p) (((unsigned long)p >= PIO_OFFSET) && \
((unsigned long)p <= (PIO_MASK + PIO_OFFSET)))
((unsigned long)p <= (PIO_MASK + PIO_OFFSET)))
static
inline
unsigned
int
static
inline
unsigned
int
__ixp4xx_ioread8
(
void
__iomem
*
addr
)
__ixp4xx_ioread8
(
const
void
__iomem
*
addr
)
{
{
unsigned
long
port
=
(
unsigned
long
__force
)
addr
;
unsigned
long
port
=
(
unsigned
long
__force
)
addr
;
if
(
__is_io_address
(
port
))
if
(
__is_io_address
(
port
))
...
@@ -398,12 +404,12 @@ __ixp4xx_ioread8(void __iomem *addr)
...
@@ -398,12 +404,12 @@ __ixp4xx_ioread8(void __iomem *addr)
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
return
(
unsigned
int
)
__raw_readb
(
port
);
return
(
unsigned
int
)
__raw_readb
(
port
);
#else
#else
return
(
unsigned
int
)
__ixp4xx_readb
(
port
);
return
(
unsigned
int
)
__ixp4xx_readb
(
addr
);
#endif
#endif
}
}
static
inline
void
static
inline
void
__ixp4xx_ioread8_rep
(
void
__iomem
*
addr
,
void
*
vaddr
,
u32
count
)
__ixp4xx_ioread8_rep
(
const
void
__iomem
*
addr
,
void
*
vaddr
,
u32
count
)
{
{
unsigned
long
port
=
(
unsigned
long
__force
)
addr
;
unsigned
long
port
=
(
unsigned
long
__force
)
addr
;
if
(
__is_io_address
(
port
))
if
(
__is_io_address
(
port
))
...
@@ -412,12 +418,12 @@ __ixp4xx_ioread8_rep(void __iomem *addr, void *vaddr, u32 count)
...
@@ -412,12 +418,12 @@ __ixp4xx_ioread8_rep(void __iomem *addr, void *vaddr, u32 count)
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
__raw_readsb
(
addr
,
vaddr
,
count
);
__raw_readsb
(
addr
,
vaddr
,
count
);
#else
#else
__ixp4xx_readsb
(
port
,
vaddr
,
count
);
__ixp4xx_readsb
(
addr
,
vaddr
,
count
);
#endif
#endif
}
}
static
inline
unsigned
int
static
inline
unsigned
int
__ixp4xx_ioread16
(
void
__iomem
*
addr
)
__ixp4xx_ioread16
(
const
void
__iomem
*
addr
)
{
{
unsigned
long
port
=
(
unsigned
long
__force
)
addr
;
unsigned
long
port
=
(
unsigned
long
__force
)
addr
;
if
(
__is_io_address
(
port
))
if
(
__is_io_address
(
port
))
...
@@ -426,12 +432,12 @@ __ixp4xx_ioread16(void __iomem *addr)
...
@@ -426,12 +432,12 @@ __ixp4xx_ioread16(void __iomem *addr)
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
return
le16_to_cpu
(
__raw_readw
((
u32
)
port
));
return
le16_to_cpu
(
__raw_readw
((
u32
)
port
));
#else
#else
return
(
unsigned
int
)
__ixp4xx_readw
(
(
u32
)
port
);
return
(
unsigned
int
)
__ixp4xx_readw
(
addr
);
#endif
#endif
}
}
static
inline
void
static
inline
void
__ixp4xx_ioread16_rep
(
void
__iomem
*
addr
,
void
*
vaddr
,
u32
count
)
__ixp4xx_ioread16_rep
(
const
void
__iomem
*
addr
,
void
*
vaddr
,
u32
count
)
{
{
unsigned
long
port
=
(
unsigned
long
__force
)
addr
;
unsigned
long
port
=
(
unsigned
long
__force
)
addr
;
if
(
__is_io_address
(
port
))
if
(
__is_io_address
(
port
))
...
@@ -440,12 +446,12 @@ __ixp4xx_ioread16_rep(void __iomem *addr, void *vaddr, u32 count)
...
@@ -440,12 +446,12 @@ __ixp4xx_ioread16_rep(void __iomem *addr, void *vaddr, u32 count)
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
__raw_readsw
(
addr
,
vaddr
,
count
);
__raw_readsw
(
addr
,
vaddr
,
count
);
#else
#else
__ixp4xx_readsw
(
port
,
vaddr
,
count
);
__ixp4xx_readsw
(
addr
,
vaddr
,
count
);
#endif
#endif
}
}
static
inline
unsigned
int
static
inline
unsigned
int
__ixp4xx_ioread32
(
void
__iomem
*
addr
)
__ixp4xx_ioread32
(
const
void
__iomem
*
addr
)
{
{
unsigned
long
port
=
(
unsigned
long
__force
)
addr
;
unsigned
long
port
=
(
unsigned
long
__force
)
addr
;
if
(
__is_io_address
(
port
))
if
(
__is_io_address
(
port
))
...
@@ -454,13 +460,13 @@ __ixp4xx_ioread32(void __iomem *addr)
...
@@ -454,13 +460,13 @@ __ixp4xx_ioread32(void __iomem *addr)
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
return
le32_to_cpu
(
__raw_readl
((
u32
)
port
));
return
le32_to_cpu
(
__raw_readl
((
u32
)
port
));
#else
#else
return
(
unsigned
int
)
__ixp4xx_readl
(
(
u32
)
port
);
return
(
unsigned
int
)
__ixp4xx_readl
(
addr
);
#endif
#endif
}
}
}
}
static
inline
void
static
inline
void
__ixp4xx_ioread32_rep
(
void
__iomem
*
addr
,
void
*
vaddr
,
u32
count
)
__ixp4xx_ioread32_rep
(
const
void
__iomem
*
addr
,
void
*
vaddr
,
u32
count
)
{
{
unsigned
long
port
=
(
unsigned
long
__force
)
addr
;
unsigned
long
port
=
(
unsigned
long
__force
)
addr
;
if
(
__is_io_address
(
port
))
if
(
__is_io_address
(
port
))
...
@@ -469,7 +475,7 @@ __ixp4xx_ioread32_rep(void __iomem *addr, void *vaddr, u32 count)
...
@@ -469,7 +475,7 @@ __ixp4xx_ioread32_rep(void __iomem *addr, void *vaddr, u32 count)
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
__raw_readsl
(
addr
,
vaddr
,
count
);
__raw_readsl
(
addr
,
vaddr
,
count
);
#else
#else
__ixp4xx_readsl
(
port
,
vaddr
,
count
);
__ixp4xx_readsl
(
addr
,
vaddr
,
count
);
#endif
#endif
}
}
...
@@ -483,7 +489,7 @@ __ixp4xx_iowrite8(u8 value, void __iomem *addr)
...
@@ -483,7 +489,7 @@ __ixp4xx_iowrite8(u8 value, void __iomem *addr)
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
__raw_writeb
(
value
,
port
);
__raw_writeb
(
value
,
port
);
#else
#else
__ixp4xx_writeb
(
value
,
port
);
__ixp4xx_writeb
(
value
,
addr
);
#endif
#endif
}
}
...
@@ -497,7 +503,7 @@ __ixp4xx_iowrite8_rep(void __iomem *addr, const void *vaddr, u32 count)
...
@@ -497,7 +503,7 @@ __ixp4xx_iowrite8_rep(void __iomem *addr, const void *vaddr, u32 count)
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
__raw_writesb
(
addr
,
vaddr
,
count
);
__raw_writesb
(
addr
,
vaddr
,
count
);
#else
#else
__ixp4xx_writesb
(
port
,
vaddr
,
count
);
__ixp4xx_writesb
(
addr
,
vaddr
,
count
);
#endif
#endif
}
}
...
@@ -511,7 +517,7 @@ __ixp4xx_iowrite16(u16 value, void __iomem *addr)
...
@@ -511,7 +517,7 @@ __ixp4xx_iowrite16(u16 value, void __iomem *addr)
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
__raw_writew
(
cpu_to_le16
(
value
),
addr
);
__raw_writew
(
cpu_to_le16
(
value
),
addr
);
#else
#else
__ixp4xx_writew
(
value
,
port
);
__ixp4xx_writew
(
value
,
addr
);
#endif
#endif
}
}
...
@@ -525,7 +531,7 @@ __ixp4xx_iowrite16_rep(void __iomem *addr, const void *vaddr, u32 count)
...
@@ -525,7 +531,7 @@ __ixp4xx_iowrite16_rep(void __iomem *addr, const void *vaddr, u32 count)
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
__raw_writesw
(
addr
,
vaddr
,
count
);
__raw_writesw
(
addr
,
vaddr
,
count
);
#else
#else
__ixp4xx_writesw
(
port
,
vaddr
,
count
);
__ixp4xx_writesw
(
addr
,
vaddr
,
count
);
#endif
#endif
}
}
...
@@ -539,7 +545,7 @@ __ixp4xx_iowrite32(u32 value, void __iomem *addr)
...
@@ -539,7 +545,7 @@ __ixp4xx_iowrite32(u32 value, void __iomem *addr)
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
__raw_writel
(
cpu_to_le32
(
value
),
port
);
__raw_writel
(
cpu_to_le32
(
value
),
port
);
#else
#else
__ixp4xx_writel
(
value
,
port
);
__ixp4xx_writel
(
value
,
addr
);
#endif
#endif
}
}
...
@@ -553,7 +559,7 @@ __ixp4xx_iowrite32_rep(void __iomem *addr, const void *vaddr, u32 count)
...
@@ -553,7 +559,7 @@ __ixp4xx_iowrite32_rep(void __iomem *addr, const void *vaddr, u32 count)
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
#ifndef CONFIG_IXP4XX_INDIRECT_PCI
__raw_writesl
(
addr
,
vaddr
,
count
);
__raw_writesl
(
addr
,
vaddr
,
count
);
#else
#else
__ixp4xx_writesl
(
port
,
vaddr
,
count
);
__ixp4xx_writesl
(
addr
,
vaddr
,
count
);
#endif
#endif
}
}
...
...
include/asm-arm/arch-realview/memory.h
View file @
cfa024f4
...
@@ -23,7 +23,7 @@
...
@@ -23,7 +23,7 @@
/*
/*
* Physical DRAM offset.
* Physical DRAM offset.
*/
*/
#define PHYS_OFFSET
(0x00000000UL
)
#define PHYS_OFFSET
UL(0x00000000
)
/*
/*
* Virtual view <-> DMA view memory address translations
* Virtual view <-> DMA view memory address translations
...
...
include/asm-arm/cpu.h
View file @
cfa024f4
...
@@ -16,6 +16,7 @@
...
@@ -16,6 +16,7 @@
struct
cpuinfo_arm
{
struct
cpuinfo_arm
{
struct
cpu
cpu
;
struct
cpu
cpu
;
#ifdef CONFIG_SMP
#ifdef CONFIG_SMP
struct
task_struct
*
idle
;
unsigned
int
loops_per_jiffy
;
unsigned
int
loops_per_jiffy
;
#endif
#endif
};
};
...
...
include/asm-arm/irq.h
View file @
cfa024f4
...
@@ -47,5 +47,6 @@ struct irqaction;
...
@@ -47,5 +47,6 @@ struct irqaction;
struct
pt_regs
;
struct
pt_regs
;
int
handle_IRQ_event
(
unsigned
int
,
struct
pt_regs
*
,
struct
irqaction
*
);
int
handle_IRQ_event
(
unsigned
int
,
struct
pt_regs
*
,
struct
irqaction
*
);
extern
void
migrate_irqs
(
void
);
#endif
#endif
include/asm-arm/smp.h
View file @
cfa024f4
...
@@ -66,4 +66,14 @@ struct secondary_data {
...
@@ -66,4 +66,14 @@ struct secondary_data {
};
};
extern
struct
secondary_data
secondary_data
;
extern
struct
secondary_data
secondary_data
;
extern
int
__cpu_disable
(
void
);
extern
int
mach_cpu_disable
(
unsigned
int
cpu
);
extern
void
__cpu_die
(
unsigned
int
cpu
);
extern
void
cpu_die
(
void
);
extern
void
platform_cpu_die
(
unsigned
int
cpu
);
extern
int
platform_cpu_kill
(
unsigned
int
cpu
);
extern
void
platform_cpu_enable
(
unsigned
int
cpu
);
#endif
/* ifndef __ASM_ARM_SMP_H */
#endif
/* ifndef __ASM_ARM_SMP_H */
include/asm-arm/spinlock.h
View file @
cfa024f4
...
@@ -80,7 +80,7 @@ static inline void __raw_spin_unlock(raw_spinlock_t *lock)
...
@@ -80,7 +80,7 @@ static inline void __raw_spin_unlock(raw_spinlock_t *lock)
*/
*/
#define rwlock_is_locked(x) (*((volatile unsigned int *)(x)) != 0)
#define rwlock_is_locked(x) (*((volatile unsigned int *)(x)) != 0)
static
inline
void
__raw_write_lock
(
rwlock_t
*
rw
)
static
inline
void
__raw_write_lock
(
r
aw_r
wlock_t
*
rw
)
{
{
unsigned
long
tmp
;
unsigned
long
tmp
;
...
@@ -97,7 +97,7 @@ static inline void __raw_write_lock(rwlock_t *rw)
...
@@ -97,7 +97,7 @@ static inline void __raw_write_lock(rwlock_t *rw)
smp_mb
();
smp_mb
();
}
}
static
inline
int
__raw_write_trylock
(
rwlock_t
*
rw
)
static
inline
int
__raw_write_trylock
(
r
aw_r
wlock_t
*
rw
)
{
{
unsigned
long
tmp
;
unsigned
long
tmp
;
...
@@ -157,7 +157,7 @@ static inline void __raw_read_lock(raw_rwlock_t *rw)
...
@@ -157,7 +157,7 @@ static inline void __raw_read_lock(raw_rwlock_t *rw)
smp_mb
();
smp_mb
();
}
}
static
inline
void
__raw_read_unlock
(
rwlock_t
*
rw
)
static
inline
void
__raw_read_unlock
(
r
aw_r
wlock_t
*
rw
)
{
{
unsigned
long
tmp
,
tmp2
;
unsigned
long
tmp
,
tmp2
;
...
...
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