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
nexedi
linux
Commits
72847a2a
Commit
72847a2a
authored
Aug 18, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://bk.arm.linux.org.uk/linux-2.5-rmk
into home.osdl.org:/home/torvalds/v2.5/linux
parents
1cc3ea44
ae650d87
Changes
30
Show whitespace changes
Inline
Side-by-side
Showing
30 changed files
with
537 additions
and
109 deletions
+537
-109
arch/arm/Kconfig
arch/arm/Kconfig
+2
-9
arch/arm/Makefile
arch/arm/Makefile
+0
-4
arch/arm/common/amba.c
arch/arm/common/amba.c
+1
-9
arch/arm/common/platform.c
arch/arm/common/platform.c
+1
-1
arch/arm/common/sa1111.c
arch/arm/common/sa1111.c
+1
-22
arch/arm/kernel/ecard.c
arch/arm/kernel/ecard.c
+19
-3
arch/arm/kernel/traps.c
arch/arm/kernel/traps.c
+6
-13
arch/arm/mach-integrator/Kconfig
arch/arm/mach-integrator/Kconfig
+16
-0
arch/arm/mach-integrator/Makefile
arch/arm/mach-integrator/Makefile
+1
-0
arch/arm/mach-integrator/impd1.c
arch/arm/mach-integrator/impd1.c
+262
-0
arch/arm/mach-pxa/lubbock.c
arch/arm/mach-pxa/lubbock.c
+0
-3
arch/arm/mach-sa1100/adsbitsy.c
arch/arm/mach-sa1100/adsbitsy.c
+0
-1
arch/arm/mach-sa1100/badge4.c
arch/arm/mach-sa1100/badge4.c
+0
-1
arch/arm/mach-sa1100/cpu-sa1110.c
arch/arm/mach-sa1100/cpu-sa1110.c
+13
-13
arch/arm/mach-sa1100/generic.c
arch/arm/mach-sa1100/generic.c
+0
-11
arch/arm/mach-sa1100/graphicsmaster.c
arch/arm/mach-sa1100/graphicsmaster.c
+0
-1
arch/arm/mach-sa1100/jornada720.c
arch/arm/mach-sa1100/jornada720.c
+0
-1
arch/arm/mach-sa1100/neponset.c
arch/arm/mach-sa1100/neponset.c
+0
-4
arch/arm/mach-sa1100/pfs168.c
arch/arm/mach-sa1100/pfs168.c
+0
-1
arch/arm/mach-sa1100/system3.c
arch/arm/mach-sa1100/system3.c
+0
-1
arch/arm/mach-sa1100/xp860.c
arch/arm/mach-sa1100/xp860.c
+0
-1
arch/arm/mm/mm-armv.c
arch/arm/mm/mm-armv.c
+26
-0
arch/arm/mm/mmu.c
arch/arm/mm/mmu.c
+46
-0
include/asm-arm/arch-integrator/impd1.h
include/asm-arm/arch-integrator/impd1.h
+19
-0
include/asm-arm/mmu.h
include/asm-arm/mmu.h
+13
-4
include/asm-arm/mmu_context.h
include/asm-arm/mmu_context.h
+40
-0
include/asm-arm/proc-armv/pgtable.h
include/asm-arm/proc-armv/pgtable.h
+3
-0
include/asm-arm/proc-armv/system.h
include/asm-arm/proc-armv/system.h
+8
-0
include/asm-arm/proc-armv/tlbflush.h
include/asm-arm/proc-armv/tlbflush.h
+59
-6
include/asm-arm/system.h
include/asm-arm/system.h
+1
-0
No files found.
arch/arm/Kconfig
View file @
72847a2a
...
@@ -165,6 +165,8 @@ source "arch/arm/mach-epxa10db/Kconfig"
...
@@ -165,6 +165,8 @@ source "arch/arm/mach-epxa10db/Kconfig"
source "arch/arm/mach-footbridge/Kconfig"
source "arch/arm/mach-footbridge/Kconfig"
source "arch/arm/mach-integrator/Kconfig"
source "arch/arm/mach-iop3xx/Kconfig"
source "arch/arm/mach-iop3xx/Kconfig"
source "arch/arm/mach-pxa/Kconfig"
source "arch/arm/mach-pxa/Kconfig"
...
@@ -1014,15 +1016,6 @@ config DEBUG_ERRORS
...
@@ -1014,15 +1016,6 @@ config DEBUG_ERRORS
you are concerned with the code size or don't want to see these
you are concerned with the code size or don't want to see these
messages.
messages.
config DEBUG_INFO
bool "Compile the kernel with debug info"
depends on DEBUG_KERNEL
help
If you say Y here the resulting kernel image will include
debugging info resulting in a larger kernel image.
Say Y here only if you plan to use gdb to debug the kernel.
If you don't debug the kernel, you can say N.
# These options are only for real kernel hackers who want to get their hands dirty.
# These options are only for real kernel hackers who want to get their hands dirty.
config DEBUG_LL
config DEBUG_LL
bool "Kernel low-level debugging functions"
bool "Kernel low-level debugging functions"
...
...
arch/arm/Makefile
View file @
72847a2a
...
@@ -20,10 +20,6 @@ ifeq ($(CONFIG_FRAME_POINTER),y)
...
@@ -20,10 +20,6 @@ ifeq ($(CONFIG_FRAME_POINTER),y)
CFLAGS
+=
-fno-omit-frame-pointer
-mapcs
-mno-sched-prolog
CFLAGS
+=
-fno-omit-frame-pointer
-mapcs
-mno-sched-prolog
endif
endif
ifeq
($(CONFIG_DEBUG_INFO),y)
CFLAGS
+=
-g
endif
ifeq
($(CONFIG_CPU_BIG_ENDIAN),y)
ifeq
($(CONFIG_CPU_BIG_ENDIAN),y)
CFLAGS
+=
-mbig-endian
CFLAGS
+=
-mbig-endian
AS
+=
-EB
AS
+=
-EB
...
...
arch/arm/common/amba.c
View file @
72847a2a
...
@@ -180,7 +180,7 @@ int amba_device_register(struct amba_device *dev, struct resource *parent)
...
@@ -180,7 +180,7 @@ int amba_device_register(struct amba_device *dev, struct resource *parent)
dev
->
dev
.
release
=
amba_device_release
;
dev
->
dev
.
release
=
amba_device_release
;
dev
->
dev
.
bus
=
&
amba_bustype
;
dev
->
dev
.
bus
=
&
amba_bustype
;
dev
->
res
.
name
=
dev
->
dev
.
name
;
dev
->
res
.
name
=
dev
->
dev
.
bus_id
;
ret
=
request_resource
(
parent
,
&
dev
->
res
);
ret
=
request_resource
(
parent
,
&
dev
->
res
);
if
(
ret
==
0
)
{
if
(
ret
==
0
)
{
...
@@ -200,14 +200,6 @@ int amba_device_register(struct amba_device *dev, struct resource *parent)
...
@@ -200,14 +200,6 @@ int amba_device_register(struct amba_device *dev, struct resource *parent)
if
(
cid
==
0xb105f00d
)
if
(
cid
==
0xb105f00d
)
dev
->
periphid
=
pid
;
dev
->
periphid
=
pid
;
if
(
dev
->
periphid
)
snprintf
(
dev
->
dev
.
name
,
sizeof
(
dev
->
dev
.
name
),
"AMBA PL%03X"
,
dev
->
periphid
&
0xfff
);
else
strlcpy
(
dev
->
dev
.
name
,
"AMBA unknown"
,
sizeof
(
dev
->
dev
.
name
));
ret
=
device_register
(
&
dev
->
dev
);
ret
=
device_register
(
&
dev
->
dev
);
if
(
ret
==
0
)
{
if
(
ret
==
0
)
{
device_create_file
(
&
dev
->
dev
,
&
dev_attr_id
);
device_create_file
(
&
dev
->
dev
,
&
dev_attr_id
);
...
...
arch/arm/common/platform.c
View file @
72847a2a
...
@@ -9,7 +9,7 @@ int __init platform_add_device(struct platform_device *dev)
...
@@ -9,7 +9,7 @@ int __init platform_add_device(struct platform_device *dev)
for
(
i
=
0
;
i
<
dev
->
num_resources
;
i
++
)
{
for
(
i
=
0
;
i
<
dev
->
num_resources
;
i
++
)
{
struct
resource
*
r
=
&
dev
->
resource
[
i
];
struct
resource
*
r
=
&
dev
->
resource
[
i
];
r
->
name
=
dev
->
dev
.
name
;
r
->
name
=
dev
->
dev
.
bus_id
;
if
(
r
->
flags
&
IORESOURCE_MEM
&&
if
(
r
->
flags
&
IORESOURCE_MEM
&&
request_resource
(
&
iomem_resource
,
r
))
{
request_resource
(
&
iomem_resource
,
r
))
{
...
...
arch/arm/common/sa1111.c
View file @
72847a2a
...
@@ -55,9 +55,6 @@ struct sa1111 {
...
@@ -55,9 +55,6 @@ struct sa1111 {
static
struct
sa1111
*
g_sa1111
;
static
struct
sa1111
*
g_sa1111
;
static
struct
sa1111_dev
usb_dev
=
{
static
struct
sa1111_dev
usb_dev
=
{
.
dev
=
{
.
name
=
"Intel Corporation SA1111 [USB Controller]"
,
},
.
skpcr_mask
=
SKPCR_UCLKEN
,
.
skpcr_mask
=
SKPCR_UCLKEN
,
.
devid
=
SA1111_DEVID_USB
,
.
devid
=
SA1111_DEVID_USB
,
.
irq
=
{
.
irq
=
{
...
@@ -71,9 +68,6 @@ static struct sa1111_dev usb_dev = {
...
@@ -71,9 +68,6 @@ static struct sa1111_dev usb_dev = {
};
};
static
struct
sa1111_dev
sac_dev
=
{
static
struct
sa1111_dev
sac_dev
=
{
.
dev
=
{
.
name
=
"Intel Corporation SA1111 [Audio Controller]"
,
},
.
skpcr_mask
=
SKPCR_I2SCLKEN
|
SKPCR_L3CLKEN
,
.
skpcr_mask
=
SKPCR_I2SCLKEN
|
SKPCR_L3CLKEN
,
.
devid
=
SA1111_DEVID_SAC
,
.
devid
=
SA1111_DEVID_SAC
,
.
irq
=
{
.
irq
=
{
...
@@ -85,17 +79,11 @@ static struct sa1111_dev sac_dev = {
...
@@ -85,17 +79,11 @@ static struct sa1111_dev sac_dev = {
};
};
static
struct
sa1111_dev
ssp_dev
=
{
static
struct
sa1111_dev
ssp_dev
=
{
.
dev
=
{
.
name
=
"Intel Corporation SA1111 [SSP Controller]"
,
},
.
skpcr_mask
=
SKPCR_SCLKEN
,
.
skpcr_mask
=
SKPCR_SCLKEN
,
.
devid
=
SA1111_DEVID_SSP
,
.
devid
=
SA1111_DEVID_SSP
,
};
};
static
struct
sa1111_dev
kbd_dev
=
{
static
struct
sa1111_dev
kbd_dev
=
{
.
dev
=
{
.
name
=
"Intel Corporation SA1111 [PS2]"
,
},
.
skpcr_mask
=
SKPCR_PTCLKEN
,
.
skpcr_mask
=
SKPCR_PTCLKEN
,
.
devid
=
SA1111_DEVID_PS2
,
.
devid
=
SA1111_DEVID_PS2
,
.
irq
=
{
.
irq
=
{
...
@@ -105,9 +93,6 @@ static struct sa1111_dev kbd_dev = {
...
@@ -105,9 +93,6 @@ static struct sa1111_dev kbd_dev = {
};
};
static
struct
sa1111_dev
mse_dev
=
{
static
struct
sa1111_dev
mse_dev
=
{
.
dev
=
{
.
name
=
"Intel Corporation SA1111 [PS2]"
,
},
.
skpcr_mask
=
SKPCR_PMCLKEN
,
.
skpcr_mask
=
SKPCR_PMCLKEN
,
.
devid
=
SA1111_DEVID_PS2
,
.
devid
=
SA1111_DEVID_PS2
,
.
irq
=
{
.
irq
=
{
...
@@ -117,17 +102,11 @@ static struct sa1111_dev mse_dev = {
...
@@ -117,17 +102,11 @@ static struct sa1111_dev mse_dev = {
};
};
static
struct
sa1111_dev
int_dev
=
{
static
struct
sa1111_dev
int_dev
=
{
.
dev
=
{
.
name
=
"Intel Corporation SA1111 [Interrupt Controller]"
,
},
.
skpcr_mask
=
0
,
.
skpcr_mask
=
0
,
.
devid
=
SA1111_DEVID_INT
,
.
devid
=
SA1111_DEVID_INT
,
};
};
static
struct
sa1111_dev
pcmcia_dev
=
{
static
struct
sa1111_dev
pcmcia_dev
=
{
.
dev
=
{
.
name
=
"Intel Corporation SA1111 [PCMCIA Controller]"
,
},
.
skpcr_mask
=
0
,
.
skpcr_mask
=
0
,
.
devid
=
SA1111_DEVID_PCMCIA
,
.
devid
=
SA1111_DEVID_PCMCIA
,
.
irq
=
{
.
irq
=
{
...
@@ -570,7 +549,7 @@ sa1111_init_one_child(struct sa1111 *sachip, struct resource *parent,
...
@@ -570,7 +549,7 @@ sa1111_init_one_child(struct sa1111 *sachip, struct resource *parent,
sadev
->
dev
.
bus
=
&
sa1111_bus_type
;
sadev
->
dev
.
bus
=
&
sa1111_bus_type
;
sadev
->
res
.
start
=
sachip
->
phys
+
offset
;
sadev
->
res
.
start
=
sachip
->
phys
+
offset
;
sadev
->
res
.
end
=
sadev
->
res
.
start
+
511
;
sadev
->
res
.
end
=
sadev
->
res
.
start
+
511
;
sadev
->
res
.
name
=
sadev
->
dev
.
name
;
sadev
->
res
.
name
=
sadev
->
dev
.
bus_id
;
sadev
->
res
.
flags
=
IORESOURCE_MEM
;
sadev
->
res
.
flags
=
IORESOURCE_MEM
;
sadev
->
mapbase
=
sachip
->
base
+
offset
;
sadev
->
mapbase
=
sachip
->
base
+
offset
;
...
...
arch/arm/kernel/ecard.c
View file @
72847a2a
...
@@ -811,7 +811,7 @@ static void ecard_proc_init(void)
...
@@ -811,7 +811,7 @@ static void ecard_proc_init(void)
#define ec_set_resource(ec,nr,st,sz,flg) \
#define ec_set_resource(ec,nr,st,sz,flg) \
do { \
do { \
(ec)->resource[nr].name = ec->dev.
name;
\
(ec)->resource[nr].name = ec->dev.
bus_id;
\
(ec)->resource[nr].start = st; \
(ec)->resource[nr].start = st; \
(ec)->resource[nr].end = (st) + (sz) - 1; \
(ec)->resource[nr].end = (st) + (sz) - 1; \
(ec)->resource[nr].flags = flg; \
(ec)->resource[nr].flags = flg; \
...
@@ -893,6 +893,22 @@ static ssize_t ecard_show_resources(struct device *dev, char *buf)
...
@@ -893,6 +893,22 @@ static ssize_t ecard_show_resources(struct device *dev, char *buf)
static
DEVICE_ATTR
(
resource
,
S_IRUGO
,
ecard_show_resources
,
NULL
);
static
DEVICE_ATTR
(
resource
,
S_IRUGO
,
ecard_show_resources
,
NULL
);
static
ssize_t
ecard_show_vendor
(
struct
device
*
dev
,
char
*
buf
)
{
struct
expansion_card
*
ec
=
ECARD_DEV
(
dev
);
return
sprintf
(
buf
,
"%u
\n
"
,
ec
->
manufacturer
);
}
static
DEVICE_ATTR
(
vendor
,
S_IRUGO
,
ecard_show_vendor
,
NULL
);
static
ssize_t
ecard_show_device
(
struct
device
*
dev
,
char
*
buf
)
{
struct
expansion_card
*
ec
=
ECARD_DEV
(
dev
);
return
sprintf
(
buf
,
"%u
\n
"
,
ec
->
product
);
}
static
DEVICE_ATTR
(
device
,
S_IRUGO
,
ecard_show_device
,
NULL
);
/*
/*
* Probe for an expansion card.
* Probe for an expansion card.
*
*
...
@@ -962,8 +978,6 @@ ecard_probe(int slot, card_type_t type)
...
@@ -962,8 +978,6 @@ ecard_probe(int slot, card_type_t type)
}
}
snprintf
(
ec
->
dev
.
bus_id
,
sizeof
(
ec
->
dev
.
bus_id
),
"ecard%d"
,
slot
);
snprintf
(
ec
->
dev
.
bus_id
,
sizeof
(
ec
->
dev
.
bus_id
),
"ecard%d"
,
slot
);
snprintf
(
ec
->
dev
.
name
,
sizeof
(
ec
->
dev
.
name
),
"ecard %04x:%04x"
,
ec
->
cid
.
manufacturer
,
ec
->
cid
.
product
);
ec
->
dev
.
parent
=
NULL
;
ec
->
dev
.
parent
=
NULL
;
ec
->
dev
.
bus
=
&
ecard_bus_type
;
ec
->
dev
.
bus
=
&
ecard_bus_type
;
ec
->
dev
.
dma_mask
=
&
ec
->
dma_mask
;
ec
->
dev
.
dma_mask
=
&
ec
->
dma_mask
;
...
@@ -1000,6 +1014,8 @@ ecard_probe(int slot, card_type_t type)
...
@@ -1000,6 +1014,8 @@ ecard_probe(int slot, card_type_t type)
device_create_file
(
&
ec
->
dev
,
&
dev_attr_dma
);
device_create_file
(
&
ec
->
dev
,
&
dev_attr_dma
);
device_create_file
(
&
ec
->
dev
,
&
dev_attr_irq
);
device_create_file
(
&
ec
->
dev
,
&
dev_attr_irq
);
device_create_file
(
&
ec
->
dev
,
&
dev_attr_resource
);
device_create_file
(
&
ec
->
dev
,
&
dev_attr_resource
);
device_create_file
(
&
ec
->
dev
,
&
dev_attr_vendor
);
device_create_file
(
&
ec
->
dev
,
&
dev_attr_device
);
return
0
;
return
0
;
...
...
arch/arm/kernel/traps.c
View file @
72847a2a
...
@@ -150,11 +150,6 @@ static void dump_instr(struct pt_regs *regs)
...
@@ -150,11 +150,6 @@ static void dump_instr(struct pt_regs *regs)
set_fs
(
fs
);
set_fs
(
fs
);
}
}
static
void
__dump_stack
(
struct
task_struct
*
tsk
,
unsigned
long
sp
)
{
dump_mem
(
"Stack: "
,
sp
,
8192
+
(
unsigned
long
)
tsk
->
thread_info
);
}
static
void
dump_backtrace
(
struct
pt_regs
*
regs
,
struct
task_struct
*
tsk
)
static
void
dump_backtrace
(
struct
pt_regs
*
regs
,
struct
task_struct
*
tsk
)
{
{
unsigned
int
fp
;
unsigned
int
fp
;
...
@@ -183,14 +178,12 @@ void dump_stack(void)
...
@@ -183,14 +178,12 @@ void dump_stack(void)
#endif
#endif
}
}
/*
void
show_stack
(
struct
task_struct
*
tsk
,
unsigned
long
*
sp
)
* This is called from SysRq-T (show_task) to display the current call
* trace for each process. This version will also display the running
* threads call trace (ie, us.)
*/
void
show_trace_task
(
struct
task_struct
*
tsk
)
{
{
unsigned
int
fp
;
unsigned
long
fp
;
if
(
!
tsk
)
tsk
=
current
;
if
(
tsk
!=
current
)
if
(
tsk
!=
current
)
fp
=
thread_saved_fp
(
tsk
);
fp
=
thread_saved_fp
(
tsk
);
...
@@ -222,7 +215,7 @@ NORET_TYPE void die(const char *str, struct pt_regs *regs, int err)
...
@@ -222,7 +215,7 @@ NORET_TYPE void die(const char *str, struct pt_regs *regs, int err)
current
->
comm
,
current
->
pid
,
tsk
->
thread_info
+
1
);
current
->
comm
,
current
->
pid
,
tsk
->
thread_info
+
1
);
if
(
!
user_mode
(
regs
)
||
in_interrupt
())
{
if
(
!
user_mode
(
regs
)
||
in_interrupt
())
{
__dump_stack
(
tsk
,
(
unsigned
long
)(
regs
+
1
)
);
dump_mem
(
"Stack: "
,
(
unsigned
long
)(
regs
+
1
),
8192
+
(
unsigned
long
)
tsk
->
thread_info
);
dump_backtrace
(
regs
,
tsk
);
dump_backtrace
(
regs
,
tsk
);
dump_instr
(
regs
);
dump_instr
(
regs
);
}
}
...
...
arch/arm/mach-integrator/Kconfig
0 → 100644
View file @
72847a2a
menu "Integrator Options"
depends on ARCH_INTEGRATOR
config INTEGRATOR_IMPD1
tristate "Include support for Integrator/IM-PD1"
help
The IM-PD1 is an add-on logic module for the Integrator which
allows ARM(R) Ltd PrimeCells to be developed and evaluated.
The IM-PD1 can be found on the Integrator/PP2 platform.
If you want to compile this as a module (=code which can be
inserted into and removed from the running kernel), say M
here and read <file:Documentation/modules.txt>. The module
will be called impd1.
endmenu
arch/arm/mach-integrator/Makefile
View file @
72847a2a
...
@@ -9,3 +9,4 @@ obj-y := core.o time.o
...
@@ -9,3 +9,4 @@ obj-y := core.o time.o
obj-$(CONFIG_LEDS)
+=
leds.o
obj-$(CONFIG_LEDS)
+=
leds.o
obj-$(CONFIG_PCI)
+=
pci_v3.o pci.o
obj-$(CONFIG_PCI)
+=
pci_v3.o pci.o
obj-$(CONFIG_CPU_FREQ_INTEGRATOR)
+=
cpu.o
obj-$(CONFIG_CPU_FREQ_INTEGRATOR)
+=
cpu.o
obj-$(CONFIG_INTEGRATOR_IMPD1)
+=
impd1.o
arch/arm/mach-integrator/impd1.c
0 → 100644
View file @
72847a2a
/*
* linux/arch/arm/mach-integrator/impd1.c
*
* Copyright (C) 2003 Deep Blue Solutions Ltd, All Rights Reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This file provides the core support for the IM-PD1 module.
*
* Module / boot parameters.
* id=n impd1.id=n - set the logic module position in stack to 'n'
*/
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/errno.h>
#include <asm/io.h>
#include <asm/hardware/icst525.h>
#include <asm/hardware/amba.h>
#include <asm/arch/impd1.h>
#include <asm/sizes.h>
static
int
module_id
;
module_param_named
(
lmid
,
module_id
,
int
,
0
);
MODULE_PARM_DESC
(
lmid
,
"logic module stack position"
);
#define ROM_OFFSET 0x0fffff00
#define ROM_SIZE 256
struct
impd1_module
{
void
*
base
;
};
static
const
struct
icst525_params
impd1_vco_params
=
{
.
ref
=
24000
,
/* 24 MHz */
.
vco_max
=
200000
,
/* 200 MHz */
.
vd_min
=
12
,
.
vd_max
=
519
,
.
rd_min
=
3
,
.
rd_max
=
120
,
};
void
impd1_set_vco
(
struct
device
*
dev
,
int
vconr
,
unsigned
long
period
)
{
struct
impd1_module
*
impd1
=
dev_get_drvdata
(
dev
);
struct
icst525_vco
vco
;
u32
val
;
vco
=
icst525_ps_to_vco
(
&
impd1_vco_params
,
period
);
pr_debug
(
"Guessed VCO reg params: S=%d R=%d V=%d
\n
"
,
vco
.
s
,
vco
.
r
,
vco
.
v
);
val
=
vco
.
v
|
(
vco
.
r
<<
9
)
|
(
vco
.
s
<<
16
);
writel
(
0xa05f
,
impd1
->
base
+
IMPD1_LOCK
);
switch
(
vconr
)
{
case
1
:
writel
(
val
,
impd1
->
base
+
IMPD1_OSC1
);
break
;
case
2
:
writel
(
val
,
impd1
->
base
+
IMPD1_OSC2
);
break
;
}
writel
(
0
,
impd1
->
base
+
IMPD1_LOCK
);
#if DEBUG
vco
.
v
=
val
&
0x1ff
;
vco
.
r
=
(
val
>>
9
)
&
0x7f
;
vco
.
s
=
(
val
>>
16
)
&
7
;
pr_debug
(
"IM-PD1: VCO%d clock is %ld kHz
\n
"
,
vconr
,
icst525_khz
(
&
impd1_vco_params
,
vco
));
#endif
}
EXPORT_SYMBOL
(
impd1_set_vco
);
void
impd1_tweak_control
(
struct
device
*
dev
,
u32
mask
,
u32
val
)
{
struct
impd1_module
*
impd1
=
dev_get_drvdata
(
dev
);
u32
cur
;
val
&=
mask
;
cur
=
readl
(
impd1
->
base
+
IMPD1_CTRL
)
&
~
mask
;
writel
(
cur
|
val
,
impd1
->
base
+
IMPD1_CTRL
);
}
EXPORT_SYMBOL
(
impd1_tweak_control
);
struct
impd1_device
{
unsigned
long
offset
;
unsigned
int
irq
[
2
];
unsigned
int
id
;
};
static
struct
impd1_device
impd1_devs
[]
=
{
{
.
offset
=
0x03000000
,
.
id
=
0x00041190
,
},
{
.
offset
=
0x00100000
,
.
irq
=
{
1
},
.
id
=
0x00141011
,
},
{
.
offset
=
0x00200000
,
.
irq
=
{
2
},
.
id
=
0x00141011
,
},
{
.
offset
=
0x00300000
,
.
irq
=
{
3
},
.
id
=
0x00041022
,
},
{
.
offset
=
0x00400000
,
.
irq
=
{
4
},
.
id
=
0x00041061
,
},
{
.
offset
=
0x00500000
,
.
irq
=
{
5
},
.
id
=
0x00041061
,
},
{
.
offset
=
0x00600000
,
.
irq
=
{
6
},
.
id
=
0x00041130
,
},
{
.
offset
=
0x00700000
,
.
irq
=
{
7
,
8
},
.
id
=
0x00041181
,
},
{
.
offset
=
0x00800000
,
.
irq
=
{
9
},
.
id
=
0x00041041
,
},
{
.
offset
=
0x01000000
,
.
irq
=
{
11
},
.
id
=
0x00041110
,
}
};
static
int
impd1_probe
(
struct
device
*
dev
)
{
struct
platform_device
*
pdev
=
to_platform_device
(
dev
);
struct
resource
*
res
=
&
pdev
->
resource
[
0
];
struct
impd1_module
*
impd1
;
int
i
,
ret
;
if
(
pdev
->
id
!=
module_id
)
return
-
EINVAL
;
if
(
!
request_mem_region
(
res
->
start
,
SZ_4K
,
"LM registers"
))
return
-
EBUSY
;
impd1
=
kmalloc
(
sizeof
(
struct
impd1_module
),
GFP_KERNEL
);
if
(
!
impd1
)
{
ret
=
-
ENOMEM
;
goto
release_lm
;
}
memset
(
impd1
,
0
,
sizeof
(
struct
impd1_module
));
impd1
->
base
=
ioremap
(
res
->
start
,
SZ_4K
);
if
(
!
impd1
->
base
)
{
ret
=
-
ENOMEM
;
goto
free_impd1
;
}
dev_set_drvdata
(
dev
,
impd1
);
printk
(
"IM-PD1 found at 0x%08lx
\n
"
,
res
->
start
);
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
impd1_devs
);
i
++
)
{
struct
impd1_device
*
idev
=
impd1_devs
+
i
;
struct
amba_device
*
d
;
unsigned
long
pc_base
;
pc_base
=
res
->
start
+
idev
->
offset
;
d
=
kmalloc
(
sizeof
(
struct
amba_device
),
GFP_KERNEL
);
if
(
!
d
)
continue
;
memset
(
d
,
0
,
sizeof
(
struct
amba_device
));
snprintf
(
d
->
dev
.
bus_id
,
sizeof
(
d
->
dev
.
bus_id
),
"lm%x:%5.5x"
,
pdev
->
id
,
idev
->
offset
>>
12
);
d
->
dev
.
parent
=
&
pdev
->
dev
;
d
->
res
.
start
=
res
->
start
+
idev
->
offset
;
d
->
res
.
end
=
d
->
res
.
start
+
SZ_4K
-
1
;
d
->
res
.
flags
=
IORESOURCE_MEM
;
d
->
irq
=
pdev
->
resource
[
1
].
start
;
d
->
periphid
=
idev
->
id
;
ret
=
amba_device_register
(
d
,
res
);
if
(
ret
)
{
printk
(
"unable to register device %s: %d
\n
"
,
d
->
dev
.
bus_id
,
ret
);
kfree
(
d
);
}
}
return
0
;
free_impd1:
if
(
impd1
&&
impd1
->
base
)
iounmap
(
impd1
->
base
);
if
(
impd1
)
kfree
(
impd1
);
release_lm:
release_mem_region
(
res
->
start
,
SZ_4K
);
return
ret
;
}
static
int
impd1_remove
(
struct
device
*
dev
)
{
struct
platform_device
*
pdev
=
to_platform_device
(
dev
);
struct
resource
*
res
=
&
pdev
->
resource
[
0
];
struct
impd1_module
*
impd1
=
dev_get_drvdata
(
dev
);
struct
list_head
*
l
,
*
n
;
list_for_each_safe
(
l
,
n
,
&
dev
->
children
)
{
struct
device
*
d
=
list_to_dev
(
l
);
device_unregister
(
d
);
}
dev_set_drvdata
(
dev
,
NULL
);
iounmap
(
impd1
->
base
);
kfree
(
impd1
);
release_mem_region
(
res
->
start
,
SZ_4K
);
return
0
;
}
static
struct
device_driver
impd1_driver
=
{
.
name
=
"lm"
,
.
bus
=
&
platform_bus_type
,
.
probe
=
impd1_probe
,
.
remove
=
impd1_remove
,
};
static
int
__init
impd1_init
(
void
)
{
return
driver_register
(
&
impd1_driver
);
}
static
void
__exit
impd1_exit
(
void
)
{
driver_unregister
(
&
impd1_driver
);
}
module_init
(
impd1_init
);
module_exit
(
impd1_exit
);
MODULE_LICENSE
(
"GPL"
);
MODULE_DESCRIPTION
(
"Integrator/IM-PD1 logic module core driver"
);
MODULE_AUTHOR
(
"Deep Blue Solutions Ltd"
);
arch/arm/mach-pxa/lubbock.c
View file @
72847a2a
...
@@ -104,9 +104,6 @@ static struct resource sa1111_resources[] = {
...
@@ -104,9 +104,6 @@ static struct resource sa1111_resources[] = {
static
struct
platform_device
sa1111_device
=
{
static
struct
platform_device
sa1111_device
=
{
.
name
=
"sa1111"
,
.
name
=
"sa1111"
,
.
id
=
0
,
.
id
=
0
,
.
dev
=
{
.
name
=
"Intel Corporation SA1111"
,
},
.
num_resources
=
ARRAY_SIZE
(
sa1111_resources
),
.
num_resources
=
ARRAY_SIZE
(
sa1111_resources
),
.
resource
=
sa1111_resources
,
.
resource
=
sa1111_resources
,
};
};
...
...
arch/arm/mach-sa1100/adsbitsy.c
View file @
72847a2a
...
@@ -46,7 +46,6 @@ static struct platform_device sa1111_device = {
...
@@ -46,7 +46,6 @@ static struct platform_device sa1111_device = {
.
name
=
"sa1111"
,
.
name
=
"sa1111"
,
.
id
=
0
,
.
id
=
0
,
.
dev
=
{
.
dev
=
{
.
name
=
"Intel Corporation SA1111"
,
.
dma_mask
=
&
sa1111_dmamask
,
.
dma_mask
=
&
sa1111_dmamask
,
},
},
.
num_resources
=
ARRAY_SIZE
(
sa1111_resources
),
.
num_resources
=
ARRAY_SIZE
(
sa1111_resources
),
...
...
arch/arm/mach-sa1100/badge4.c
View file @
72847a2a
...
@@ -54,7 +54,6 @@ static struct platform_device sa1111_device = {
...
@@ -54,7 +54,6 @@ static struct platform_device sa1111_device = {
.
name
=
"sa1111"
,
.
name
=
"sa1111"
,
.
id
=
0
,
.
id
=
0
,
.
dev
=
{
.
dev
=
{
.
name
=
"Intel Corporation SA1111"
,
.
dma_mask
=
&
sa1111_dmamask
;
.
dma_mask
=
&
sa1111_dmamask
;
},
},
.
num_resources
=
ARRAY_SIZE
(
sa1111_resources
),
.
num_resources
=
ARRAY_SIZE
(
sa1111_resources
),
...
...
arch/arm/mach-sa1100/cpu-sa1110.c
View file @
72847a2a
...
@@ -282,19 +282,19 @@ static int sa1110_target(struct cpufreq_policy *policy,
...
@@ -282,19 +282,19 @@ static int sa1110_target(struct cpufreq_policy *policy,
local_irq_save
(
flags
);
local_irq_save
(
flags
);
asm
(
"mcr p15, 0, %0, c7, c10, 4"
:
:
"r"
(
0
));
asm
(
"mcr p15, 0, %0, c7, c10, 4"
:
:
"r"
(
0
));
udelay
(
10
);
udelay
(
10
);
__asm__
__volatile__
(
"
__asm__
__volatile__
(
"
\n
\
b 2f
b 2f
\n
\
.align 5
.align 5
\n
\
1: str %3, [%1, #0] @ MDCNFG
1: str %3, [%1, #0] @ MDCNFG
\n
\
str %4, [%1, #28] @ MDREFR
str %4, [%1, #28] @ MDREFR
\n
\
str %5, [%1, #4] @ MDCAS0
str %5, [%1, #4] @ MDCAS0
\n
\
str %6, [%1, #8] @ MDCAS1
str %6, [%1, #8] @ MDCAS1
\n
\
str %7, [%1, #12] @ MDCAS2
str %7, [%1, #12] @ MDCAS2
\n
\
str %8, [%2, #0] @ PPCR
str %8, [%2, #0] @ PPCR
\n
\
ldr %0, [%1, #0]
ldr %0, [%1, #0]
\n
\
b 3f
b 3f
\n
\
2: b 1b
2: b 1b
\n
\
3: nop
3: nop
\n
\
nop"
nop"
:
"=&r"
(
unused
)
:
"=&r"
(
unused
)
:
"r"
(
&
MDCNFG
),
"r"
(
&
PPCR
),
"0"
(
sd
.
mdcnfg
),
:
"r"
(
&
MDCNFG
),
"r"
(
&
PPCR
),
"0"
(
sd
.
mdcnfg
),
...
...
arch/arm/mach-sa1100/generic.c
View file @
72847a2a
...
@@ -144,7 +144,6 @@ static struct platform_device sa11x0udc_device = {
...
@@ -144,7 +144,6 @@ static struct platform_device sa11x0udc_device = {
.
name
=
"sa11x0-udc"
,
.
name
=
"sa11x0-udc"
,
.
id
=
0
,
.
id
=
0
,
.
dev
=
{
.
dev
=
{
.
name
=
"Intel Corporation SA11x0 [UDC]"
,
.
dma_mask
=
&
sa11x0udc_dma_mask
,
.
dma_mask
=
&
sa11x0udc_dma_mask
,
},
},
.
num_resources
=
ARRAY_SIZE
(
sa11x0udc_resources
),
.
num_resources
=
ARRAY_SIZE
(
sa11x0udc_resources
),
...
@@ -162,9 +161,6 @@ static struct resource sa11x0mcp_resources[] = {
...
@@ -162,9 +161,6 @@ static struct resource sa11x0mcp_resources[] = {
static
struct
platform_device
sa11x0mcp_device
=
{
static
struct
platform_device
sa11x0mcp_device
=
{
.
name
=
"sa11x0-mcp"
,
.
name
=
"sa11x0-mcp"
,
.
id
=
0
,
.
id
=
0
,
.
dev
=
{
.
name
=
"Intel Corporation SA11x0 [MCP]"
,
},
.
num_resources
=
ARRAY_SIZE
(
sa11x0mcp_resources
),
.
num_resources
=
ARRAY_SIZE
(
sa11x0mcp_resources
),
.
resource
=
sa11x0mcp_resources
,
.
resource
=
sa11x0mcp_resources
,
};
};
...
@@ -183,7 +179,6 @@ static struct platform_device sa11x0ssp_device = {
...
@@ -183,7 +179,6 @@ static struct platform_device sa11x0ssp_device = {
.
name
=
"sa11x0-ssp"
,
.
name
=
"sa11x0-ssp"
,
.
id
=
0
,
.
id
=
0
,
.
dev
=
{
.
dev
=
{
.
name
=
"Intel Corporation SA11x0 [SSP]"
,
.
dma_mask
=
&
sa11x0ssp_dma_mask
,
.
dma_mask
=
&
sa11x0ssp_dma_mask
,
},
},
.
num_resources
=
ARRAY_SIZE
(
sa11x0ssp_resources
),
.
num_resources
=
ARRAY_SIZE
(
sa11x0ssp_resources
),
...
@@ -206,9 +201,6 @@ static struct resource sa11x0fb_resources[] = {
...
@@ -206,9 +201,6 @@ static struct resource sa11x0fb_resources[] = {
static
struct
platform_device
sa11x0fb_device
=
{
static
struct
platform_device
sa11x0fb_device
=
{
.
name
=
"sa11x0-fb"
,
.
name
=
"sa11x0-fb"
,
.
id
=
0
,
.
id
=
0
,
.
dev
=
{
.
name
=
"Intel Corporation SA11x0 [LCD]"
,
},
.
num_resources
=
ARRAY_SIZE
(
sa11x0fb_resources
),
.
num_resources
=
ARRAY_SIZE
(
sa11x0fb_resources
),
.
resource
=
sa11x0fb_resources
,
.
resource
=
sa11x0fb_resources
,
};
};
...
@@ -216,9 +208,6 @@ static struct platform_device sa11x0fb_device = {
...
@@ -216,9 +208,6 @@ static struct platform_device sa11x0fb_device = {
static
struct
platform_device
sa11x0pcmcia_device
=
{
static
struct
platform_device
sa11x0pcmcia_device
=
{
.
name
=
"sa11x0-pcmcia"
,
.
name
=
"sa11x0-pcmcia"
,
.
id
=
0
,
.
id
=
0
,
.
dev
=
{
.
name
=
"Intel Corporation SA11x0 [PCMCIA]"
,
},
};
};
static
struct
platform_device
*
sa11x0_devices
[]
__initdata
=
{
static
struct
platform_device
*
sa11x0_devices
[]
__initdata
=
{
...
...
arch/arm/mach-sa1100/graphicsmaster.c
View file @
72847a2a
...
@@ -43,7 +43,6 @@ static struct platform_device sa1111_device = {
...
@@ -43,7 +43,6 @@ static struct platform_device sa1111_device = {
.
name
=
"sa1111"
,
.
name
=
"sa1111"
,
.
id
=
0
,
.
id
=
0
,
.
dev
=
{
.
dev
=
{
.
name
=
"Intel Corporation SA1111"
,
.
dma_mask
=
&
sa1111_dmamask
,
.
dma_mask
=
&
sa1111_dmamask
,
},
},
.
num_resources
=
ARRAY_SIZE
(
sa1111_resources
),
.
num_resources
=
ARRAY_SIZE
(
sa1111_resources
),
...
...
arch/arm/mach-sa1100/jornada720.c
View file @
72847a2a
...
@@ -43,7 +43,6 @@ static struct platform_device sa1111_device = {
...
@@ -43,7 +43,6 @@ static struct platform_device sa1111_device = {
.
name
=
"sa1111"
,
.
name
=
"sa1111"
,
.
id
=
0
,
.
id
=
0
,
.
dev
=
{
.
dev
=
{
.
name
=
"Intel Corporation SA1111"
,
.
dma_mask
=
&
sa1111_dmamask
,
.
dma_mask
=
&
sa1111_dmamask
,
},
},
.
num_resources
=
ARRAY_SIZE
(
sa1111_resources
),
.
num_resources
=
ARRAY_SIZE
(
sa1111_resources
),
...
...
arch/arm/mach-sa1100/neponset.c
View file @
72847a2a
...
@@ -227,9 +227,6 @@ static struct resource neponset_resources[] = {
...
@@ -227,9 +227,6 @@ static struct resource neponset_resources[] = {
static
struct
platform_device
neponset_device
=
{
static
struct
platform_device
neponset_device
=
{
.
name
=
"neponset"
,
.
name
=
"neponset"
,
.
id
=
0
,
.
id
=
0
,
.
dev
=
{
.
name
=
"Neponset"
,
},
.
num_resources
=
ARRAY_SIZE
(
neponset_resources
),
.
num_resources
=
ARRAY_SIZE
(
neponset_resources
),
.
resource
=
neponset_resources
,
.
resource
=
neponset_resources
,
};
};
...
@@ -253,7 +250,6 @@ static struct platform_device sa1111_device = {
...
@@ -253,7 +250,6 @@ static struct platform_device sa1111_device = {
.
name
=
"sa1111"
,
.
name
=
"sa1111"
,
.
id
=
0
,
.
id
=
0
,
.
dev
=
{
.
dev
=
{
.
name
=
"Intel Corporation SA1111"
,
.
dma_mask
=
&
sa1111_dmamask
,
.
dma_mask
=
&
sa1111_dmamask
,
},
},
.
num_resources
=
ARRAY_SIZE
(
sa1111_resources
),
.
num_resources
=
ARRAY_SIZE
(
sa1111_resources
),
...
...
arch/arm/mach-sa1100/pfs168.c
View file @
72847a2a
...
@@ -38,7 +38,6 @@ static struct platform_device sa1111_device = {
...
@@ -38,7 +38,6 @@ static struct platform_device sa1111_device = {
.
name
=
"sa1111"
,
.
name
=
"sa1111"
,
.
id
=
0
,
.
id
=
0
,
.
dev
=
{
.
dev
=
{
.
name
=
"Intel Corporation SA1111"
,
.
dma_mask
=
&
sa1111_dmamask
,
.
dma_mask
=
&
sa1111_dmamask
,
},
},
.
num_resources
=
ARRAY_SIZE
(
sa1111_resources
),
.
num_resources
=
ARRAY_SIZE
(
sa1111_resources
),
...
...
arch/arm/mach-sa1100/system3.c
View file @
72847a2a
...
@@ -392,7 +392,6 @@ static struct platform_device sa1111_device = {
...
@@ -392,7 +392,6 @@ static struct platform_device sa1111_device = {
.
name
=
"sa1111"
,
.
name
=
"sa1111"
,
.
id
=
0
,
.
id
=
0
,
.
dev
=
{
.
dev
=
{
.
name
=
"Intel Corporation SA1111"
,
.
dma_mask
=
&
sa1111_dmamask
,
.
dma_mask
=
&
sa1111_dmamask
,
},
},
.
num_resources
=
ARRAY_SIZE
(
sa1111_resources
),
.
num_resources
=
ARRAY_SIZE
(
sa1111_resources
),
...
...
arch/arm/mach-sa1100/xp860.c
View file @
72847a2a
...
@@ -44,7 +44,6 @@ static struct platform_device sa1111_device = {
...
@@ -44,7 +44,6 @@ static struct platform_device sa1111_device = {
.
name
=
"sa1111"
,
.
name
=
"sa1111"
,
.
id
=
0
,
.
id
=
0
,
.
dev
=
{
.
dev
=
{
.
name
=
"Intel Corporation SA1111"
,
.
dma_mask
=
&
sa1111_dmamask
,
.
dma_mask
=
&
sa1111_dmamask
,
},
},
.
num_resources
=
ARRAY_SIZE
(
sa1111_resources
),
.
num_resources
=
ARRAY_SIZE
(
sa1111_resources
),
...
...
arch/arm/mm/mm-armv.c
View file @
72847a2a
...
@@ -305,9 +305,35 @@ static struct mem_types mem_types[] __initdata = {
...
@@ -305,9 +305,35 @@ static struct mem_types mem_types[] __initdata = {
*/
*/
static
void
__init
build_mem_type_table
(
void
)
static
void
__init
build_mem_type_table
(
void
)
{
{
unsigned
int
cr
=
get_cr
();
int
cpu_arch
=
cpu_architecture
();
int
cpu_arch
=
cpu_architecture
();
const
char
*
policy
;
const
char
*
policy
;
/*
* ARMv6 and above have extended page tables.
*/
if
(
cpu_arch
>=
CPU_ARCH_ARMv6
&&
(
cr
&
CR_XP
))
{
/*
* bit 4 becomes XN which we must clear for the
* kernel memory mapping.
*/
mem_types
[
MT_MEMORY
].
prot_sect
&=
~
PMD_BIT4
;
/*
* Mark cache clean areas read only from SVC mode
* and no access from userspace.
*/
mem_types
[
MT_MINICLEAN
].
prot_sect
|=
PMD_SECT_APX
|
PMD_SECT_AP_WRITE
;
mem_types
[
MT_CACHECLEAN
].
prot_sect
|=
PMD_SECT_APX
|
PMD_SECT_AP_WRITE
;
}
/*
* ARMv6 can map the vectors as write-through.
*/
if
(
cpu_arch
>=
CPU_ARCH_ARMv6
)
mem_types
[
MT_VECTORS
].
prot_pte
|=
PTE_CACHEABLE
;
else
mem_types
[
MT_VECTORS
].
prot_pte
|=
PTE_BUFFERABLE
|
PTE_CACHEABLE
;
/*
/*
* ARMv5 and higher can use ECC memory.
* ARMv5 and higher can use ECC memory.
*/
*/
...
...
arch/arm/mm/mmu.c
0 → 100644
View file @
72847a2a
/*
* linux/arch/arm/mm/mmu.c
*
* Copyright (C) 2002-2003 Deep Blue Solutions Ltd, all rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/mm.h>
#include <asm/mmu_context.h>
#include <asm/pgalloc.h>
#include <asm/tlbflush.h>
unsigned
int
cpu_last_asid
=
{
1
<<
ASID_BITS
};
/*
* We fork()ed a process, and we need a new context for the child
* to run in. We reserve version 0 for initial tasks so we will
* always allocate an ASID.
*/
void
__init_new_context
(
struct
task_struct
*
tsk
,
struct
mm_struct
*
mm
)
{
mm
->
context
.
id
=
0
;
}
void
__new_context
(
struct
mm_struct
*
mm
)
{
unsigned
int
asid
;
asid
=
++
cpu_last_asid
;
if
(
asid
==
0
)
asid
=
cpu_last_asid
=
1
<<
ASID_BITS
;
/*
* If we've used up all our ASIDs, we need
* to start a new version and flush the TLB.
*/
if
((
asid
&
~
ASID_MASK
)
==
0
)
flush_tlb_all
();
mm
->
context
.
id
=
asid
;
}
include/asm-arm/arch-integrator/impd1.h
0 → 100644
View file @
72847a2a
#define IMPD1_OSC1 0x00
#define IMPD1_OSC2 0x04
#define IMPD1_LOCK 0x08
#define IMPD1_LEDS 0x0c
#define IMPD1_INT 0x10
#define IMPD1_SW 0x14
#define IMPD1_CTRL 0x18
#define IMPD1_CTRL_DISP_LCD (0 << 0)
#define IMPD1_CTRL_DISP_VGA (1 << 0)
#define IMPD1_CTRL_DISP_LCD1 (2 << 0)
#define IMPD1_CTRL_DISP_ENABLE (1 << 2)
#define IMPD1_CTRL_DISP_MASK (7 << 0)
struct
device
;
void
impd1_set_vco
(
struct
device
*
dev
,
int
vconr
,
unsigned
long
period
);
void
impd1_tweak_control
(
struct
device
*
dev
,
u32
mask
,
u32
val
);
include/asm-arm/mmu.h
View file @
72847a2a
#ifndef __ARM_MMU_H
#ifndef __ARM_MMU_H
#define __ARM_MMU_H
#define __ARM_MMU_H
/*
#include <linux/config.h>
* The ARM doesn't have a mmu context
*/
typedef
struct
{
typedef
struct
{
}
mm_context_t
;
#if __LINUX_ARM_ARCH__ >= 6
unsigned
int
id
;
#endif
}
mm_context_t
;
#if __LINUX_ARM_ARCH__ >= 6
#define ASID(mm) ((mm)->context.id & 255)
#else
#define ASID(mm) (0)
#endif
#endif
#endif
include/asm-arm/mmu_context.h
View file @
72847a2a
...
@@ -15,7 +15,45 @@
...
@@ -15,7 +15,45 @@
#include <asm/proc-fns.h>
#include <asm/proc-fns.h>
#if __LINUX_ARM_ARCH__ >= 6
/*
* On ARMv6, we have the following structure in the Context ID:
*
* 31 7 0
* +-------------------------+-----------+
* | process ID | ASID |
* +-------------------------+-----------+
* | context ID |
* +-------------------------------------+
*
* The ASID is used to tag entries in the CPU caches and TLBs.
* The context ID is used by debuggers and trace logic, and
* should be unique within all running processes.
*/
#define ASID_BITS 8
#define ASID_MASK ((~0) << ASID_BITS)
extern
unsigned
int
cpu_last_asid
;
void
__init_new_context
(
struct
task_struct
*
tsk
,
struct
mm_struct
*
mm
);
void
__new_context
(
struct
mm_struct
*
mm
);
static
inline
void
check_context
(
struct
mm_struct
*
mm
)
{
if
(
unlikely
((
mm
->
context
.
id
^
cpu_last_asid
)
>>
ASID_BITS
))
__new_context
(
mm
);
}
#define init_new_context(tsk,mm) (__init_new_context(tsk,mm),0)
#else
#define check_context(mm) do { } while (0)
#define init_new_context(tsk,mm) 0
#define init_new_context(tsk,mm) 0
#endif
#define destroy_context(mm) do { } while(0)
#define destroy_context(mm) do { } while(0)
/*
/*
...
@@ -43,6 +81,7 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next,
...
@@ -43,6 +81,7 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next,
struct
task_struct
*
tsk
)
struct
task_struct
*
tsk
)
{
{
if
(
prev
!=
next
)
{
if
(
prev
!=
next
)
{
check_context
(
next
);
cpu_switch_mm
(
next
->
pgd
,
next
);
cpu_switch_mm
(
next
->
pgd
,
next
);
}
}
}
}
...
@@ -51,6 +90,7 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next,
...
@@ -51,6 +90,7 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next,
static
inline
void
activate_mm
(
struct
mm_struct
*
prev
,
struct
mm_struct
*
next
)
static
inline
void
activate_mm
(
struct
mm_struct
*
prev
,
struct
mm_struct
*
next
)
{
{
check_context
(
next
);
cpu_switch_mm
(
next
->
pgd
,
next
);
cpu_switch_mm
(
next
->
pgd
,
next
);
}
}
...
...
include/asm-arm/proc-armv/pgtable.h
View file @
72847a2a
...
@@ -49,6 +49,9 @@
...
@@ -49,6 +49,9 @@
#define PMD_SECT_AP_WRITE (1 << 10)
#define PMD_SECT_AP_WRITE (1 << 10)
#define PMD_SECT_AP_READ (1 << 11)
#define PMD_SECT_AP_READ (1 << 11)
#define PMD_SECT_TEX(x) ((x) << 12)
/* v5 */
#define PMD_SECT_TEX(x) ((x) << 12)
/* v5 */
#define PMD_SECT_APX (1 << 15)
/* v6 */
#define PMD_SECT_S (1 << 16)
/* v6 */
#define PMD_SECT_nG (1 << 17)
/* v6 */
#define PMD_SECT_UNCACHED (0)
#define PMD_SECT_UNCACHED (0)
#define PMD_SECT_BUFFERED (PMD_SECT_BUFFERABLE)
#define PMD_SECT_BUFFERED (PMD_SECT_BUFFERABLE)
...
...
include/asm-arm/proc-armv/system.h
View file @
72847a2a
...
@@ -41,6 +41,14 @@
...
@@ -41,6 +41,14 @@
#define CR_I (1 << 12)
/* Icache enable */
#define CR_I (1 << 12)
/* Icache enable */
#define CR_V (1 << 13)
/* Vectors relocated to 0xffff0000 */
#define CR_V (1 << 13)
/* Vectors relocated to 0xffff0000 */
#define CR_RR (1 << 14)
/* Round Robin cache replacement */
#define CR_RR (1 << 14)
/* Round Robin cache replacement */
#define CR_L4 (1 << 15)
/* LDR pc can set T bit */
#define CR_DT (1 << 16)
#define CR_IT (1 << 18)
#define CR_ST (1 << 19)
#define CR_FI (1 << 21)
#define CR_U (1 << 22)
/* Unaligned access operation */
#define CR_XP (1 << 23)
/* Extended page tables */
#define CR_VE (1 << 24)
/* Vectored interrupts */
extern
unsigned
long
cr_no_alignment
;
/* defined in entry-armv.S */
extern
unsigned
long
cr_no_alignment
;
/* defined in entry-armv.S */
extern
unsigned
long
cr_alignment
;
/* defined in entry-armv.S */
extern
unsigned
long
cr_alignment
;
/* defined in entry-armv.S */
...
...
include/asm-arm/proc-armv/tlbflush.h
View file @
72847a2a
...
@@ -14,11 +14,21 @@
...
@@ -14,11 +14,21 @@
#define TLB_V4_U_PAGE (1 << 1)
#define TLB_V4_U_PAGE (1 << 1)
#define TLB_V4_D_PAGE (1 << 2)
#define TLB_V4_D_PAGE (1 << 2)
#define TLB_V4_I_PAGE (1 << 3)
#define TLB_V4_I_PAGE (1 << 3)
#define TLB_V6_U_PAGE (1 << 4)
#define TLB_V6_D_PAGE (1 << 5)
#define TLB_V6_I_PAGE (1 << 6)
#define TLB_V3_FULL (1 << 8)
#define TLB_V3_FULL (1 << 8)
#define TLB_V4_U_FULL (1 << 9)
#define TLB_V4_U_FULL (1 << 9)
#define TLB_V4_D_FULL (1 << 10)
#define TLB_V4_D_FULL (1 << 10)
#define TLB_V4_I_FULL (1 << 11)
#define TLB_V4_I_FULL (1 << 11)
#define TLB_V6_U_FULL (1 << 12)
#define TLB_V6_D_FULL (1 << 13)
#define TLB_V6_I_FULL (1 << 14)
#define TLB_V6_U_ASID (1 << 16)
#define TLB_V6_D_ASID (1 << 17)
#define TLB_V6_I_ASID (1 << 18)
#define TLB_DCLEAN (1 << 30)
#define TLB_DCLEAN (1 << 30)
#define TLB_WB (1 << 31)
#define TLB_WB (1 << 31)
...
@@ -32,6 +42,7 @@
...
@@ -32,6 +42,7 @@
* v4 - ARMv4 without write buffer
* v4 - ARMv4 without write buffer
* v4wb - ARMv4 with write buffer without I TLB flush entry instruction
* v4wb - ARMv4 with write buffer without I TLB flush entry instruction
* v4wbi - ARMv4 with write buffer with I TLB flush entry instruction
* v4wbi - ARMv4 with write buffer with I TLB flush entry instruction
* v6wbi - ARMv6 with write buffer with I TLB flush entry instruction
*/
*/
#undef _TLB
#undef _TLB
#undef MULTI_TLB
#undef MULTI_TLB
...
@@ -102,6 +113,24 @@
...
@@ -102,6 +113,24 @@
# define v4wb_always_flags (-1UL)
# define v4wb_always_flags (-1UL)
#endif
#endif
#define v6wbi_tlb_flags (TLB_WB | TLB_DCLEAN | \
TLB_V6_I_FULL | TLB_V6_D_FULL | \
TLB_V6_I_PAGE | TLB_V6_D_PAGE | \
TLB_V6_I_ASID | TLB_V6_D_ASID)
#if defined(CONFIG_CPU_V6)
# define v6wbi_possible_flags v6wbi_tlb_flags
# define v6wbi_always_flags v6wbi_tlb_flags
# ifdef _TLB
# define MULTI_TLB 1
# else
# define _TLB v6wbi
# endif
#else
# define v6wbi_possible_flags 0
# define v6wbi_always_flags (-1UL)
#endif
#ifndef _TLB
#ifndef _TLB
#error Unknown TLB model
#error Unknown TLB model
#endif
#endif
...
@@ -194,12 +223,14 @@ extern struct cpu_tlb_fns cpu_tlb;
...
@@ -194,12 +223,14 @@ extern struct cpu_tlb_fns cpu_tlb;
#define possible_tlb_flags (v3_possible_flags | \
#define possible_tlb_flags (v3_possible_flags | \
v4_possible_flags | \
v4_possible_flags | \
v4wbi_possible_flags | \
v4wbi_possible_flags | \
v4wb_possible_flags)
v4wb_possible_flags | \
v6wbi_possible_flags)
#define always_tlb_flags (v3_always_flags & \
#define always_tlb_flags (v3_always_flags & \
v4_always_flags & \
v4_always_flags & \
v4wbi_always_flags & \
v4wbi_always_flags & \
v4wb_always_flags)
v4wb_always_flags & \
v6wbi_always_flags)
#define tlb_flag(f) ((always_tlb_flags & (f)) || (__tlb_flag & possible_tlb_flags & (f)))
#define tlb_flag(f) ((always_tlb_flags & (f)) || (__tlb_flag & possible_tlb_flags & (f)))
...
@@ -213,17 +244,18 @@ static inline void flush_tlb_all(void)
...
@@ -213,17 +244,18 @@ static inline void flush_tlb_all(void)
if
(
tlb_flag
(
TLB_V3_FULL
))
if
(
tlb_flag
(
TLB_V3_FULL
))
asm
(
"mcr%? p15, 0, %0, c6, c0, 0"
:
:
"r"
(
zero
));
asm
(
"mcr%? p15, 0, %0, c6, c0, 0"
:
:
"r"
(
zero
));
if
(
tlb_flag
(
TLB_V4_U_FULL
))
if
(
tlb_flag
(
TLB_V4_U_FULL
|
TLB_V6_U_FULL
))
asm
(
"mcr%? p15, 0, %0, c8, c7, 0"
:
:
"r"
(
zero
));
asm
(
"mcr%? p15, 0, %0, c8, c7, 0"
:
:
"r"
(
zero
));
if
(
tlb_flag
(
TLB_V4_D_FULL
))
if
(
tlb_flag
(
TLB_V4_D_FULL
|
TLB_V6_D_FULL
))
asm
(
"mcr%? p15, 0, %0, c8, c6, 0"
:
:
"r"
(
zero
));
asm
(
"mcr%? p15, 0, %0, c8, c6, 0"
:
:
"r"
(
zero
));
if
(
tlb_flag
(
TLB_V4_I_FULL
))
if
(
tlb_flag
(
TLB_V4_I_FULL
|
TLB_V6_I_FULL
))
asm
(
"mcr%? p15, 0, %0, c8, c5, 0"
:
:
"r"
(
zero
));
asm
(
"mcr%? p15, 0, %0, c8, c5, 0"
:
:
"r"
(
zero
));
}
}
static
inline
void
flush_tlb_mm
(
struct
mm_struct
*
mm
)
static
inline
void
flush_tlb_mm
(
struct
mm_struct
*
mm
)
{
{
const
int
zero
=
0
;
const
int
zero
=
0
;
const
int
asid
=
ASID
(
mm
);
const
unsigned
int
__tlb_flag
=
__cpu_tlb_flags
;
const
unsigned
int
__tlb_flag
=
__cpu_tlb_flags
;
if
(
tlb_flag
(
TLB_WB
))
if
(
tlb_flag
(
TLB_WB
))
...
@@ -239,6 +271,13 @@ static inline void flush_tlb_mm(struct mm_struct *mm)
...
@@ -239,6 +271,13 @@ static inline void flush_tlb_mm(struct mm_struct *mm)
if
(
tlb_flag
(
TLB_V4_I_FULL
))
if
(
tlb_flag
(
TLB_V4_I_FULL
))
asm
(
"mcr%? p15, 0, %0, c8, c5, 0"
:
:
"r"
(
zero
));
asm
(
"mcr%? p15, 0, %0, c8, c5, 0"
:
:
"r"
(
zero
));
}
}
if
(
tlb_flag
(
TLB_V6_U_ASID
))
asm
(
"mcr%? p15, 0, %0, c8, c7, 2"
:
:
"r"
(
asid
));
if
(
tlb_flag
(
TLB_V6_D_ASID
))
asm
(
"mcr%? p15, 0, %0, c8, c6, 2"
:
:
"r"
(
asid
));
if
(
tlb_flag
(
TLB_V6_I_ASID
))
asm
(
"mcr%? p15, 0, %0, c8, c5, 2"
:
:
"r"
(
asid
));
}
}
static
inline
void
static
inline
void
...
@@ -247,7 +286,7 @@ flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
...
@@ -247,7 +286,7 @@ flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
const
int
zero
=
0
;
const
int
zero
=
0
;
const
unsigned
int
__tlb_flag
=
__cpu_tlb_flags
;
const
unsigned
int
__tlb_flag
=
__cpu_tlb_flags
;
uaddr
&=
PAGE_MASK
;
uaddr
=
(
uaddr
&
PAGE_MASK
)
|
ASID
(
vma
->
vm_mm
)
;
if
(
tlb_flag
(
TLB_WB
))
if
(
tlb_flag
(
TLB_WB
))
asm
(
"mcr%? p15, 0, %0, c7, c10, 4"
:
:
"r"
(
zero
));
asm
(
"mcr%? p15, 0, %0, c7, c10, 4"
:
:
"r"
(
zero
));
...
@@ -264,6 +303,13 @@ flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
...
@@ -264,6 +303,13 @@ flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
if
(
!
tlb_flag
(
TLB_V4_I_PAGE
)
&&
tlb_flag
(
TLB_V4_I_FULL
))
if
(
!
tlb_flag
(
TLB_V4_I_PAGE
)
&&
tlb_flag
(
TLB_V4_I_FULL
))
asm
(
"mcr%? p15, 0, %0, c8, c5, 0"
:
:
"r"
(
zero
));
asm
(
"mcr%? p15, 0, %0, c8, c5, 0"
:
:
"r"
(
zero
));
}
}
if
(
tlb_flag
(
TLB_V6_U_PAGE
))
asm
(
"mcr%? p15, 0, %0, c8, c7, 1"
:
:
"r"
(
uaddr
));
if
(
tlb_flag
(
TLB_V6_D_PAGE
))
asm
(
"mcr%? p15, 0, %0, c8, c6, 1"
:
:
"r"
(
uaddr
));
if
(
tlb_flag
(
TLB_V6_I_PAGE
))
asm
(
"mcr%? p15, 0, %0, c8, c5, 1"
:
:
"r"
(
uaddr
));
}
}
static
inline
void
flush_tlb_kernel_page
(
unsigned
long
kaddr
)
static
inline
void
flush_tlb_kernel_page
(
unsigned
long
kaddr
)
...
@@ -286,6 +332,13 @@ static inline void flush_tlb_kernel_page(unsigned long kaddr)
...
@@ -286,6 +332,13 @@ static inline void flush_tlb_kernel_page(unsigned long kaddr)
asm
(
"mcr%? p15, 0, %0, c8, c5, 1"
:
:
"r"
(
kaddr
));
asm
(
"mcr%? p15, 0, %0, c8, c5, 1"
:
:
"r"
(
kaddr
));
if
(
!
tlb_flag
(
TLB_V4_I_PAGE
)
&&
tlb_flag
(
TLB_V4_I_FULL
))
if
(
!
tlb_flag
(
TLB_V4_I_PAGE
)
&&
tlb_flag
(
TLB_V4_I_FULL
))
asm
(
"mcr%? p15, 0, %0, c8, c5, 0"
:
:
"r"
(
zero
));
asm
(
"mcr%? p15, 0, %0, c8, c5, 0"
:
:
"r"
(
zero
));
if
(
tlb_flag
(
TLB_V6_U_PAGE
))
asm
(
"mcr%? p15, 0, %0, c8, c7, 1"
:
:
"r"
(
kaddr
));
if
(
tlb_flag
(
TLB_V6_D_PAGE
))
asm
(
"mcr%? p15, 0, %0, c8, c6, 1"
:
:
"r"
(
kaddr
));
if
(
tlb_flag
(
TLB_V6_I_PAGE
))
asm
(
"mcr%? p15, 0, %0, c8, c5, 1"
:
:
"r"
(
kaddr
));
}
}
/*
/*
...
...
include/asm-arm/system.h
View file @
72847a2a
...
@@ -41,6 +41,7 @@ extern asmlinkage void __backtrace(void);
...
@@ -41,6 +41,7 @@ extern asmlinkage void __backtrace(void);
#define CPU_ARCH_ARMv5 4
#define CPU_ARCH_ARMv5 4
#define CPU_ARCH_ARMv5T 5
#define CPU_ARCH_ARMv5T 5
#define CPU_ARCH_ARMv5TE 6
#define CPU_ARCH_ARMv5TE 6
#define CPU_ARCH_ARMv6 7
extern
int
cpu_architecture
(
void
);
extern
int
cpu_architecture
(
void
);
...
...
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