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
9f04012c
Commit
9f04012c
authored
Nov 08, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/home/rmk/linux-2.6-arm
parents
329f7dba
72274c9e
Changes
24
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
629 additions
and
173 deletions
+629
-173
arch/arm/Kconfig
arch/arm/Kconfig
+10
-0
arch/arm/boot/compressed/misc.c
arch/arm/boot/compressed/misc.c
+6
-0
arch/arm/common/scoop.c
arch/arm/common/scoop.c
+0
-6
arch/arm/kernel/armksyms.c
arch/arm/kernel/armksyms.c
+4
-0
arch/arm/kernel/entry-armv.S
arch/arm/kernel/entry-armv.S
+7
-0
arch/arm/kernel/irq.c
arch/arm/kernel/irq.c
+2
-1
arch/arm/kernel/smp.c
arch/arm/kernel/smp.c
+38
-4
arch/arm/mach-pxa/corgi.c
arch/arm/mach-pxa/corgi.c
+38
-10
arch/arm/mach-pxa/poodle.c
arch/arm/mach-pxa/poodle.c
+30
-2
arch/arm/mach-pxa/spitz.c
arch/arm/mach-pxa/spitz.c
+76
-19
arch/arm/mach-pxa/time.c
arch/arm/mach-pxa/time.c
+5
-3
arch/arm/mach-pxa/tosa.c
arch/arm/mach-pxa/tosa.c
+148
-4
arch/arm/mach-realview/core.c
arch/arm/mach-realview/core.c
+5
-0
arch/arm/mach-realview/platsmp.c
arch/arm/mach-realview/platsmp.c
+5
-5
arch/arm/mach-s3c2410/Kconfig
arch/arm/mach-s3c2410/Kconfig
+8
-0
arch/arm/mach-s3c2410/mach-bast.c
arch/arm/mach-s3c2410/mach-bast.c
+52
-21
arch/arm/mach-s3c2410/mach-vr1000.c
arch/arm/mach-s3c2410/mach-vr1000.c
+38
-18
arch/arm/mach-sa1100/time.c
arch/arm/mach-sa1100/time.c
+5
-3
drivers/pcmcia/pxa2xx_sharpsl.c
drivers/pcmcia/pxa2xx_sharpsl.c
+68
-72
drivers/video/amba-clcd.c
drivers/video/amba-clcd.c
+1
-1
include/asm-arm/arch-s3c2410/uncompress.h
include/asm-arm/arch-s3c2410/uncompress.h
+20
-2
include/asm-arm/hardirq.h
include/asm-arm/hardirq.h
+1
-0
include/asm-arm/hardware/scoop.h
include/asm-arm/hardware/scoop.h
+8
-2
include/asm-arm/smp.h
include/asm-arm/smp.h
+54
-0
No files found.
arch/arm/Kconfig
View file @
9f04012c
...
...
@@ -356,6 +356,16 @@ config HOTPLUG_CPU
Say Y here to experiment with turning CPUs off and on. CPUs
can be controlled through /sys/devices/system/cpu.
config LOCAL_TIMERS
bool "Use local timer interrupts"
depends on SMP && n
default y
help
Enable support for local timers on SMP platforms, rather then the
legacy IPI broadcast method. Local timers allows the system
accounting to be spread across the timer interval, preventing a
"thundering herd" at every timer tick.
config PREEMPT
bool "Preemptible Kernel (EXPERIMENTAL)"
depends on EXPERIMENTAL
...
...
arch/arm/boot/compressed/misc.c
View file @
9f04012c
...
...
@@ -283,8 +283,14 @@ void flush_window(void)
putstr
(
"."
);
}
#ifndef arch_error
#define arch_error(x)
#endif
static
void
error
(
char
*
x
)
{
arch_error
(
x
);
putstr
(
"
\n\n
"
);
putstr
(
x
);
putstr
(
"
\n\n
-- System halted"
);
...
...
arch/arm/common/scoop.c
View file @
9f04012c
...
...
@@ -19,12 +19,6 @@
#define SCOOP_REG(d,adr) (*(volatile unsigned short*)(d +(adr)))
/* PCMCIA to Scoop linkage structures for pxa2xx_sharpsl.c
There is no easy way to link multiple scoop devices into one
single entity for the pxa2xx_pcmcia device */
int
scoop_num
;
struct
scoop_pcmcia_dev
*
scoop_devs
;
struct
scoop_dev
{
void
*
base
;
spinlock_t
scoop_lock
;
...
...
arch/arm/kernel/armksyms.c
View file @
9f04012c
...
...
@@ -9,6 +9,7 @@
*/
#include <linux/module.h>
#include <linux/string.h>
#include <linux/cryptohash.h>
#include <linux/delay.h>
#include <linux/in6.h>
#include <linux/syscalls.h>
...
...
@@ -126,6 +127,9 @@ EXPORT_SYMBOL(__put_user_2);
EXPORT_SYMBOL
(
__put_user_4
);
EXPORT_SYMBOL
(
__put_user_8
);
/* crypto hash */
EXPORT_SYMBOL
(
sha_transform
);
/* gcc lib functions */
EXPORT_SYMBOL
(
__ashldi3
);
EXPORT_SYMBOL
(
__ashrdi3
);
...
...
arch/arm/kernel/entry-armv.S
View file @
9f04012c
...
...
@@ -47,6 +47,13 @@
movne
r0
,
sp
adrne
lr
,
1
b
bne
do_IPI
#ifdef CONFIG_LOCAL_TIMERS
test_for_ltirq
r0
,
r6
,
r5
,
lr
movne
r0
,
sp
adrne
lr
,
1
b
bne
do_local_timer
#endif
#endif
.
endm
...
...
arch/arm/kernel/irq.c
View file @
9f04012c
...
...
@@ -264,6 +264,7 @@ int show_interrupts(struct seq_file *p, void *v)
#endif
#ifdef CONFIG_SMP
show_ipi_list
(
p
);
show_local_irqs
(
p
);
#endif
seq_printf
(
p
,
"Err: %10lu
\n
"
,
irq_err_count
);
}
...
...
@@ -995,7 +996,7 @@ void __init init_irq_proc(void)
struct
proc_dir_entry
*
dir
;
int
irq
;
dir
=
proc_mkdir
(
"irq"
,
0
);
dir
=
proc_mkdir
(
"irq"
,
NULL
);
if
(
!
dir
)
return
;
...
...
arch/arm/kernel/smp.c
View file @
9f04012c
...
...
@@ -142,7 +142,7 @@ int __cpuinit __cpu_up(unsigned int cpu)
ret
=
-
EIO
;
}
secondary_data
.
stack
=
0
;
secondary_data
.
stack
=
NULL
;
secondary_data
.
pgdir
=
0
;
*
pmd_offset
(
pgd
,
PHYS_OFFSET
)
=
__pmd
(
0
);
...
...
@@ -184,6 +184,11 @@ int __cpuexit __cpu_disable(void)
*/
migrate_irqs
();
/*
* Stop the local timer for this CPU.
*/
local_timer_stop
(
cpu
);
/*
* Flush user cache and TLB mappings, and then remove this CPU
* from the vm mask set of all processes.
...
...
@@ -289,6 +294,11 @@ asmlinkage void __cpuinit secondary_start_kernel(void)
*/
cpu_set
(
cpu
,
cpu_online_map
);
/*
* Setup local timer for this CPU.
*/
local_timer_setup
(
cpu
);
/*
* OK, it's off to the idle thread for us
*/
...
...
@@ -359,8 +369,8 @@ static void send_ipi_message(cpumask_t callmap, enum ipi_msg_type msg)
* You must not call this function with disabled interrupts, from a
* hardware interrupt handler, nor from a bottom half handler.
*/
int
smp_call_function_on_cpu
(
void
(
*
func
)(
void
*
info
),
void
*
info
,
int
retry
,
int
wait
,
cpumask_t
callmap
)
static
int
smp_call_function_on_cpu
(
void
(
*
func
)(
void
*
info
),
void
*
info
,
int
retry
,
int
wait
,
cpumask_t
callmap
)
{
struct
smp_call_struct
data
;
unsigned
long
timeout
;
...
...
@@ -454,6 +464,18 @@ void show_ipi_list(struct seq_file *p)
seq_putc
(
p
,
'\n'
);
}
void
show_local_irqs
(
struct
seq_file
*
p
)
{
unsigned
int
cpu
;
seq_printf
(
p
,
"LOC: "
);
for_each_present_cpu
(
cpu
)
seq_printf
(
p
,
"%10u "
,
irq_stat
[
cpu
].
local_timer_irqs
);
seq_putc
(
p
,
'\n'
);
}
static
void
ipi_timer
(
struct
pt_regs
*
regs
)
{
int
user
=
user_mode
(
regs
);
...
...
@@ -464,6 +486,18 @@ static void ipi_timer(struct pt_regs *regs)
irq_exit
();
}
#ifdef CONFIG_LOCAL_TIMERS
asmlinkage
void
do_local_timer
(
struct
pt_regs
*
regs
)
{
int
cpu
=
smp_processor_id
();
if
(
local_timer_ack
())
{
irq_stat
[
cpu
].
local_timer_irqs
++
;
ipi_timer
(
regs
);
}
}
#endif
/*
* ipi_call_function - handle IPI from smp_call_function()
*
...
...
@@ -515,7 +549,7 @@ static void ipi_cpu_stop(unsigned int cpu)
*
* Bit 0 - Inter-processor function call
*/
void
do_IPI
(
struct
pt_regs
*
regs
)
asmlinkage
void
do_IPI
(
struct
pt_regs
*
regs
)
{
unsigned
int
cpu
=
smp_processor_id
();
struct
ipi_data
*
ipi
=
&
per_cpu
(
ipi_data
,
cpu
);
...
...
arch/arm/mach-pxa/corgi.c
View file @
9f04012c
...
...
@@ -62,6 +62,37 @@ static struct scoop_config corgi_scoop_setup = {
.
io_out
=
CORGI_SCOOP_IO_OUT
,
};
struct
platform_device
corgiscoop_device
=
{
.
name
=
"sharp-scoop"
,
.
id
=
-
1
,
.
dev
=
{
.
platform_data
=
&
corgi_scoop_setup
,
},
.
num_resources
=
ARRAY_SIZE
(
corgi_scoop_resources
),
.
resource
=
corgi_scoop_resources
,
};
static
void
corgi_pcmcia_init
(
void
)
{
/* Setup default state of GPIO outputs
before we enable them as outputs. */
GPSR
(
GPIO48_nPOE
)
=
GPIO_bit
(
GPIO48_nPOE
)
|
GPIO_bit
(
GPIO49_nPWE
)
|
GPIO_bit
(
GPIO50_nPIOR
)
|
GPIO_bit
(
GPIO51_nPIOW
)
|
GPIO_bit
(
GPIO52_nPCE_1
)
|
GPIO_bit
(
GPIO53_nPCE_2
);
pxa_gpio_mode
(
GPIO48_nPOE_MD
);
pxa_gpio_mode
(
GPIO49_nPWE_MD
);
pxa_gpio_mode
(
GPIO50_nPIOR_MD
);
pxa_gpio_mode
(
GPIO51_nPIOW_MD
);
pxa_gpio_mode
(
GPIO55_nPREG_MD
);
pxa_gpio_mode
(
GPIO56_nPWAIT_MD
);
pxa_gpio_mode
(
GPIO57_nIOIS16_MD
);
pxa_gpio_mode
(
GPIO52_nPCE_1_MD
);
pxa_gpio_mode
(
GPIO53_nPCE_2_MD
);
pxa_gpio_mode
(
GPIO54_pSKTSEL_MD
);
}
static
struct
scoop_pcmcia_dev
corgi_pcmcia_scoop
[]
=
{
{
.
dev
=
&
corgiscoop_device
.
dev
,
...
...
@@ -71,16 +102,14 @@ static struct scoop_pcmcia_dev corgi_pcmcia_scoop[] = {
},
};
struct
platform_device
corgiscoop_device
=
{
.
name
=
"sharp-scoop"
,
.
id
=
-
1
,
.
dev
=
{
.
platform_data
=
&
corgi_scoop_setup
,
},
.
num_resources
=
ARRAY_SIZE
(
corgi_scoop_resources
),
.
resource
=
corgi_scoop_resources
,
static
struct
scoop_pcmcia_config
corgi_pcmcia_config
=
{
.
devs
=
&
corgi_pcmcia_scoop
[
0
],
.
num_devs
=
1
,
.
pcmcia_init
=
corgi_pcmcia_init
,
};
EXPORT_SYMBOL
(
corgiscoop_device
);
/*
* Corgi SSP Device
...
...
@@ -294,8 +323,7 @@ static void __init corgi_init(void)
pxa_set_mci_info
(
&
corgi_mci_platform_data
);
pxa_set_ficp_info
(
&
corgi_ficp_platform_data
);
scoop_num
=
1
;
scoop_devs
=
&
corgi_pcmcia_scoop
[
0
];
platform_scoop_config
=
&
corgi_pcmcia_config
;
platform_add_devices
(
devices
,
ARRAY_SIZE
(
devices
));
}
...
...
arch/arm/mach-pxa/poodle.c
View file @
9f04012c
...
...
@@ -65,6 +65,27 @@ struct platform_device poodle_scoop_device = {
.
resource
=
poodle_scoop_resources
,
};
static
void
poodle_pcmcia_init
(
void
)
{
/* Setup default state of GPIO outputs
before we enable them as outputs. */
GPSR
(
GPIO48_nPOE
)
=
GPIO_bit
(
GPIO48_nPOE
)
|
GPIO_bit
(
GPIO49_nPWE
)
|
GPIO_bit
(
GPIO50_nPIOR
)
|
GPIO_bit
(
GPIO51_nPIOW
)
|
GPIO_bit
(
GPIO52_nPCE_1
)
|
GPIO_bit
(
GPIO53_nPCE_2
);
pxa_gpio_mode
(
GPIO48_nPOE_MD
);
pxa_gpio_mode
(
GPIO49_nPWE_MD
);
pxa_gpio_mode
(
GPIO50_nPIOR_MD
);
pxa_gpio_mode
(
GPIO51_nPIOW_MD
);
pxa_gpio_mode
(
GPIO55_nPREG_MD
);
pxa_gpio_mode
(
GPIO56_nPWAIT_MD
);
pxa_gpio_mode
(
GPIO57_nIOIS16_MD
);
pxa_gpio_mode
(
GPIO52_nPCE_1_MD
);
pxa_gpio_mode
(
GPIO53_nPCE_2_MD
);
pxa_gpio_mode
(
GPIO54_pSKTSEL_MD
);
}
static
struct
scoop_pcmcia_dev
poodle_pcmcia_scoop
[]
=
{
{
.
dev
=
&
poodle_scoop_device
.
dev
,
...
...
@@ -74,6 +95,14 @@ static struct scoop_pcmcia_dev poodle_pcmcia_scoop[] = {
},
};
static
struct
scoop_pcmcia_config
poodle_pcmcia_config
=
{
.
devs
=
&
poodle_pcmcia_scoop
[
0
],
.
num_devs
=
1
,
.
pcmcia_init
=
poodle_pcmcia_init
,
};
EXPORT_SYMBOL
(
poodle_scoop_device
);
/* LoCoMo device */
static
struct
resource
locomo_resources
[]
=
{
...
...
@@ -268,8 +297,7 @@ static void __init poodle_init(void)
pxa_set_mci_info
(
&
poodle_mci_platform_data
);
pxa_set_ficp_info
(
&
poodle_ficp_platform_data
);
scoop_num
=
1
;
scoop_devs
=
&
poodle_pcmcia_scoop
[
0
];
platform_scoop_config
=
&
poodle_pcmcia_config
;
ret
=
platform_add_devices
(
devices
,
ARRAY_SIZE
(
devices
));
if
(
ret
)
{
...
...
arch/arm/mach-pxa/spitz.c
View file @
9f04012c
...
...
@@ -104,6 +104,66 @@ struct platform_device spitzscoop2_device = {
.
resource
=
spitz_scoop2_resources
,
};
#define SPITZ_PWR_SD 0x01
#define SPITZ_PWR_CF 0x02
/* Power control is shared with between one of the CF slots and SD */
static
void
spitz_card_pwr_ctrl
(
int
device
,
unsigned
short
new_cpr
)
{
unsigned
short
cpr
=
read_scoop_reg
(
&
spitzscoop_device
.
dev
,
SCOOP_CPR
);
if
(
new_cpr
&
0x0007
)
{
set_scoop_gpio
(
&
spitzscoop_device
.
dev
,
SPITZ_SCP_CF_POWER
);
if
(
!
(
cpr
&
0x0002
)
&&
!
(
cpr
&
0x0004
))
mdelay
(
5
);
if
(
device
==
SPITZ_PWR_CF
)
cpr
|=
0x0002
;
if
(
device
==
SPITZ_PWR_SD
)
cpr
|=
0x0004
;
write_scoop_reg
(
&
spitzscoop_device
.
dev
,
SCOOP_CPR
,
cpr
|
new_cpr
);
}
else
{
if
(
device
==
SPITZ_PWR_CF
)
cpr
&=
~
0x0002
;
if
(
device
==
SPITZ_PWR_SD
)
cpr
&=
~
0x0004
;
write_scoop_reg
(
&
spitzscoop_device
.
dev
,
SCOOP_CPR
,
cpr
|
new_cpr
);
if
(
!
(
cpr
&
0x0002
)
&&
!
(
cpr
&
0x0004
))
{
mdelay
(
1
);
reset_scoop_gpio
(
&
spitzscoop_device
.
dev
,
SPITZ_SCP_CF_POWER
);
}
}
}
static
void
spitz_pcmcia_init
(
void
)
{
/* Setup default state of GPIO outputs
before we enable them as outputs. */
GPSR
(
GPIO48_nPOE
)
=
GPIO_bit
(
GPIO48_nPOE
)
|
GPIO_bit
(
GPIO49_nPWE
)
|
GPIO_bit
(
GPIO50_nPIOR
)
|
GPIO_bit
(
GPIO51_nPIOW
)
|
GPIO_bit
(
GPIO54_nPCE_2
);
GPSR
(
GPIO85_nPCE_1
)
=
GPIO_bit
(
GPIO85_nPCE_1
);
pxa_gpio_mode
(
GPIO48_nPOE_MD
);
pxa_gpio_mode
(
GPIO49_nPWE_MD
);
pxa_gpio_mode
(
GPIO50_nPIOR_MD
);
pxa_gpio_mode
(
GPIO51_nPIOW_MD
);
pxa_gpio_mode
(
GPIO55_nPREG_MD
);
pxa_gpio_mode
(
GPIO56_nPWAIT_MD
);
pxa_gpio_mode
(
GPIO57_nIOIS16_MD
);
pxa_gpio_mode
(
GPIO85_nPCE_1_MD
);
pxa_gpio_mode
(
GPIO54_nPCE_2_MD
);
pxa_gpio_mode
(
GPIO104_pSKTSEL_MD
);
}
static
void
spitz_pcmcia_pwr
(
struct
device
*
scoop
,
unsigned
short
cpr
,
int
nr
)
{
/* Only need to override behaviour for slot 0 */
if
(
nr
==
0
)
spitz_card_pwr_ctrl
(
SPITZ_PWR_CF
,
cpr
);
else
write_scoop_reg
(
scoop
,
SCOOP_CPR
,
cpr
);
}
static
struct
scoop_pcmcia_dev
spitz_pcmcia_scoop
[]
=
{
{
.
dev
=
&
spitzscoop_device
.
dev
,
...
...
@@ -117,6 +177,16 @@ static struct scoop_pcmcia_dev spitz_pcmcia_scoop[] = {
},
};
static
struct
scoop_pcmcia_config
spitz_pcmcia_config
=
{
.
devs
=
&
spitz_pcmcia_scoop
[
0
],
.
num_devs
=
2
,
.
pcmcia_init
=
spitz_pcmcia_init
,
.
power_ctrl
=
spitz_pcmcia_pwr
,
};
EXPORT_SYMBOL
(
spitzscoop_device
);
EXPORT_SYMBOL
(
spitzscoop2_device
);
/*
* Spitz SSP Device
...
...
@@ -235,27 +305,14 @@ static int spitz_mci_init(struct device *dev, irqreturn_t (*spitz_detect_int)(in
return
0
;
}
/* Power control is shared with one of the CF slots so we have a mess */
static
void
spitz_mci_setpower
(
struct
device
*
dev
,
unsigned
int
vdd
)
{
struct
pxamci_platform_data
*
p_d
=
dev
->
platform_data
;
unsigned
short
cpr
=
read_scoop_reg
(
&
spitzscoop_device
.
dev
,
SCOOP_CPR
);
if
((
1
<<
vdd
)
&
p_d
->
ocr_mask
)
{
/* printk(KERN_DEBUG "%s: on\n", __FUNCTION__); */
set_scoop_gpio
(
&
spitzscoop_device
.
dev
,
SPITZ_SCP_CF_POWER
);
mdelay
(
2
);
write_scoop_reg
(
&
spitzscoop_device
.
dev
,
SCOOP_CPR
,
cpr
|
0x04
);
}
else
{
/* printk(KERN_DEBUG "%s: off\n", __FUNCTION__); */
write_scoop_reg
(
&
spitzscoop_device
.
dev
,
SCOOP_CPR
,
cpr
&
~
0x04
);
if
(
!
(
cpr
|
0x02
))
{
mdelay
(
1
);
reset_scoop_gpio
(
&
spitzscoop_device
.
dev
,
SPITZ_SCP_CF_POWER
);
}
}
if
((
1
<<
vdd
)
&
p_d
->
ocr_mask
)
spitz_card_pwr_ctrl
(
SPITZ_PWR_SD
,
0x0004
);
else
spitz_card_pwr_ctrl
(
SPITZ_PWR_SD
,
0x0000
);
}
static
int
spitz_mci_get_ro
(
struct
device
*
dev
)
...
...
@@ -351,8 +408,8 @@ static void __init common_init(void)
static
void
__init
spitz_init
(
void
)
{
scoop_num
=
2
;
scoop_devs
=
&
spitz_pcmcia_scoop
[
0
];
platform_scoop_config
=
&
spitz_pcmcia_config
;
spitz_bl_machinfo
.
set_bl_intensity
=
spitz_bl_set_intensity
;
common_init
();
...
...
arch/arm/mach-pxa/time.c
View file @
9f04012c
...
...
@@ -132,11 +132,13 @@ static void __init pxa_timer_init(void)
tv
.
tv_sec
=
pxa_get_rtc_time
();
do_settimeofday
(
&
tv
);
OSMR0
=
0
;
/* set initial match at 0 */
OIER
=
0
;
/* disable any timer interrupts */
OSCR
=
LATCH
*
2
;
/* push OSCR out of the way */
OSMR0
=
LATCH
;
/* set initial match */
OSSR
=
0xf
;
/* clear status on all timers */
setup_irq
(
IRQ_OST0
,
&
pxa_timer_irq
);
OIER
|=
OIER_E0
;
/* enable match on timer 0 to cause interrupts */
OSCR
=
0
;
/* initialize free-running timer
, force first match
*/
OIER
=
OIER_E0
;
/* enable match on timer 0 to cause interrupts */
OSCR
=
0
;
/* initialize free-running timer */
}
#ifdef CONFIG_NO_IDLE_HZ
...
...
arch/arm/mach-pxa/tosa.c
View file @
9f04012c
...
...
@@ -98,6 +98,9 @@ struct platform_device tosascoop_jc_device = {
.
resource
=
tosa_scoop_jc_resources
,
};
/*
* PCMCIA
*/
static
struct
scoop_pcmcia_dev
tosa_pcmcia_scoop
[]
=
{
{
.
dev
=
&
tosascoop_device
.
dev
,
...
...
@@ -111,16 +114,155 @@ static struct scoop_pcmcia_dev tosa_pcmcia_scoop[] = {
},
};
static
void
tosa_pcmcia_init
(
void
)
{
/* Setup default state of GPIO outputs
before we enable them as outputs. */
GPSR
(
GPIO48_nPOE
)
=
GPIO_bit
(
GPIO48_nPOE
)
|
GPIO_bit
(
GPIO49_nPWE
)
|
GPIO_bit
(
GPIO50_nPIOR
)
|
GPIO_bit
(
GPIO51_nPIOW
)
|
GPIO_bit
(
GPIO52_nPCE_1
)
|
GPIO_bit
(
GPIO53_nPCE_2
);
pxa_gpio_mode
(
GPIO48_nPOE_MD
);
pxa_gpio_mode
(
GPIO49_nPWE_MD
);
pxa_gpio_mode
(
GPIO50_nPIOR_MD
);
pxa_gpio_mode
(
GPIO51_nPIOW_MD
);
pxa_gpio_mode
(
GPIO55_nPREG_MD
);
pxa_gpio_mode
(
GPIO56_nPWAIT_MD
);
pxa_gpio_mode
(
GPIO57_nIOIS16_MD
);
pxa_gpio_mode
(
GPIO52_nPCE_1_MD
);
pxa_gpio_mode
(
GPIO53_nPCE_2_MD
);
pxa_gpio_mode
(
GPIO54_pSKTSEL_MD
);
}
static
struct
scoop_pcmcia_config
tosa_pcmcia_config
=
{
.
devs
=
&
tosa_pcmcia_scoop
[
0
],
.
num_devs
=
2
,
.
pcmcia_init
=
tosa_pcmcia_init
,
};
/*
* USB Device Controller
*/
static
void
tosa_udc_command
(
int
cmd
)
{
switch
(
cmd
)
{
case
PXA2XX_UDC_CMD_CONNECT
:
set_scoop_gpio
(
&
tosascoop_jc_device
.
dev
,
TOSA_SCOOP_JC_USB_PULLUP
);
break
;
case
PXA2XX_UDC_CMD_DISCONNECT
:
reset_scoop_gpio
(
&
tosascoop_jc_device
.
dev
,
TOSA_SCOOP_JC_USB_PULLUP
);
break
;
}
}
static
int
tosa_udc_is_connected
(
void
)
{
return
((
GPLR
(
TOSA_GPIO_USB_IN
)
&
GPIO_bit
(
TOSA_GPIO_USB_IN
))
==
0
);
}
static
struct
pxa2xx_udc_mach_info
udc_info
__initdata
=
{
.
udc_command
=
tosa_udc_command
,
.
udc_is_connected
=
tosa_udc_is_connected
,
};
/*
* MMC/SD Device
*/
static
struct
pxamci_platform_data
tosa_mci_platform_data
;
static
int
tosa_mci_init
(
struct
device
*
dev
,
irqreturn_t
(
*
tosa_detect_int
)(
int
,
void
*
,
struct
pt_regs
*
),
void
*
data
)
{
int
err
;
/* setup GPIO for PXA25x MMC controller */
pxa_gpio_mode
(
GPIO6_MMCCLK_MD
);
pxa_gpio_mode
(
GPIO8_MMCCS0_MD
);
pxa_gpio_mode
(
TOSA_GPIO_nSD_DETECT
|
GPIO_IN
);
tosa_mci_platform_data
.
detect_delay
=
msecs_to_jiffies
(
250
);
err
=
request_irq
(
TOSA_IRQ_GPIO_nSD_DETECT
,
tosa_detect_int
,
SA_INTERRUPT
,
"MMC/SD card detect"
,
data
);
if
(
err
)
{
printk
(
KERN_ERR
"tosa_mci_init: MMC/SD: can't request MMC card detect IRQ
\n
"
);
return
-
1
;
}
set_irq_type
(
TOSA_IRQ_GPIO_nSD_DETECT
,
IRQT_BOTHEDGE
);
return
0
;
}
static
void
tosa_mci_setpower
(
struct
device
*
dev
,
unsigned
int
vdd
)
{
struct
pxamci_platform_data
*
p_d
=
dev
->
platform_data
;
if
((
1
<<
vdd
)
&
p_d
->
ocr_mask
)
{
set_scoop_gpio
(
&
tosascoop_device
.
dev
,
TOSA_SCOOP_PWR_ON
);
}
else
{
reset_scoop_gpio
(
&
tosascoop_device
.
dev
,
TOSA_SCOOP_PWR_ON
);
}
}
static
int
tosa_mci_get_ro
(
struct
device
*
dev
)
{
return
(
read_scoop_reg
(
&
tosascoop_device
.
dev
,
SCOOP_GPWR
)
&
TOSA_SCOOP_SD_WP
);
}
static
void
tosa_mci_exit
(
struct
device
*
dev
,
void
*
data
)
{
free_irq
(
TOSA_IRQ_GPIO_nSD_DETECT
,
data
);
}
static
struct
pxamci_platform_data
tosa_mci_platform_data
=
{
.
ocr_mask
=
MMC_VDD_32_33
|
MMC_VDD_33_34
,
.
init
=
tosa_mci_init
,
.
get_ro
=
tosa_mci_get_ro
,
.
setpower
=
tosa_mci_setpower
,
.
exit
=
tosa_mci_exit
,
};
/*
* Irda
*/
static
void
tosa_irda_transceiver_mode
(
struct
device
*
dev
,
int
mode
)
{
if
(
mode
&
IR_OFF
)
{
reset_scoop_gpio
(
&
tosascoop_device
.
dev
,
TOSA_SCOOP_IR_POWERDWN
);
pxa_gpio_mode
(
GPIO47_STTXD
|
GPIO_DFLT_LOW
);
pxa_gpio_mode
(
GPIO47_STTXD
|
GPIO_OUT
);
}
else
{
pxa_gpio_mode
(
GPIO47_STTXD_MD
);
set_scoop_gpio
(
&
tosascoop_device
.
dev
,
TOSA_SCOOP_IR_POWERDWN
);
}
}
static
struct
pxaficp_platform_data
tosa_ficp_platform_data
=
{
.
transceiver_cap
=
IR_SIRMODE
|
IR_OFF
,
.
transceiver_mode
=
tosa_irda_transceiver_mode
,
};
/*
* Tosa Keyboard
*/
static
struct
platform_device
tosakbd_device
=
{
.
name
=
"tosa-keyboard"
,
.
id
=
-
1
,
};
static
struct
platform_device
*
devices
[]
__initdata
=
{
&
tosascoop_device
,
&
tosascoop_jc_device
,
&
tosakbd_device
,
};
static
void
__init
tosa_init
(
void
)
{
pxa_gpio_mode
(
TOSA_GPIO_ON_RESET
|
GPIO_IN
);
pxa_gpio_mode
(
TOSA_GPIO_TC6393_INT
|
GPIO_IN
);
pxa_gpio_mode
(
TOSA_GPIO_USB_IN
|
GPIO_IN
);
/* setup sleep mode values */
PWER
=
0x00000002
;
...
...
@@ -131,13 +273,15 @@ static void __init tosa_init(void)
PGSR2
=
0x00014000
;
PCFR
|=
PCFR_OPDE
;
/
/ enable batt_fault
/
* enable batt_fault */
PMCR
=
0x01
;
platform_add_devices
(
devices
,
ARRAY_SIZE
(
devices
));
pxa_set_mci_info
(
&
tosa_mci_platform_data
);
pxa_set_udc_info
(
&
udc_info
);
pxa_set_ficp_info
(
&
tosa_ficp_platform_data
);
platform_scoop_config
=
&
tosa_pcmcia_config
;
scoop_num
=
2
;
scoop_devs
=
&
tosa_pcmcia_scoop
[
0
];
platform_add_devices
(
devices
,
ARRAY_SIZE
(
devices
));
}
static
void
__init
fixup_tosa
(
struct
machine_desc
*
desc
,
...
...
arch/arm/mach-realview/core.c
View file @
9f04012c
...
...
@@ -550,6 +550,11 @@ static irqreturn_t realview_timer_interrupt(int irq, void *dev_id, struct pt_reg
timer_tick
(
regs
);
#ifdef CONFIG_SMP
smp_send_timer
();
update_process_times
(
user_mode
(
regs
));
#endif
write_sequnlock
(
&
xtime_lock
);
return
IRQ_HANDLED
;
...
...
arch/arm/mach-realview/platsmp.c
View file @
9f04012c
...
...
@@ -32,7 +32,7 @@ static unsigned int __init get_core_count(void)
{
unsigned
int
ncores
;
ncores
=
__raw_readl
(
IO_ADDRESS
(
REALVIEW_MPCORE_SCU_BASE
)
+
SCU_CONFIG
);
ncores
=
__raw_readl
(
__io_address
(
REALVIEW_MPCORE_SCU_BASE
)
+
SCU_CONFIG
);
return
(
ncores
&
0x03
)
+
1
;
}
...
...
@@ -133,12 +133,12 @@ static void __init poke_milo(void)
#if 1
#define REALVIEW_SYS_FLAGSS_OFFSET 0x30
__raw_writel
(
virt_to_phys
(
realview_secondary_startup
),
(
IO_ADDRESS
(
REALVIEW_SYS_BASE
)
+
REALVIEW_SYS_FLAGSS_OFFSET
)
);
__io_address
(
REALVIEW_SYS_BASE
)
+
REALVIEW_SYS_FLAGSS_OFFSET
);
#define REALVIEW_SYS_FLAGSC_OFFSET 0x34
__raw_writel
(
3
,
(
IO_ADDRESS
(
REALVIEW_SYS_BASE
)
+
REALVIEW_SYS_FLAGSC_OFFSET
)
);
__io_address
(
REALVIEW_SYS_BASE
)
+
REALVIEW_SYS_FLAGSC_OFFSET
);
#endif
mb
();
...
...
arch/arm/mach-s3c2410/Kconfig
View file @
9f04012c
...
...
@@ -121,6 +121,14 @@ config S3C2410_BOOT_WATCHDOG
system resets depends on the value of PCLK. The timeout on an
200MHz s3c2410 should be about 30 seconds.
config S3C2410_BOOT_ERROR_RESET
bool "S3C2410 Reboot on decompression error"
depends on ARCH_S3C2410
help
Say y here to use the watchdog to reset the system if the
kernel decompressor detects an error during decompression.
comment "S3C2410 Setup"
config S3C2410_DMA
...
...
arch/arm/mach-s3c2410/mach-bast.c
View file @
9f04012c
...
...
@@ -89,32 +89,63 @@
/* macros to modify the physical addresses for io space */
#define PA_CS2(item) (
(item) + S3C2410_CS2
)
#define PA_CS3(item) (
(item) + S3C2410_CS3
)
#define PA_CS4(item) (
(item) + S3C2410_CS4
)
#define PA_CS5(item) (
(item) + S3C2410_CS5
)
#define PA_CS2(item) (
__phys_to_pfn((item) + S3C2410_CS2)
)
#define PA_CS3(item) (
__phys_to_pfn((item) + S3C2410_CS3)
)
#define PA_CS4(item) (
__phys_to_pfn((item) + S3C2410_CS4)
)
#define PA_CS5(item) (
__phys_to_pfn((item) + S3C2410_CS5)
)
static
struct
map_desc
bast_iodesc
[]
__initdata
=
{
/* ISA IO areas */
{
(
u32
)
S3C24XX_VA_ISA_BYTE
,
PA_CS2
(
BAST_PA_ISAIO
),
SZ_16M
,
MT_DEVICE
},
{
(
u32
)
S3C24XX_VA_ISA_WORD
,
PA_CS3
(
BAST_PA_ISAIO
),
SZ_16M
,
MT_DEVICE
},
/* we could possibly compress the next set down into a set of smaller tables
* pagetables, but that would mean using an L2 section, and it still means
* we cannot actually feed the same register to an LDR due to 16K spacing
*/
{
.
virtual
=
(
u32
)
S3C24XX_VA_ISA_BYTE
,
.
pfn
=
PA_CS2
(
BAST_PA_ISAIO
),
.
length
=
SZ_16M
,
.
type
=
MT_DEVICE
,
},
{
.
virtual
=
(
u32
)
S3C24XX_VA_ISA_WORD
,
.
pfn
=
PA_CS3
(
BAST_PA_ISAIO
),
.
length
=
SZ_16M
,
.
type
=
MT_DEVICE
,
},
/* bast CPLD control registers, and external interrupt controls */
{
(
u32
)
BAST_VA_CTRL1
,
BAST_PA_CTRL1
,
SZ_1M
,
MT_DEVICE
},
{
(
u32
)
BAST_VA_CTRL2
,
BAST_PA_CTRL2
,
SZ_1M
,
MT_DEVICE
},
{
(
u32
)
BAST_VA_CTRL3
,
BAST_PA_CTRL3
,
SZ_1M
,
MT_DEVICE
},
{
(
u32
)
BAST_VA_CTRL4
,
BAST_PA_CTRL4
,
SZ_1M
,
MT_DEVICE
},
{
.
virtual
=
(
u32
)
BAST_VA_CTRL1
,
.
pfn
=
__phys_to_pfn
(
BAST_PA_CTRL1
),
.
length
=
SZ_1M
,
.
type
=
MT_DEVICE
,
},
{
.
virtual
=
(
u32
)
BAST_VA_CTRL2
,
.
pfn
=
__phys_to_pfn
(
BAST_PA_CTRL2
),
.
length
=
SZ_1M
,
.
type
=
MT_DEVICE
,
},
{
.
virtual
=
(
u32
)
BAST_VA_CTRL3
,
.
pfn
=
__phys_to_pfn
(
BAST_PA_CTRL3
),
.
length
=
SZ_1M
,
.
type
=
MT_DEVICE
,
},
{
.
virtual
=
(
u32
)
BAST_VA_CTRL4
,
.
pfn
=
__phys_to_pfn
(
BAST_PA_CTRL4
),
.
length
=
SZ_1M
,
.
type
=
MT_DEVICE
,
},
/* PC104 IRQ mux */
{
(
u32
)
BAST_VA_PC104_IRQREQ
,
BAST_PA_PC104_IRQREQ
,
SZ_1M
,
MT_DEVICE
},
{
(
u32
)
BAST_VA_PC104_IRQRAW
,
BAST_PA_PC104_IRQRAW
,
SZ_1M
,
MT_DEVICE
},
{
(
u32
)
BAST_VA_PC104_IRQMASK
,
BAST_PA_PC104_IRQMASK
,
SZ_1M
,
MT_DEVICE
},
{
.
virtual
=
(
u32
)
BAST_VA_PC104_IRQREQ
,
.
pfn
=
__phys_to_pfn
(
BAST_PA_PC104_IRQREQ
),
.
length
=
SZ_1M
,
.
type
=
MT_DEVICE
,
},
{
.
virtual
=
(
u32
)
BAST_VA_PC104_IRQRAW
,
.
pfn
=
__phys_to_pfn
(
BAST_PA_PC104_IRQRAW
),
.
length
=
SZ_1M
,
.
type
=
MT_DEVICE
,
},
{
.
virtual
=
(
u32
)
BAST_VA_PC104_IRQMASK
,
.
pfn
=
__phys_to_pfn
(
BAST_PA_PC104_IRQMASK
),
.
length
=
SZ_1M
,
.
type
=
MT_DEVICE
,
},
/* peripheral space... one for each of fast/slow/byte/16bit */
/* note, ide is only decoded in word space, even though some registers
...
...
arch/arm/mach-s3c2410/mach-vr1000.c
View file @
9f04012c
...
...
@@ -74,27 +74,47 @@
/* macros to modify the physical addresses for io space */
#define PA_CS2(item) (
(item) + S3C2410_CS2
)
#define PA_CS3(item) (
(item) + S3C2410_CS3
)
#define PA_CS4(item) (
(item) + S3C2410_CS4
)
#define PA_CS5(item) (
(item) + S3C2410_CS5
)
#define PA_CS2(item) (
__phys_to_pfn((item) + S3C2410_CS2)
)
#define PA_CS3(item) (
__phys_to_pfn((item) + S3C2410_CS3)
)
#define PA_CS4(item) (
__phys_to_pfn((item) + S3C2410_CS4)
)
#define PA_CS5(item) (
__phys_to_pfn((item) + S3C2410_CS5)
)
static
struct
map_desc
vr1000_iodesc
[]
__initdata
=
{
/* ISA IO areas */
{
(
u32
)
S3C24XX_VA_ISA_BYTE
,
PA_CS2
(
BAST_PA_ISAIO
),
SZ_16M
,
MT_DEVICE
},
{
(
u32
)
S3C24XX_VA_ISA_WORD
,
PA_CS3
(
BAST_PA_ISAIO
),
SZ_16M
,
MT_DEVICE
},
/* we could possibly compress the next set down into a set of smaller tables
* pagetables, but that would mean using an L2 section, and it still means
* we cannot actually feed the same register to an LDR due to 16K spacing
*/
/* bast CPLD control registers, and external interrupt controls */
{
(
u32
)
VR1000_VA_CTRL1
,
VR1000_PA_CTRL1
,
SZ_1M
,
MT_DEVICE
},
{
(
u32
)
VR1000_VA_CTRL2
,
VR1000_PA_CTRL2
,
SZ_1M
,
MT_DEVICE
},
{
(
u32
)
VR1000_VA_CTRL3
,
VR1000_PA_CTRL3
,
SZ_1M
,
MT_DEVICE
},
{
(
u32
)
VR1000_VA_CTRL4
,
VR1000_PA_CTRL4
,
SZ_1M
,
MT_DEVICE
},
{
.
virtual
=
(
u32
)
S3C24XX_VA_ISA_BYTE
,
.
pfn
=
PA_CS2
(
BAST_PA_ISAIO
),
.
length
=
SZ_16M
,
.
type
=
MT_DEVICE
,
},
{
.
virtual
=
(
u32
)
S3C24XX_VA_ISA_WORD
,
.
pfn
=
PA_CS3
(
BAST_PA_ISAIO
),
.
length
=
SZ_16M
,
.
type
=
MT_DEVICE
,
},
/* CPLD control registers, and external interrupt controls */
{
.
virtual
=
(
u32
)
VR1000_VA_CTRL1
,
.
pfn
=
__phys_to_pfn
(
VR1000_PA_CTRL1
),
.
length
=
SZ_1M
,
.
type
=
MT_DEVICE
,
},
{
.
virtual
=
(
u32
)
VR1000_VA_CTRL2
,
.
pfn
=
__phys_to_pfn
(
VR1000_PA_CTRL2
),
.
length
=
SZ_1M
,
.
type
=
MT_DEVICE
,
},
{
.
virtual
=
(
u32
)
VR1000_VA_CTRL3
,
.
pfn
=
__phys_to_pfn
(
VR1000_PA_CTRL3
),
.
length
=
SZ_1M
,
.
type
=
MT_DEVICE
,
},
{
.
virtual
=
(
u32
)
VR1000_VA_CTRL4
,
.
pfn
=
__phys_to_pfn
(
VR1000_PA_CTRL4
),
.
length
=
SZ_1M
,
.
type
=
MT_DEVICE
,
},
/* peripheral space... one for each of fast/slow/byte/16bit */
/* note, ide is only decoded in word space, even though some registers
...
...
arch/arm/mach-sa1100/time.c
View file @
9f04012c
...
...
@@ -124,11 +124,13 @@ static void __init sa1100_timer_init(void)
tv
.
tv_sec
=
sa1100_get_rtc_time
();
do_settimeofday
(
&
tv
);
OSMR0
=
0
;
/* set initial match at 0 */
OIER
=
0
;
/* disable any timer interrupts */
OSCR
=
LATCH
*
2
;
/* push OSCR out of the way */
OSMR0
=
LATCH
;
/* set initial match */
OSSR
=
0xf
;
/* clear status on all timers */
setup_irq
(
IRQ_OST0
,
&
sa1100_timer_irq
);
OIER
|=
OIER_E0
;
/* enable match on timer 0 to cause interrupts */
OSCR
=
0
;
/* initialize free-running timer
, force first match
*/
OIER
=
OIER_E0
;
/* enable match on timer 0 to cause interrupts */
OSCR
=
0
;
/* initialize free-running timer */
}
#ifdef CONFIG_NO_IDLE_HZ
...
...
drivers/pcmcia/pxa2xx_sharpsl.c
View file @
9f04012c
...
...
@@ -22,16 +22,20 @@
#include <asm/hardware.h>
#include <asm/irq.h>
#include <asm/hardware/scoop.h>
#ifdef CONFIG_SA1100_COLLIE
#include <asm/arch-sa1100/collie.h>
#else
#include <asm/arch-pxa/pxa-regs.h>
#endif
#include "soc_common.h"
#define NO_KEEP_VS 0x0001
/* PCMCIA to Scoop linkage
There is no easy way to link multiple scoop devices into one
single entity for the pxa2xx_pcmcia device so this structure
is used which is setup by the platform code
*/
struct
scoop_pcmcia_config
*
platform_scoop_config
;
#define SCOOP_DEV platform_scoop_config->devs
static
void
sharpsl_pcmcia_init_reset
(
struct
scoop_pcmcia_dev
*
scoopdev
)
{
reset_scoop
(
scoopdev
->
dev
);
...
...
@@ -43,38 +47,16 @@ static int sharpsl_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
{
int
ret
;
#ifndef CONFIG_SA1100_COLLIE
/*
* Setup default state of GPIO outputs
* before we enable them as outputs.
*/
GPSR
(
GPIO48_nPOE
)
=
GPIO_bit
(
GPIO48_nPOE
)
|
GPIO_bit
(
GPIO49_nPWE
)
|
GPIO_bit
(
GPIO50_nPIOR
)
|
GPIO_bit
(
GPIO51_nPIOW
)
|
GPIO_bit
(
GPIO52_nPCE_1
)
|
GPIO_bit
(
GPIO53_nPCE_2
);
pxa_gpio_mode
(
GPIO48_nPOE_MD
);
pxa_gpio_mode
(
GPIO49_nPWE_MD
);
pxa_gpio_mode
(
GPIO50_nPIOR_MD
);
pxa_gpio_mode
(
GPIO51_nPIOW_MD
);
pxa_gpio_mode
(
GPIO52_nPCE_1_MD
);
pxa_gpio_mode
(
GPIO53_nPCE_2_MD
);
pxa_gpio_mode
(
GPIO54_pSKTSEL_MD
);
pxa_gpio_mode
(
GPIO55_nPREG_MD
);
pxa_gpio_mode
(
GPIO56_nPWAIT_MD
);
pxa_gpio_mode
(
GPIO57_nIOIS16_MD
);
#endif
if
(
platform_scoop_config
->
pcmcia_init
)
platform_scoop_config
->
pcmcia_init
();
/* Register interrupts */
if
(
scoop_devs
[
skt
->
nr
].
cd_irq
>=
0
)
{
if
(
SCOOP_DEV
[
skt
->
nr
].
cd_irq
>=
0
)
{
struct
pcmcia_irqs
cd_irq
;
cd_irq
.
sock
=
skt
->
nr
;
cd_irq
.
irq
=
scoop_devs
[
skt
->
nr
].
cd_irq
;
cd_irq
.
str
=
scoop_devs
[
skt
->
nr
].
cd_irq_str
;
cd_irq
.
irq
=
SCOOP_DEV
[
skt
->
nr
].
cd_irq
;
cd_irq
.
str
=
SCOOP_DEV
[
skt
->
nr
].
cd_irq_str
;
ret
=
soc_pcmcia_request_irqs
(
skt
,
&
cd_irq
,
1
);
if
(
ret
)
{
...
...
@@ -83,19 +65,19 @@ static int sharpsl_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
}
}
skt
->
irq
=
scoop_devs
[
skt
->
nr
].
irq
;
skt
->
irq
=
SCOOP_DEV
[
skt
->
nr
].
irq
;
return
0
;
}
static
void
sharpsl_pcmcia_hw_shutdown
(
struct
soc_pcmcia_socket
*
skt
)
{
if
(
scoop_devs
[
skt
->
nr
].
cd_irq
>=
0
)
{
if
(
SCOOP_DEV
[
skt
->
nr
].
cd_irq
>=
0
)
{
struct
pcmcia_irqs
cd_irq
;
cd_irq
.
sock
=
skt
->
nr
;
cd_irq
.
irq
=
scoop_devs
[
skt
->
nr
].
cd_irq
;
cd_irq
.
str
=
scoop_devs
[
skt
->
nr
].
cd_irq_str
;
cd_irq
.
irq
=
SCOOP_DEV
[
skt
->
nr
].
cd_irq
;
cd_irq
.
str
=
SCOOP_DEV
[
skt
->
nr
].
cd_irq_str
;
soc_pcmcia_free_irqs
(
skt
,
&
cd_irq
,
1
);
}
}
...
...
@@ -105,9 +87,9 @@ static void sharpsl_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
struct
pcmcia_state
*
state
)
{
unsigned
short
cpr
,
csr
;
struct
device
*
scoop
=
scoop_devs
[
skt
->
nr
].
dev
;
struct
device
*
scoop
=
SCOOP_DEV
[
skt
->
nr
].
dev
;
cpr
=
read_scoop_reg
(
scoop_devs
[
skt
->
nr
].
dev
,
SCOOP_CPR
);
cpr
=
read_scoop_reg
(
SCOOP_DEV
[
skt
->
nr
].
dev
,
SCOOP_CPR
);
write_scoop_reg
(
scoop
,
SCOOP_IRM
,
0x00FF
);
write_scoop_reg
(
scoop
,
SCOOP_ISR
,
0x0000
);
...
...
@@ -116,21 +98,25 @@ static void sharpsl_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
if
(
csr
&
0x0004
)
{
/* card eject */
write_scoop_reg
(
scoop
,
SCOOP_CDR
,
0x0000
);
scoop_devs
[
skt
->
nr
].
keep_vs
=
NO_KEEP_VS
;
SCOOP_DEV
[
skt
->
nr
].
keep_vs
=
NO_KEEP_VS
;
}
else
if
(
!
(
scoop_devs
[
skt
->
nr
].
keep_vs
&
NO_KEEP_VS
))
{
else
if
(
!
(
SCOOP_DEV
[
skt
->
nr
].
keep_vs
&
NO_KEEP_VS
))
{
/* keep vs1,vs2 */
write_scoop_reg
(
scoop
,
SCOOP_CDR
,
0x0000
);
csr
|=
scoop_devs
[
skt
->
nr
].
keep_vs
;
csr
|=
SCOOP_DEV
[
skt
->
nr
].
keep_vs
;
}
else
if
(
cpr
&
0x0003
)
{
/* power on */
write_scoop_reg
(
scoop
,
SCOOP_CDR
,
0x0000
);
scoop_devs
[
skt
->
nr
].
keep_vs
=
(
csr
&
0x00C0
);
SCOOP_DEV
[
skt
->
nr
].
keep_vs
=
(
csr
&
0x00C0
);
}
else
{
/* card detect */
write_scoop_reg
(
scoop
,
SCOOP_CDR
,
0x0002
);
if
((
machine_is_spitz
()
||
machine_is_borzoi
())
&&
skt
->
nr
==
1
)
{
write_scoop_reg
(
scoop
,
SCOOP_CDR
,
0x0000
);
}
else
{
write_scoop_reg
(
scoop
,
SCOOP_CDR
,
0x0002
);
}
}
state
->
detect
=
(
csr
&
0x0004
)
?
0
:
1
;
...
...
@@ -144,7 +130,6 @@ static void sharpsl_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
if
((
cpr
&
0x0080
)
&&
((
cpr
&
0x8040
)
!=
0x8040
))
{
printk
(
KERN_ERR
"sharpsl_pcmcia_socket_state(): CPR=%04X, Low voltage!
\n
"
,
cpr
);
}
}
...
...
@@ -152,7 +137,7 @@ static int sharpsl_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
const
socket_state_t
*
state
)
{
unsigned
long
flags
;
struct
device
*
scoop
=
scoop_devs
[
skt
->
nr
].
dev
;
struct
device
*
scoop
=
SCOOP_DEV
[
skt
->
nr
].
dev
;
unsigned
short
cpr
,
ncpr
,
ccr
,
nccr
,
mcr
,
nmcr
,
imr
,
nimr
;
...
...
@@ -177,8 +162,13 @@ static int sharpsl_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
nccr
=
(
ccr
=
read_scoop_reg
(
scoop
,
SCOOP_CCR
))
&
~
0x0080
;
nimr
=
(
imr
=
read_scoop_reg
(
scoop
,
SCOOP_IMR
))
&
~
0x003E
;
ncpr
|=
(
state
->
Vcc
==
33
)
?
0x0001
:
(
state
->
Vcc
==
50
)
?
0x0002
:
0
;
if
((
machine_is_spitz
()
||
machine_is_borzoi
()
||
machine_is_akita
())
&&
skt
->
nr
==
0
)
{
ncpr
|=
(
state
->
Vcc
==
33
)
?
0x0002
:
(
state
->
Vcc
==
50
)
?
0x0002
:
0
;
}
else
{
ncpr
|=
(
state
->
Vcc
==
33
)
?
0x0001
:
(
state
->
Vcc
==
50
)
?
0x0002
:
0
;
}
nmcr
|=
(
state
->
flags
&
SS_IOCARD
)
?
0x0010
:
0
;
ncpr
|=
(
state
->
flags
&
SS_OUTPUT_ENA
)
?
0x0080
:
0
;
nccr
|=
(
state
->
flags
&
SS_RESET
)
?
0x0080
:
0
;
...
...
@@ -190,18 +180,22 @@ static int sharpsl_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
((
skt
->
status
&
SS_WRPROT
)
?
0x0008
:
0
);
if
(
!
(
ncpr
&
0x0003
))
{
scoop_devs
[
skt
->
nr
].
keep_rd
=
0
;
}
else
if
(
!
scoop_devs
[
skt
->
nr
].
keep_rd
)
{
SCOOP_DEV
[
skt
->
nr
].
keep_rd
=
0
;
}
else
if
(
!
SCOOP_DEV
[
skt
->
nr
].
keep_rd
)
{
if
(
nccr
&
0x0080
)
scoop_devs
[
skt
->
nr
].
keep_rd
=
1
;
SCOOP_DEV
[
skt
->
nr
].
keep_rd
=
1
;
else
nccr
|=
0x0080
;
}
if
(
mcr
!=
nmcr
)
write_scoop_reg
(
scoop
,
SCOOP_MCR
,
nmcr
);
if
(
cpr
!=
ncpr
)
write_scoop_reg
(
scoop
,
SCOOP_CPR
,
ncpr
);
if
(
cpr
!=
ncpr
)
{
if
(
platform_scoop_config
->
power_ctrl
)
platform_scoop_config
->
power_ctrl
(
scoop
,
ncpr
,
skt
->
nr
);
else
write_scoop_reg
(
scoop
,
SCOOP_CPR
,
ncpr
);
}
if
(
ccr
!=
nccr
)
write_scoop_reg
(
scoop
,
SCOOP_CCR
,
nccr
);
if
(
imr
!=
nimr
)
...
...
@@ -214,43 +208,43 @@ static int sharpsl_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
static
void
sharpsl_pcmcia_socket_init
(
struct
soc_pcmcia_socket
*
skt
)
{
sharpsl_pcmcia_init_reset
(
&
scoop_devs
[
skt
->
nr
]);
sharpsl_pcmcia_init_reset
(
&
SCOOP_DEV
[
skt
->
nr
]);
/* Enable interrupt */
write_scoop_reg
(
scoop_devs
[
skt
->
nr
].
dev
,
SCOOP_IMR
,
0x00C0
);
write_scoop_reg
(
scoop_devs
[
skt
->
nr
].
dev
,
SCOOP_MCR
,
0x0101
);
scoop_devs
[
skt
->
nr
].
keep_vs
=
NO_KEEP_VS
;
write_scoop_reg
(
SCOOP_DEV
[
skt
->
nr
].
dev
,
SCOOP_IMR
,
0x00C0
);
write_scoop_reg
(
SCOOP_DEV
[
skt
->
nr
].
dev
,
SCOOP_MCR
,
0x0101
);
SCOOP_DEV
[
skt
->
nr
].
keep_vs
=
NO_KEEP_VS
;
if
(
machine_is_collie
())
/* We need to disable SS_OUTPUT_ENA here. */
write_scoop_reg
(
scoop_devs
[
skt
->
nr
].
dev
,
SCOOP_CPR
,
read_scoop_reg
(
scoop_devs
[
skt
->
nr
].
dev
,
SCOOP_CPR
)
&
~
0x0080
);
write_scoop_reg
(
SCOOP_DEV
[
skt
->
nr
].
dev
,
SCOOP_CPR
,
read_scoop_reg
(
SCOOP_DEV
[
skt
->
nr
].
dev
,
SCOOP_CPR
)
&
~
0x0080
);
}
static
void
sharpsl_pcmcia_socket_suspend
(
struct
soc_pcmcia_socket
*
skt
)
{
/* CF_BUS_OFF */
sharpsl_pcmcia_init_reset
(
&
scoop_devs
[
skt
->
nr
]);
sharpsl_pcmcia_init_reset
(
&
SCOOP_DEV
[
skt
->
nr
]);
if
(
machine_is_collie
())
/* We need to disable SS_OUTPUT_ENA here. */
write_scoop_reg
(
scoop_devs
[
skt
->
nr
].
dev
,
SCOOP_CPR
,
read_scoop_reg
(
scoop_devs
[
skt
->
nr
].
dev
,
SCOOP_CPR
)
&
~
0x0080
);
write_scoop_reg
(
SCOOP_DEV
[
skt
->
nr
].
dev
,
SCOOP_CPR
,
read_scoop_reg
(
SCOOP_DEV
[
skt
->
nr
].
dev
,
SCOOP_CPR
)
&
~
0x0080
);
}
static
struct
pcmcia_low_level
sharpsl_pcmcia_ops
=
{
.
owner
=
THIS_MODULE
,
.
hw_init
=
sharpsl_pcmcia_hw_init
,
.
hw_shutdown
=
sharpsl_pcmcia_hw_shutdown
,
.
socket_state
=
sharpsl_pcmcia_socket_state
,
.
configure_socket
=
sharpsl_pcmcia_configure_socket
,
.
socket_init
=
sharpsl_pcmcia_socket_init
,
.
socket_suspend
=
sharpsl_pcmcia_socket_suspend
,
.
first
=
0
,
.
nr
=
0
,
.
owner
=
THIS_MODULE
,
.
hw_init
=
sharpsl_pcmcia_hw_init
,
.
hw_shutdown
=
sharpsl_pcmcia_hw_shutdown
,
.
socket_state
=
sharpsl_pcmcia_socket_state
,
.
configure_socket
=
sharpsl_pcmcia_configure_socket
,
.
socket_init
=
sharpsl_pcmcia_socket_init
,
.
socket_suspend
=
sharpsl_pcmcia_socket_suspend
,
.
first
=
0
,
.
nr
=
0
,
};
static
struct
platform_device
*
sharpsl_pcmcia_device
;
#ifdef CONFIG_SA1100_COLLIE
#include "sa11xx_base.h"
int
__init
pcmcia_collie_init
(
struct
device
*
dev
)
{
int
ret
=
-
ENODEV
;
...
...
@@ -263,11 +257,13 @@ int __init pcmcia_collie_init(struct device *dev)
#else
static
struct
platform_device
*
sharpsl_pcmcia_device
;
static
int
__init
sharpsl_pcmcia_init
(
void
)
{
int
ret
;
sharpsl_pcmcia_ops
.
nr
=
scoop_num
;
sharpsl_pcmcia_ops
.
nr
=
platform_scoop_config
->
num_devs
;
sharpsl_pcmcia_device
=
kmalloc
(
sizeof
(
*
sharpsl_pcmcia_device
),
GFP_KERNEL
);
if
(
!
sharpsl_pcmcia_device
)
return
-
ENOMEM
;
...
...
@@ -275,7 +271,7 @@ static int __init sharpsl_pcmcia_init(void)
memset
(
sharpsl_pcmcia_device
,
0
,
sizeof
(
*
sharpsl_pcmcia_device
));
sharpsl_pcmcia_device
->
name
=
"pxa2xx-pcmcia"
;
sharpsl_pcmcia_device
->
dev
.
platform_data
=
&
sharpsl_pcmcia_ops
;
sharpsl_pcmcia_device
->
dev
.
parent
=
scoop_
devs
[
0
].
dev
;
sharpsl_pcmcia_device
->
dev
.
parent
=
platform_scoop_config
->
devs
[
0
].
dev
;
ret
=
platform_device_register
(
sharpsl_pcmcia_device
);
if
(
ret
)
...
...
drivers/video/amba-clcd.c
View file @
9f04012c
...
...
@@ -518,7 +518,7 @@ static struct amba_driver clcd_driver = {
.
id_table
=
clcdfb_id_table
,
};
int
__init
amba_clcdfb_init
(
void
)
static
int
__init
amba_clcdfb_init
(
void
)
{
if
(
fb_get_options
(
"ambafb"
,
NULL
))
return
-
ENODEV
;
...
...
include/asm-arm/arch-s3c2410/uncompress.h
View file @
9f04012c
...
...
@@ -116,6 +116,8 @@ putstr(const char *ptr)
}
}
#define __raw_writel(d,ad) do { *((volatile unsigned int *)(ad)) = (d); } while(0)
/* CONFIG_S3C2410_BOOT_WATCHDOG
*
* Simple boot-time watchdog setup, to reboot the system if there is
...
...
@@ -126,8 +128,6 @@ putstr(const char *ptr)
#define WDOG_COUNT (0xff00)
#define __raw_writel(d,ad) do { *((volatile unsigned int *)(ad)) = (d); } while(0)
static
inline
void
arch_decomp_wdog
(
void
)
{
__raw_writel
(
WDOG_COUNT
,
S3C2410_WTCNT
);
...
...
@@ -145,6 +145,24 @@ static void arch_decomp_wdog_start(void)
#define arch_decomp_wdog()
#endif
#ifdef CONFIG_S3C2410_BOOT_ERROR_RESET
static
void
arch_decomp_error
(
const
char
*
x
)
{
putstr
(
"
\n\n
"
);
putstr
(
x
);
putstr
(
"
\n\n
-- System resetting
\n
"
);
__raw_writel
(
0x4000
,
S3C2410_WTDAT
);
__raw_writel
(
0x4000
,
S3C2410_WTCNT
);
__raw_writel
(
S3C2410_WTCON_ENABLE
|
S3C2410_WTCON_DIV128
|
S3C2410_WTCON_RSTEN
|
S3C2410_WTCON_PRESCALE
(
0x40
),
S3C2410_WTCON
);
while
(
1
);
}
#define arch_error arch_decomp_error
#endif
static
void
error
(
char
*
err
);
static
void
...
...
include/asm-arm/hardirq.h
View file @
9f04012c
...
...
@@ -8,6 +8,7 @@
typedef
struct
{
unsigned
int
__softirq_pending
;
unsigned
int
local_timer_irqs
;
}
____cacheline_aligned
irq_cpustat_t
;
#include <linux/irq_cpustat.h>
/* Standard mappings for irq_cpustat_t above */
...
...
include/asm-arm/hardware/scoop.h
View file @
9f04012c
...
...
@@ -52,8 +52,14 @@ struct scoop_pcmcia_dev {
unsigned
char
keep_rd
;
};
extern
int
scoop_num
;
extern
struct
scoop_pcmcia_dev
*
scoop_devs
;
struct
scoop_pcmcia_config
{
struct
scoop_pcmcia_dev
*
devs
;
int
num_devs
;
void
(
*
pcmcia_init
)(
void
);
void
(
*
power_ctrl
)(
struct
device
*
scoop
,
unsigned
short
cpr
,
int
nr
);
};
extern
struct
scoop_pcmcia_config
*
platform_scoop_config
;
void
reset_scoop
(
struct
device
*
dev
);
unsigned
short
set_scoop_gpio
(
struct
device
*
dev
,
unsigned
short
bit
);
...
...
include/asm-arm/smp.h
View file @
9f04012c
...
...
@@ -36,6 +36,11 @@ struct seq_file;
*/
extern
void
show_ipi_list
(
struct
seq_file
*
p
);
/*
* Called from assembly code, this handles an IPI.
*/
asmlinkage
void
do_IPI
(
struct
pt_regs
*
regs
);
/*
* Move global data into per-processor storage.
*/
...
...
@@ -46,12 +51,23 @@ extern void smp_store_cpu_info(unsigned int cpuid);
*/
extern
void
smp_cross_call
(
cpumask_t
callmap
);
/*
* Broadcast a timer interrupt to the other CPUs.
*/
extern
void
smp_send_timer
(
void
);
/*
* Boot a secondary CPU, and assign it the specified idle task.
* This also gives us the initial stack to use for this CPU.
*/
extern
int
boot_secondary
(
unsigned
int
cpu
,
struct
task_struct
*
);
/*
* Called from platform specific assembly code, this is the
* secondary CPU entry point.
*/
asmlinkage
void
secondary_start_kernel
(
void
);
/*
* Perform platform specific initialisation of the specified CPU.
*/
...
...
@@ -76,4 +92,42 @@ extern void platform_cpu_die(unsigned int cpu);
extern
int
platform_cpu_kill
(
unsigned
int
cpu
);
extern
void
platform_cpu_enable
(
unsigned
int
cpu
);
#ifdef CONFIG_LOCAL_TIMERS
/*
* Setup a local timer interrupt for a CPU.
*/
extern
void
local_timer_setup
(
unsigned
int
cpu
);
/*
* Stop a local timer interrupt.
*/
extern
void
local_timer_stop
(
unsigned
int
cpu
);
/*
* Platform provides this to acknowledge a local timer IRQ
*/
extern
int
local_timer_ack
(
void
);
#else
static
inline
void
local_timer_setup
(
unsigned
int
cpu
)
{
}
static
inline
void
local_timer_stop
(
unsigned
int
cpu
)
{
}
#endif
/*
* show local interrupt info
*/
extern
void
show_local_irqs
(
struct
seq_file
*
);
/*
* Called from assembly, this is the local timer IRQ handler
*/
asmlinkage
void
do_local_timer
(
struct
pt_regs
*
);
#endif
/* ifndef __ASM_ARM_SMP_H */
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