Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
matisse
android_kernel_samsung_matisse
Commits
2161558f
Commit
2161558f
authored
19 years ago
by
Kyle McMartin
Browse files
Options
Download
Plain Diff
Merge branch 'master'
parents
e670dfb9
e67b23c7
Changes
82
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
1290 additions
and
344 deletions
+1290
-344
Documentation/00-INDEX
Documentation/00-INDEX
+6
-0
Documentation/HOWTO
Documentation/HOWTO
+618
-0
MAINTAINERS
MAINTAINERS
+16
-0
arch/ia64/kernel/ivt.S
arch/ia64/kernel/ivt.S
+71
-62
arch/powerpc/Kconfig
arch/powerpc/Kconfig
+0
-13
arch/powerpc/Makefile
arch/powerpc/Makefile
+4
-5
arch/powerpc/boot/crt0.S
arch/powerpc/boot/crt0.S
+11
-12
arch/powerpc/configs/ppc64_defconfig
arch/powerpc/configs/ppc64_defconfig
+242
-104
arch/powerpc/configs/pseries_defconfig
arch/powerpc/configs/pseries_defconfig
+0
-1
arch/powerpc/kernel/Makefile
arch/powerpc/kernel/Makefile
+5
-2
arch/powerpc/kernel/align.c
arch/powerpc/kernel/align.c
+264
-130
arch/powerpc/kernel/idle_64.c
arch/powerpc/kernel/idle_64.c
+0
-0
arch/powerpc/kernel/misc_32.S
arch/powerpc/kernel/misc_32.S
+0
-8
arch/powerpc/kernel/nvram_64.c
arch/powerpc/kernel/nvram_64.c
+0
-0
arch/powerpc/kernel/rtas-rtc.c
arch/powerpc/kernel/rtas-rtc.c
+3
-3
arch/powerpc/kernel/time.c
arch/powerpc/kernel/time.c
+28
-0
arch/powerpc/platforms/chrp/setup.c
arch/powerpc/platforms/chrp/setup.c
+10
-1
arch/powerpc/platforms/chrp/smp.c
arch/powerpc/platforms/chrp/smp.c
+1
-0
arch/powerpc/platforms/chrp/time.c
arch/powerpc/platforms/chrp/time.c
+1
-2
arch/powerpc/platforms/maple/time.c
arch/powerpc/platforms/maple/time.c
+10
-1
No files found.
Documentation/00-INDEX
View file @
2161558f
...
...
@@ -24,6 +24,8 @@ DMA-mapping.txt
- info for PCI drivers using DMA portably across all platforms.
DocBook/
- directory with DocBook templates etc. for kernel documentation.
HOWTO
- The process and procedures of how to do Linux kernel development.
IO-mapping.txt
- how to access I/O mapped memory from within device drivers.
IPMI.txt
...
...
@@ -256,6 +258,10 @@ specialix.txt
- info on hardware/driver for specialix IO8+ multiport serial card.
spinlocks.txt
- info on using spinlocks to provide exclusive access in kernel.
stable_api_nonsense.txt
- info on why the kernel does not have a stable in-kernel api or abi.
stable_kernel_rules.txt
- rules and procedures for the -stable kernel releases.
stallion.txt
- info on using the Stallion multiport serial driver.
svga.txt
...
...
This diff is collapsed.
Click to expand it.
Documentation/HOWTO
0 → 100644
View file @
2161558f
This diff is collapsed.
Click to expand it.
MAINTAINERS
View file @
2161558f
...
...
@@ -58,6 +58,7 @@ P: Person
M: Mail patches to
L: Mailing list that is relevant to this area
W: Web-page with status/info
T: SCM tree type and URL. Type is one of: git, hg, quilt.
S: Status, one of the following:
Supported: Someone is actually paid to look after this.
...
...
@@ -183,6 +184,7 @@ P: Len Brown
M: len.brown@intel.com
L: acpi-devel@lists.sourceforge.net
W: http://acpi.sourceforge.net/
T: git kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git
S: Maintained
AD1816 SOUND DRIVER
...
...
@@ -418,6 +420,7 @@ BLOCK LAYER
P: Jens Axboe
M: axboe@suse.de
L: linux-kernel@vger.kernel.org
T: git kernel.org:/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git
S: Maintained
BLUETOOTH SUBSYSTEM
...
...
@@ -803,12 +806,14 @@ DRIVER CORE, KOBJECTS, AND SYSFS
P: Greg Kroah-Hartman
M: gregkh@suse.de
L: linux-kernel@vger.kernel.org
T: quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
S: Supported
DRM DRIVERS
P: David Airlie
M: airlied@linux.ie
L: dri-devel@lists.sourceforge.net
T: git kernel.org:/pub/scm/linux/kernel/git/airlied/drm-2.6.git
S: Maintained
DSCC4 DRIVER
...
...
@@ -1113,6 +1118,7 @@ P: Jean Delvare
M: khali@linux-fr.org
L: lm-sensors@lm-sensors.org
W: http://www.lm-sensors.nu/
T: quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
S: Maintained
I2O
...
...
@@ -1145,6 +1151,7 @@ P: Tony Luck
M: tony.luck@intel.com
L: linux-ia64@vger.kernel.org
W: http://www.ia64-linux.org/
T: git kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git
S: Maintained
SN-IA64 (Itanium) SUB-PLATFORM
...
...
@@ -1212,6 +1219,7 @@ P: Jody McIntyre
M: scjody@steamballoon.com
L: linux1394-devel@lists.sourceforge.net
W: http://www.linux1394.org/
T: git kernel.org:/pub/scm/linux/kernel/git/scjody/ieee1394.git
S: Maintained
IEEE 1394 OHCI DRIVER
...
...
@@ -1263,6 +1271,7 @@ P: Hal Rosenstock
M: halr@voltaire.com
L: openib-general@openib.org
W: http://www.openib.org/
T: git kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git
S: Supported
INPUT (KEYBOARD, MOUSE, JOYSTICK) DRIVERS
...
...
@@ -1436,6 +1445,7 @@ P: Kai Germaschewski
M: kai@germaschewski.name
P: Sam Ravnborg
M: sam@ravnborg.org
T: git kernel.org:/pub/scm/linux/kernel/git/sam/kbuild.git
S: Maintained
KERNEL JANITORS
...
...
@@ -1782,6 +1792,7 @@ M: akpm@osdl.org
P: Jeff Garzik
M: jgarzik@pobox.com
L: netdev@vger.kernel.org
T: git kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git
S: Maintained
NETWORKING [GENERAL]
...
...
@@ -1959,6 +1970,7 @@ P: Greg Kroah-Hartman
M: gregkh@suse.de
L: linux-kernel@vger.kernel.org
L: linux-pci@atrey.karlin.mff.cuni.cz
T: quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
S: Supported
PCI HOTPLUG CORE
...
...
@@ -1980,6 +1992,7 @@ S: Maintained
PCMCIA SUBSYSTEM
P: Linux PCMCIA Team
L: http://lists.infradead.org/mailman/listinfo/linux-pcmcia
T: git kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git
S: Maintained
PCNET32 NETWORK DRIVER
...
...
@@ -2189,6 +2202,7 @@ SCSI SUBSYSTEM
P: James E.J. Bottomley
M: James.Bottomley@SteelEye.com
L: linux-scsi@vger.kernel.org
T: git kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git
S: Maintained
SCSI TAPE DRIVER
...
...
@@ -2228,6 +2242,7 @@ SERIAL ATA (SATA) SUBSYSTEM:
P: Jeff Garzik
M: jgarzik@pobox.com
L: linux-ide@vger.kernel.org
T: git kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git
S: Supported
SGI SN-IA64 (Altix) SERIAL CONSOLE DRIVER
...
...
@@ -2749,6 +2764,7 @@ M: gregkh@suse.de
L: linux-usb-users@lists.sourceforge.net
L: linux-usb-devel@lists.sourceforge.net
W: http://www.linux-usb.org
T: quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
S: Supported
USB UHCI DRIVER
...
...
This diff is collapsed.
Click to expand it.
arch/ia64/kernel/ivt.S
View file @
2161558f
...
...
@@ -91,16 +91,17 @@ ENTRY(vhpt_miss)
*
(
the
"original"
)
TLB
miss
,
which
may
either
be
caused
by
an
instruction
*
fetch
or
a
data
access
(
or
non
-
access
)
.
*
*
What
we
do
here
is
normal
TLB
miss
handing
for
the
_original_
miss
,
followed
*
by
inserting
the
TLB
entry
for
the
virtual
page
table
page
that
the
VHPT
*
walker
was
attempting
to
access
.
The
latter
gets
inserted
as
long
*
as
both
L1
and
L2
have
valid
mappings
for
the
faulting
address
.
*
The
TLB
entry
for
the
original
miss
gets
inserted
only
if
*
the
L3
entry
indicates
that
the
page
is
present
.
*
What
we
do
here
is
normal
TLB
miss
handing
for
the
_original_
miss
,
*
followed
by
inserting
the
TLB
entry
for
the
virtual
page
table
page
*
that
the
VHPT
walker
was
attempting
to
access
.
The
latter
gets
*
inserted
as
long
as
page
table
entry
above
pte
level
have
valid
*
mappings
for
the
faulting
address
.
The
TLB
entry
for
the
original
*
miss
gets
inserted
only
if
the
pte
entry
indicates
that
the
page
is
*
present
.
*
*
do_page_fault
gets
invoked
in
the
following
cases
:
*
-
the
faulting
virtual
address
uses
unimplemented
address
bits
*
-
the
faulting
virtual
address
has
no
L1
,
L2
,
or
L3
mapping
*
-
the
faulting
virtual
address
has
no
valid
page
table
mapping
*/
mov
r16
=
cr
.
ifa
//
get
address
that
caused
the
TLB
miss
#ifdef CONFIG_HUGETLB_PAGE
...
...
@@ -126,7 +127,7 @@ ENTRY(vhpt_miss)
#endif
;;
cmp.eq
p6
,
p7
=
5
,
r17
//
is
IFA
pointing
into
to
region
5
?
shr.u
r18
=
r22
,
PGDIR_SHIFT
//
get
b
its
33
-
63
of
the
faulting
address
shr.u
r18
=
r22
,
PGDIR_SHIFT
//
get
b
ottom
portion
of
pgd
index
bit
;;
(
p7
)
dep
r17
=
r17
,
r19
,(
PAGE_SHIFT
-
3
),
3
//
put
region
number
bits
in
place
...
...
@@ -137,38 +138,38 @@ ENTRY(vhpt_miss)
(
p6
)
shr.u
r21
=
r21
,
PGDIR_SHIFT
+
PAGE_SHIFT
(
p7
)
shr.u
r21
=
r21
,
PGDIR_SHIFT
+
PAGE_SHIFT
-
3
;;
(
p6
)
dep
r17
=
r18
,
r19
,
3
,(
PAGE_SHIFT
-
3
)
//
r17
=
PTA
+
IFA
(
33
,
42
)*
8
(
p7
)
dep
r17
=
r18
,
r17
,
3
,(
PAGE_SHIFT
-
6
)
//
r17
=
PTA
+
(((
IFA
(
61
,
63
)
<<
7
)
|
IFA
(
33
,
39
))*
8
)
(
p6
)
dep
r17
=
r18
,
r19
,
3
,(
PAGE_SHIFT
-
3
)
//
r17
=
pgd_offset
for
region
5
(
p7
)
dep
r17
=
r18
,
r17
,
3
,(
PAGE_SHIFT
-
6
)
//
r17
=
pgd_offset
for
region
[
0
-
4
]
cmp.eq
p7
,
p6
=
0
,
r21
//
unused
address
bits
all
zeroes
?
#ifdef CONFIG_PGTABLE_4
shr.u
r28
=
r22
,
PUD_SHIFT
//
shift
L2
index
into
position
shr.u
r28
=
r22
,
PUD_SHIFT
//
shift
pud
index
into
position
#else
shr.u
r18
=
r22
,
PMD_SHIFT
//
shift
L3
index
into
position
shr.u
r18
=
r22
,
PMD_SHIFT
//
shift
pmd
index
into
position
#endif
;;
ld8
r17
=[
r17
]
//
f
et
ch
the
L1
entry
(
may
be
0
)
ld8
r17
=[
r17
]
//
g
et
*
pgd
(
may
be
0
)
;;
(
p7
)
cmp.eq
p6
,
p7
=
r17
,
r0
//
was
L1
entry
NULL
?
(
p7
)
cmp.eq
p6
,
p7
=
r17
,
r0
//
was
pgd_present
(*
pgd
)
==
NULL
?
#ifdef CONFIG_PGTABLE_4
dep
r28
=
r28
,
r17
,
3
,(
PAGE_SHIFT
-
3
)
//
compute
address
of
L2
page
table
entry
dep
r28
=
r28
,
r17
,
3
,(
PAGE_SHIFT
-
3
)
//
r28
=
pud_offset
(
pgd
,
addr
)
;;
shr.u
r18
=
r22
,
PMD_SHIFT
//
shift
L3
index
into
position
(
p7
)
ld8
r29
=[
r28
]
//
f
et
ch
the
L2
entry
(
may
be
0
)
shr.u
r18
=
r22
,
PMD_SHIFT
//
shift
pmd
index
into
position
(
p7
)
ld8
r29
=[
r28
]
//
g
et
*
pud
(
may
be
0
)
;;
(
p7
)
cmp.eq.or.andcm
p6
,
p7
=
r29
,
r0
//
was
L2
entry
NULL
?
dep
r17
=
r18
,
r29
,
3
,(
PAGE_SHIFT
-
3
)
//
compute
address
of
L3
page
table
entry
(
p7
)
cmp.eq.or.andcm
p6
,
p7
=
r29
,
r0
//
was
pud_present
(*
pud
)
==
NULL
?
dep
r17
=
r18
,
r29
,
3
,(
PAGE_SHIFT
-
3
)
//
r17
=
pmd_offset
(
pud
,
addr
)
#else
dep
r17
=
r18
,
r17
,
3
,(
PAGE_SHIFT
-
3
)
//
compute
address
of
L3
page
table
entry
dep
r17
=
r18
,
r17
,
3
,(
PAGE_SHIFT
-
3
)
//
r17
=
pmd_offset
(
pgd
,
addr
)
#endif
;;
(
p7
)
ld8
r20
=[
r17
]
//
f
et
ch
the
L3
entry
(
may
be
0
)
shr.u
r19
=
r22
,
PAGE_SHIFT
//
shift
L4
index
into
position
(
p7
)
ld8
r20
=[
r17
]
//
g
et
*
pmd
(
may
be
0
)
shr.u
r19
=
r22
,
PAGE_SHIFT
//
shift
pte
index
into
position
;;
(
p7
)
cmp.eq.or.andcm
p6
,
p7
=
r20
,
r0
//
was
L3
entry
NULL
?
dep
r21
=
r19
,
r20
,
3
,(
PAGE_SHIFT
-
3
)
//
compute
address
of
L4
page
table
entry
(
p7
)
cmp.eq.or.andcm
p6
,
p7
=
r20
,
r0
//
was
pmd_present
(*
pmd
)
==
NULL
?
dep
r21
=
r19
,
r20
,
3
,(
PAGE_SHIFT
-
3
)
//
r21
=
pte_offset
(
pmd
,
addr
)
;;
(
p7
)
ld8
r18
=[
r21
]
//
read
the
L4
PTE
mov
r19
=
cr
.
isr
//
cr
.
isr
bit
0
tells
us
if
this
is
an
insn
miss
(
p7
)
ld8
r18
=[
r21
]
//
read
*
pte
mov
r19
=
cr
.
isr
//
cr
.
isr
bit
32
tells
us
if
this
is
an
insn
miss
;;
(
p7
)
tbit.z
p6
,
p7
=
r18
,
_PAGE_P_BIT
//
page
present
bit
cleared
?
mov
r22
=
cr
.
iha
//
get
the
VHPT
address
that
caused
the
TLB
miss
...
...
@@ -202,25 +203,33 @@ ENTRY(vhpt_miss)
dv_serialize_data
/
*
*
Re
-
check
L2
and
L3
pagetable
.
If
they
changed
,
we
may
have
received
a
ptc
.
g
*
Re
-
check
pagetable
entry
.
If
they
changed
,
we
may
have
received
a
ptc
.
g
*
between
reading
the
pagetable
and
the
"itc"
.
If
so
,
flush
the
entry
we
*
inserted
and
retry
.
*
inserted
and
retry
.
At
this
point
,
we
have
:
*
*
r28
=
equivalent
of
pud_offset
(
pgd
,
ifa
)
*
r17
=
equivalent
of
pmd_offset
(
pud
,
ifa
)
*
r21
=
equivalent
of
pte_offset
(
pmd
,
ifa
)
*
*
r29
=
*
pud
*
r20
=
*
pmd
*
r18
=
*
pte
*/
ld8
r25
=[
r21
]
//
read
L4
entry
again
ld8
r26
=[
r17
]
//
read
L3
PTE
again
ld8
r25
=[
r21
]
//
read
*
pte
again
ld8
r26
=[
r17
]
//
read
*
pmd
again
#ifdef CONFIG_PGTABLE_4
ld8
r1
8
=[
r28
]
//
read
L2
entry
again
ld8
r1
9
=[
r28
]
//
read
*
pud
again
#endif
cmp.ne
p6
,
p7
=
r0
,
r0
;;
cmp.ne.or.andcm
p6
,
p7
=
r26
,
r20
//
did
L3
entry
change
cmp.ne.or.andcm
p6
,
p7
=
r26
,
r20
//
did
*
pmd
change
#ifdef CONFIG_PGTABLE_4
cmp.ne.or.andcm
p6
,
p7
=
r
2
9
,
r
18
//
did
L4
PTE
change
cmp.ne.or.andcm
p6
,
p7
=
r
1
9
,
r
29
//
did
*
pud
change
#endif
mov
r27
=
PAGE_SHIFT
<<
2
;;
(
p6
)
ptc.l
r22
,
r27
//
purge
PTE
page
translation
(
p7
)
cmp.ne.or.andcm
p6
,
p7
=
r25
,
r18
//
did
L4
PTE
change
(
p7
)
cmp.ne.or.andcm
p6
,
p7
=
r25
,
r18
//
did
*
pte
change
;;
(
p6
)
ptc.l
r16
,
r27
//
purge
translation
#endif
...
...
@@ -235,19 +244,19 @@ END(vhpt_miss)
ENTRY
(
itlb_miss
)
DBG_FAULT
(1)
/
*
*
The
ITLB
handler
accesses
the
L3
PTE
via
the
virtually
mapped
linear
*
The
ITLB
handler
accesses
the
PTE
via
the
virtually
mapped
linear
*
page
table
.
If
a
nested
TLB
miss
occurs
,
we
switch
into
physical
*
mode
,
walk
the
page
table
,
and
then
re
-
execute
the
L3
PTE
read
*
and
go
on
normally
after
that
.
*
mode
,
walk
the
page
table
,
and
then
re
-
execute
the
PTE
read
and
*
go
on
normally
after
that
.
*/
mov
r16
=
cr
.
ifa
//
get
virtual
address
mov
r29
=
b0
//
save
b0
mov
r31
=
pr
//
save
predicates
.
itlb_fault
:
mov
r17
=
cr
.
iha
//
get
virtual
address
of
L3
PTE
mov
r17
=
cr
.
iha
//
get
virtual
address
of
PTE
movl
r30
=
1
f
//
load
nested
fault
continuation
point
;;
1
:
ld8
r18
=[
r17
]
//
read
L3
PTE
1
:
ld8
r18
=[
r17
]
//
read
*
pte
;;
mov
b0
=
r29
tbit.z
p6
,
p0
=
r18
,
_PAGE_P_BIT
//
page
present
bit
cleared
?
...
...
@@ -262,7 +271,7 @@ ENTRY(itlb_miss)
*/
dv_serialize_data
ld8
r19
=[
r17
]
//
read
L3
PTE
again
and
see
if
same
ld8
r19
=[
r17
]
//
read
*
pte
again
and
see
if
same
mov
r20
=
PAGE_SHIFT
<<
2
//
setup
page
size
for
purge
;;
cmp.ne
p7
,
p0
=
r18
,
r19
...
...
@@ -279,19 +288,19 @@ END(itlb_miss)
ENTRY
(
dtlb_miss
)
DBG_FAULT
(2)
/
*
*
The
DTLB
handler
accesses
the
L3
PTE
via
the
virtually
mapped
linear
*
The
DTLB
handler
accesses
the
PTE
via
the
virtually
mapped
linear
*
page
table
.
If
a
nested
TLB
miss
occurs
,
we
switch
into
physical
*
mode
,
walk
the
page
table
,
and
then
re
-
execute
the
L3
PTE
read
*
and
go
on
normally
after
that
.
*
mode
,
walk
the
page
table
,
and
then
re
-
execute
the
PTE
read
and
*
go
on
normally
after
that
.
*/
mov
r16
=
cr
.
ifa
//
get
virtual
address
mov
r29
=
b0
//
save
b0
mov
r31
=
pr
//
save
predicates
dtlb_fault
:
mov
r17
=
cr
.
iha
//
get
virtual
address
of
L3
PTE
mov
r17
=
cr
.
iha
//
get
virtual
address
of
PTE
movl
r30
=
1
f
//
load
nested
fault
continuation
point
;;
1
:
ld8
r18
=[
r17
]
//
read
L3
PTE
1
:
ld8
r18
=[
r17
]
//
read
*
pte
;;
mov
b0
=
r29
tbit.z
p6
,
p0
=
r18
,
_PAGE_P_BIT
//
page
present
bit
cleared
?
...
...
@@ -306,7 +315,7 @@ dtlb_fault:
*/
dv_serialize_data
ld8
r19
=[
r17
]
//
read
L3
PTE
again
and
see
if
same
ld8
r19
=[
r17
]
//
read
*
pte
again
and
see
if
same
mov
r20
=
PAGE_SHIFT
<<
2
//
setup
page
size
for
purge
;;
cmp.ne
p7
,
p0
=
r18
,
r19
...
...
@@ -420,7 +429,7 @@ ENTRY(nested_dtlb_miss)
*
r30
:
continuation
address
*
r31
:
saved
pr
*
*
Output
:
r17
:
physical
address
of
L3
PTE
of
faulting
address
*
Output
:
r17
:
physical
address
of
PTE
of
faulting
address
*
r29
:
saved
b0
*
r30
:
continuation
address
*
r31
:
saved
pr
...
...
@@ -450,33 +459,33 @@ ENTRY(nested_dtlb_miss)
(
p6
)
shr.u
r21
=
r21
,
PGDIR_SHIFT
+
PAGE_SHIFT
(
p7
)
shr.u
r21
=
r21
,
PGDIR_SHIFT
+
PAGE_SHIFT
-
3
;;
(
p6
)
dep
r17
=
r18
,
r19
,
3
,(
PAGE_SHIFT
-
3
)
//
r17
=
PTA
+
IFA
(
33
,
42
)*
8
(
p7
)
dep
r17
=
r18
,
r17
,
3
,(
PAGE_SHIFT
-
6
)
//
r17
=
PTA
+
(((
IFA
(
61
,
63
)
<<
7
)
|
IFA
(
33
,
39
))*
8
)
(
p6
)
dep
r17
=
r18
,
r19
,
3
,(
PAGE_SHIFT
-
3
)
//
r17
=
pgd_offset
for
region
5
(
p7
)
dep
r17
=
r18
,
r17
,
3
,(
PAGE_SHIFT
-
6
)
//
r17
=
pgd_offset
for
region
[
0
-
4
]
cmp.eq
p7
,
p6
=
0
,
r21
//
unused
address
bits
all
zeroes
?
#ifdef CONFIG_PGTABLE_4
shr.u
r18
=
r22
,
PUD_SHIFT
//
shift
L2
index
into
position
shr.u
r18
=
r22
,
PUD_SHIFT
//
shift
pud
index
into
position
#else
shr.u
r18
=
r22
,
PMD_SHIFT
//
shift
L3
index
into
position
shr.u
r18
=
r22
,
PMD_SHIFT
//
shift
pmd
index
into
position
#endif
;;
ld8
r17
=[
r17
]
//
f
et
ch
the
L1
entry
(
may
be
0
)
ld8
r17
=[
r17
]
//
g
et
*
pgd
(
may
be
0
)
;;
(
p7
)
cmp.eq
p6
,
p7
=
r17
,
r0
//
was
L1
entry
NULL
?
dep
r17
=
r18
,
r17
,
3
,(
PAGE_SHIFT
-
3
)
//
compute
address
of
L2
page
table
entry
(
p7
)
cmp.eq
p6
,
p7
=
r17
,
r0
//
was
pgd_present
(*
pgd
)
==
NULL
?
dep
r17
=
r18
,
r17
,
3
,(
PAGE_SHIFT
-
3
)
//
r17
=
p
[
u
|
m
]
d_offset
(
pgd
,
addr
)
;;
#ifdef CONFIG_PGTABLE_4
(
p7
)
ld8
r17
=[
r17
]
//
f
et
ch
the
L2
entry
(
may
be
0
)
shr.u
r18
=
r22
,
PMD_SHIFT
//
shift
L3
index
into
position
(
p7
)
ld8
r17
=[
r17
]
//
g
et
*
pud
(
may
be
0
)
shr.u
r18
=
r22
,
PMD_SHIFT
//
shift
pmd
index
into
position
;;
(
p7
)
cmp.eq.or.andcm
p6
,
p7
=
r17
,
r0
//
was
L2
entry
NULL
?
dep
r17
=
r18
,
r17
,
3
,(
PAGE_SHIFT
-
3
)
//
compute
address
of
L2
page
table
entry
(
p7
)
cmp.eq.or.andcm
p6
,
p7
=
r17
,
r0
//
was
pud_present
(*
pud
)
==
NULL
?
dep
r17
=
r18
,
r17
,
3
,(
PAGE_SHIFT
-
3
)
//
r17
=
pmd_offset
(
pud
,
addr
)
;;
#endif
(
p7
)
ld8
r17
=[
r17
]
//
f
et
ch
the
L3
entry
(
may
be
0
)
shr.u
r19
=
r22
,
PAGE_SHIFT
//
shift
L4
index
into
position
(
p7
)
ld8
r17
=[
r17
]
//
g
et
*
pmd
(
may
be
0
)
shr.u
r19
=
r22
,
PAGE_SHIFT
//
shift
pte
index
into
position
;;
(
p7
)
cmp.eq.or.andcm
p6
,
p7
=
r17
,
r0
//
was
L3
entry
NULL
?
dep
r17
=
r19
,
r17
,
3
,(
PAGE_SHIFT
-
3
)
//
compute
address
of
L4
page
table
entry
(
p7
)
cmp.eq.or.andcm
p6
,
p7
=
r17
,
r0
//
was
pmd_present
(*
pmd
)
==
NULL
?
dep
r17
=
r19
,
r17
,
3
,(
PAGE_SHIFT
-
3
)
//
r17
=
pte_offset
(
pmd
,
addr
)
;
(
p6
)
br.cond.spnt
page_fault
mov
b0
=
r30
br.sptk.many
b0
//
return
to
continuation
point
...
...
This diff is collapsed.
Click to expand it.
arch/powerpc/Kconfig
View file @
2161558f
...
...
@@ -598,19 +598,6 @@ config ARCH_MEMORY_PROBE
def_bool y
depends on MEMORY_HOTPLUG
# Some NUMA nodes have memory ranges that span
# other nodes. Even though a pfn is valid and
# between a node's start and end pfns, it may not
# reside on that node.
#
# This is a relatively temporary hack that should
# be able to go away when sparsemem is fully in
# place
config NODES_SPAN_OTHER_NODES
def_bool y
depends on NEED_MULTIPLE_NODES
config PPC_64K_PAGES
bool "64k page size"
depends on PPC64
...
...
This diff is collapsed.
Click to expand it.
arch/powerpc/Makefile
View file @
2161558f
...
...
@@ -33,6 +33,8 @@ endif
export
CROSS32CC
CROSS32AS
CROSS32LD
CROSS32OBJCOPY
KBUILD_DEFCONFIG
:=
$(
shell
uname
-m
)
_defconfig
ifeq
($(CONFIG_PPC64),y)
OLDARCH
:=
ppc64
SZ
:=
64
...
...
@@ -111,9 +113,6 @@ cpu-as-$(CONFIG_E200) += -Wa,-me200
AFLAGS
+=
$
(
cpu-as-y
)
CFLAGS
+=
$
(
cpu-as-y
)
# Default to the common case.
KBUILD_DEFCONFIG
:=
common_defconfig
head-y
:=
arch
/powerpc/kernel/head_32.o
head-$(CONFIG_PPC64)
:=
arch
/powerpc/kernel/head_64.o
head-$(CONFIG_8xx)
:=
arch
/powerpc/kernel/head_8xx.o
...
...
@@ -125,11 +124,11 @@ head-$(CONFIG_PPC64) += arch/powerpc/kernel/entry_64.o
head-$(CONFIG_PPC_FPU)
+=
arch
/powerpc/kernel/fpu.o
core-y
+=
arch
/powerpc/kernel/
\
arch
/
$(OLDARCH)
/kernel/
\
arch
/powerpc/mm/
\
arch
/powerpc/lib/
\
arch
/powerpc/sysdev/
\
arch
/powerpc/platforms/
core-$(CONFIG_PPC32)
+=
arch
/ppc/kernel/
core-$(CONFIG_MATH_EMULATION)
+=
arch
/ppc/math-emu/
core-$(CONFIG_XMON)
+=
arch
/powerpc/xmon/
core-$(CONFIG_APUS)
+=
arch
/ppc/amiga/
...
...
@@ -165,7 +164,7 @@ define archhelp
@echo
' (your) ~/bin/installkernel or'
@echo
' (distribution) /sbin/installkernel or'
@echo
' install to $$(INSTALL_PATH) and run lilo'
@echo
' *_defconfig - Select default config from arch/$(ARCH)/
ppc/
configs'
@echo
' *_defconfig - Select default config from arch/$(ARCH)/configs'
endef
archclean
:
...
...
This diff is collapsed.
Click to expand it.
arch/powerpc/boot/crt0.S
View file @
2161558f
...
...
@@ -14,43 +14,42 @@
.
text
.
globl
_zimage_start
_zimage_start
:
bl
reloc_offset
bl
1
f
reloc_offset
:
1
:
mflr
r0
lis
r9
,
reloc_offset
@
ha
addi
r9
,
r9
,
reloc_offset
@
l
lis
r9
,
1
b
@
ha
addi
r9
,
r9
,
1
b
@
l
subf
.
r0
,
r9
,
r0
beq
clear_caches
beq
3
f
reloc_got2
:
lis
r9
,
__got2_start
@
ha
addi
r9
,
r9
,
__got2_start
@
l
lis
r8
,
__got2_end
@
ha
addi
r8
,
r8
,
__got2_end
@
l
subf
.
r8
,
r9
,
r8
beq
clear_caches
beq
3
f
srwi
.
r8
,
r8
,
2
mtctr
r8
add
r9
,
r0
,
r9
reloc_got2_loop
:
2
:
lwz
r8
,
0
(
r9
)
add
r8
,
r8
,
r0
stw
r8
,
0
(
r9
)
addi
r9
,
r9
,
4
bdnz
reloc_got2_loop
bdnz
2
b
clear_caches
:
3
:
lis
r9
,
_start
@
h
add
r9
,
r0
,
r9
lis
r8
,
_etext
@
ha
addi
r8
,
r8
,
_etext
@
l
add
r8
,
r0
,
r8
1
:
dcbf
r0
,
r9
4
:
dcbf
r0
,
r9
icbi
r0
,
r9
addi
r9
,
r9
,
0x20
cmplwi
0
,
r9
,
8
blt
1
b
blt
4
b
sync
isync
...
...
This diff is collapsed.
Click to expand it.
arch/ppc64
/
defconfig
→
arch/
powerpc/configs/
ppc64
_
defconfig
View file @
2161558f
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.1
4
-rc
4
#
Thu Oct 20 08:28:33
2005
# Linux kernel version: 2.6.1
5
-rc
1
#
Fri Nov 18 16:23:24
2005
#
CONFIG_PPC64=y
CONFIG_64BIT=y
CONFIG_PPC_MERGE=y
CONFIG_MMU=y
CONFIG_GENERIC_HARDIRQS=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_
GENERIC_ISA_DMA
=y
CONFIG_
PPC
=y
CONFIG_EARLY_PRINTK=y
CONFIG_COMPAT=y
CONFIG_SYSVIPC_COMPAT=y
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
CONFIG_FORCE_MAX_ZONEORDER=13
#
# Processor support
#
# CONFIG_POWER4_ONLY is not set
CONFIG_POWER3=y
CONFIG_POWER4=y
CONFIG_PPC_FPU=y
CONFIG_ALTIVEC=y
CONFIG_PPC_STD_MMU=y
CONFIG_SMP=y
CONFIG_NR_CPUS=32
#
# Code maturity level options
...
...
@@ -41,7 +56,7 @@ CONFIG_CPUSETS=y
CONFIG_INITRAMFS_SOURCE=""
# CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y
#
CONFIG_KALLSYMS_ALL
is not set
CONFIG_KALLSYMS_ALL
=y
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_PRINTK=y
CONFIG_BUG=y
...
...
@@ -67,78 +82,115 @@ CONFIG_MODVERSIONS=y
CONFIG_MODULE_SRCVERSION_ALL=y
CONFIG_KMOD=y
CONFIG_STOP_MACHINE=y
CONFIG_SYSVIPC_COMPAT=y
#
# Block layer
#
#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
CONFIG_DEFAULT_AS=y
# CONFIG_DEFAULT_DEADLINE is not set
# CONFIG_DEFAULT_CFQ is not set
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="anticipatory"
#
# Platform support
#
# CONFIG_PPC_ISERIES is not set
CONFIG_PPC_MULTIPLATFORM=y
# CONFIG_PPC_ISERIES is not set
# CONFIG_EMBEDDED6xx is not set
# CONFIG_APUS is not set
CONFIG_PPC_PSERIES=y
CONFIG_PPC_BPA=y
CONFIG_PPC_PMAC=y
CONFIG_PPC_PMAC64=y
CONFIG_PPC_MAPLE=y
CONFIG_PPC=y
CONFIG_PPC64=y
# CONFIG_PPC_CELL is not set
CONFIG_PPC_OF=y
CONFIG_XICS=y
CONFIG_MPIC=y
CONFIG_BPA_IIC=y
CONFIG_ALTIVEC=y
CONFIG_PPC_SPLPAR=y
CONFIG_KEXEC=y
CONFIG_IBMVIO=y
CONFIG_U3_DART=y
CONFIG_MPIC=y
CONFIG_PPC_RTAS=y
CONFIG_RTAS_ERROR_LOGGING=y
CONFIG_RTAS_PROC=y
CONFIG_RTAS_FLASH=m
# CONFIG_MMIO_NVRAM is not set
CONFIG_MPIC_BROKEN_U3=y
CONFIG_PPC_PMAC64=y
CONFIG_BOOTX_TEXT=y
# CONFIG_POWER4_ONLY is not set
CONFIG_IBMVIO=y
# CONFIG_PPC_MPC106 is not set
CONFIG_GENERIC_TBSYNC=y
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_TABLE=y
# CONFIG_CPU_FREQ_DEBUG is not set
CONFIG_CPU_FREQ_STAT=y
# CONFIG_CPU_FREQ_STAT_DETAILS is not set
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=y
# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
CONFIG_CPU_FREQ_PMAC64=y
# CONFIG_WANT_EARLY_SERIAL is not set
#
# Kernel options
#
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_BKL is not set
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=m
CONFIG_FORCE_MAX_ZONEORDER=13
CONFIG_IOMMU_VMERGE=y
CONFIG_SMP=y
CONFIG_NR_CPUS=32
CONFIG_HOTPLUG_CPU=y
CONFIG_KEXEC=y
CONFIG_IRQ_ALL_CPUS=y
CONFIG_PPC_SPLPAR=y
CONFIG_EEH=y
CONFIG_SCANLOG=m
CONFIG_LPARCFG=y
# CONFIG_NUMA is not set
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
CONFIG_ARCH_FLATMEM_ENABLE=y
CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_SPARSEMEM_DEFAULT=y
CONFIG_SELECT_MEMORY_MODEL=y
# CONFIG_FLATMEM_MANUAL is not set
CONFIG_DISCONTIGMEM_MANUAL=y
# CONFIG_SPARSEMEM_MANUAL is not set
CONFIG_DISCONTIGMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_NEED_MULTIPLE_NODES=y
# CONFIG_DISCONTIGMEM_MANUAL is not set
CONFIG_SPARSEMEM_MANUAL=y
CONFIG_SPARSEMEM=y
CONFIG_HAVE_MEMORY_PRESENT=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
CONFIG_NODES_SPAN_OTHER_NODES=y
# CONFIG_NUMA is not set
CONFIG_SPARSEMEM_EXTREME=y
# CONFIG_MEMORY_HOTPLUG is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_PPC_64K_PAGES is not set
# CONFIG_SCHED_SMT is not set
CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_BKL is not set
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
CONFIG_EEH=y
CONFIG_GENERIC_HARDIRQS=y
CONFIG_PPC_RTAS=y
CONFIG_RTAS_PROC=y
CONFIG_RTAS_FLASH=m
CONFIG_SCANLOG=m
CONFIG_LPARCFG=y
CONFIG_SECCOMP=y
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=m
CONFIG_HOTPLUG_CPU=y
CONFIG_PROC_DEVICETREE=y
# CONFIG_CMDLINE_BOOL is not set
# CONFIG_PM is not set
CONFIG_SECCOMP=y
CONFIG_ISA_DMA_API=y
#
# Bus
O
ptions
# Bus
o
ptions
#
CONFIG_GENERIC_ISA_DMA=y
CONFIG_PPC_I8259=y
# CONFIG_PPC_INDIRECT_PCI is not set
CONFIG_PCI=y
CONFIG_PCI_DOMAINS=y
# CONFIG_PCI_LEGACY_PROC is not set
...
...
@@ -158,6 +210,7 @@ CONFIG_HOTPLUG_PCI=m
# CONFIG_HOTPLUG_PCI_SHPC is not set
CONFIG_HOTPLUG_PCI_RPA=m
CONFIG_HOTPLUG_PCI_RPA_DLPAR=m
CONFIG_KERNEL_START=0xc000000000000000
#
# Networking
...
...
@@ -199,6 +252,10 @@ CONFIG_TCP_CONG_BIC=y
# CONFIG_IPV6 is not set
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
#
# Core Netfilter Configuration
#
CONFIG_NETFILTER_NETLINK=y
CONFIG_NETFILTER_NETLINK_QUEUE=m
CONFIG_NETFILTER_NETLINK_LOG=m
...
...
@@ -301,6 +358,10 @@ CONFIG_LLC=y
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set
CONFIG_NET_CLS_ROUTE=y
...
...
@@ -338,13 +399,7 @@ CONFIG_FW_LOADER=y
#
# Parallel port support
#
CONFIG_PARPORT=m
CONFIG_PARPORT_PC=m
# CONFIG_PARPORT_SERIAL is not set
# CONFIG_PARPORT_PC_FIFO is not set
# CONFIG_PARPORT_PC_SUPERIO is not set
# CONFIG_PARPORT_GSC is not set
# CONFIG_PARPORT_1284 is not set
# CONFIG_PARPORT is not set
#
# Plug and Play support
...
...
@@ -354,7 +409,6 @@ CONFIG_PARPORT_PC=m
# Block devices
#
CONFIG_BLK_DEV_FD=y
# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
...
...
@@ -370,14 +424,6 @@ CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=65536
CONFIG_BLK_DEV_INITRD=y
# CONFIG_CDROM_PKTCDVD is not set
#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
# CONFIG_ATA_OVER_ETH is not set
#
...
...
@@ -407,7 +453,7 @@ CONFIG_IDEPCI_SHARE_IRQ=y
# CONFIG_BLK_DEV_OFFBOARD is not set
CONFIG_BLK_DEV_GENERIC=y
# CONFIG_BLK_DEV_OPTI621 is not set
CONFIG_BLK_DEV_SL82C105
=y
#
CONFIG_BLK_DEV_SL82C105
is not set
CONFIG_BLK_DEV_IDEDMA_PCI=y
# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
CONFIG_IDEDMA_PCI_AUTO=y
...
...
@@ -479,6 +525,7 @@ CONFIG_SCSI_ISCSI_ATTRS=m
#
# SCSI low-level drivers
#
# CONFIG_ISCSI_TCP is not set
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_3W_9XXX is not set
# CONFIG_SCSI_ACARD is not set
...
...
@@ -495,10 +542,12 @@ CONFIG_SCSI_SATA_SVW=y
# CONFIG_SCSI_ATA_PIIX is not set
# CONFIG_SCSI_SATA_MV is not set
# CONFIG_SCSI_SATA_NV is not set
# CONFIG_SCSI_
SATA_PROMISE
is not set
# CONFIG_SCSI_
PDC_ADMA
is not set
# CONFIG_SCSI_SATA_QSTOR is not set
# CONFIG_SCSI_SATA_PROMISE is not set
# CONFIG_SCSI_SATA_SX4 is not set
# CONFIG_SCSI_SATA_SIL is not set
# CONFIG_SCSI_SATA_SIL24 is not set
# CONFIG_SCSI_SATA_SIS is not set
# CONFIG_SCSI_SATA_ULI is not set
# CONFIG_SCSI_SATA_VIA is not set
...
...
@@ -512,8 +561,6 @@ CONFIG_SCSI_SATA_SVW=y
CONFIG_SCSI_IBMVSCSI=y
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_PPA is not set
# CONFIG_SCSI_IMM is not set
CONFIG_SCSI_SYM53C8XX_2=y
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
...
...
@@ -608,6 +655,9 @@ CONFIG_IEEE1394_AMDTP=m
CONFIG_ADB_PMU=y
CONFIG_PMAC_SMU=y
CONFIG_THERM_PM72=y
CONFIG_WINDFARM=y
CONFIG_WINDFARM_PM81=y
CONFIG_WINDFARM_PM91=y
#
# Network device support
...
...
@@ -664,7 +714,6 @@ CONFIG_E100=y
# CONFIG_EPIC100 is not set
# CONFIG_SUNDANCE is not set
# CONFIG_VIA_RHINE is not set
# CONFIG_NET_POCKET is not set
#
# Ethernet (1000 Mbit)
...
...
@@ -684,7 +733,6 @@ CONFIG_E1000=y
# CONFIG_VIA_VELOCITY is not set
CONFIG_TIGON3=y
# CONFIG_BNX2 is not set
# CONFIG_SPIDER_NET is not set
# CONFIG_MV643XX_ETH is not set
#
...
...
@@ -714,7 +762,6 @@ CONFIG_IBMOL=y
# CONFIG_WAN is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
# CONFIG_PLIP is not set
CONFIG_PPP=m
# CONFIG_PPP_MULTILINK is not set
# CONFIG_PPP_FILTER is not set
...
...
@@ -722,6 +769,7 @@ CONFIG_PPP_ASYNC=m
CONFIG_PPP_SYNC_TTY=m
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
# CONFIG_PPP_MPPE is not set
CONFIG_PPPOE=m
# CONFIG_SLIP is not set
# CONFIG_NET_FC is not set
...
...
@@ -784,7 +832,6 @@ CONFIG_INPUT_PCSPKR=m
CONFIG_SERIO=y
CONFIG_SERIO_I8042=y
# CONFIG_SERIO_SERPORT is not set
# CONFIG_SERIO_PARKBD is not set
# CONFIG_SERIO_PCIPS2 is not set
CONFIG_SERIO_LIBPS2=y
# CONFIG_SERIO_RAW is not set
...
...
@@ -817,10 +864,6 @@ CONFIG_SERIAL_JSM=m
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
CONFIG_PRINTER=m
# CONFIG_LP_CONSOLE is not set
# CONFIG_PPDEV is not set
# CONFIG_TIPAR is not set
CONFIG_HVC_CONSOLE=y
CONFIG_HVCS=m
...
...
@@ -834,6 +877,7 @@ CONFIG_HVCS=m
#
# CONFIG_WATCHDOG is not set
# CONFIG_RTC is not set
# CONFIG_GEN_RTC is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
...
...
@@ -851,6 +895,7 @@ CONFIG_MAX_RAW_DEVS=256
# TPM devices
#
# CONFIG_TCG_TPM is not set
# CONFIG_TELCLOCK is not set
#
# I2C support
...
...
@@ -879,7 +924,6 @@ CONFIG_I2C_AMD8111=y
CONFIG_I2C_KEYWEST=y
CONFIG_I2C_PMAC_SMU=y
# CONFIG_I2C_NFORCE2 is not set
# CONFIG_I2C_PARPORT is not set
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_PROSAVAGE is not set
# CONFIG_I2C_SAVAGE4 is not set
...
...
@@ -904,6 +948,7 @@ CONFIG_I2C_PMAC_SMU=y
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_SENSORS_RTC8564 is not set
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_RTC_X1205_I2C is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
...
...
@@ -945,7 +990,6 @@ CONFIG_FB=y
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
CONFIG_FB_SOFT_CURSOR=y
CONFIG_FB_MACMODES=y
CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_TILEBLITTING=y
...
...
@@ -960,6 +1004,7 @@ CONFIG_FB_OF=y
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_VGA16 is not set
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_NVIDIA is not set
# CONFIG_FB_RIVA is not set
CONFIG_FB_MATROX=y
...
...
@@ -983,7 +1028,6 @@ CONFIG_FB_RADEON_I2C=y
# CONFIG_FB_VOODOO1 is not set
# CONFIG_FB_CYBLA is not set
# CONFIG_FB_TRIDENT is not set
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_VIRTUAL is not set
#
...
...
@@ -992,6 +1036,7 @@ CONFIG_FB_RADEON_I2C=y
# CONFIG_VGA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
# CONFIG_FONTS is not set
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
...
...
@@ -1012,7 +1057,94 @@ CONFIG_LCD_DEVICE=y
#
# Sound
#
# CONFIG_SOUND is not set
CONFIG_SOUND=m
#
# Advanced Linux Sound Architecture
#
CONFIG_SND=m
CONFIG_SND_TIMER=m
CONFIG_SND_PCM=m
CONFIG_SND_SEQUENCER=m
CONFIG_SND_SEQ_DUMMY=m
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=m
CONFIG_SND_PCM_OSS=m
CONFIG_SND_SEQUENCER_OSS=y
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set
CONFIG_SND_GENERIC_DRIVER=y
#
# Generic devices
#
# CONFIG_SND_DUMMY is not set
# CONFIG_SND_VIRMIDI is not set
# CONFIG_SND_MTPAV is not set
# CONFIG_SND_SERIAL_U16550 is not set
# CONFIG_SND_MPU401 is not set
#
# PCI devices
#
# CONFIG_SND_ALI5451 is not set
# CONFIG_SND_ATIIXP is not set
# CONFIG_SND_ATIIXP_MODEM is not set
# CONFIG_SND_AU8810 is not set
# CONFIG_SND_AU8820 is not set
# CONFIG_SND_AU8830 is not set
# CONFIG_SND_AZT3328 is not set
# CONFIG_SND_BT87X is not set
# CONFIG_SND_CS46XX is not set
# CONFIG_SND_CS4281 is not set
# CONFIG_SND_EMU10K1 is not set
# CONFIG_SND_EMU10K1X is not set
# CONFIG_SND_CA0106 is not set
# CONFIG_SND_KORG1212 is not set
# CONFIG_SND_MIXART is not set
# CONFIG_SND_NM256 is not set
# CONFIG_SND_RME32 is not set
# CONFIG_SND_RME96 is not set
# CONFIG_SND_RME9652 is not set
# CONFIG_SND_HDSP is not set
# CONFIG_SND_HDSPM is not set
# CONFIG_SND_TRIDENT is not set
# CONFIG_SND_YMFPCI is not set
# CONFIG_SND_AD1889 is not set
# CONFIG_SND_ALS4000 is not set
# CONFIG_SND_CMIPCI is not set
# CONFIG_SND_ENS1370 is not set
# CONFIG_SND_ENS1371 is not set
# CONFIG_SND_ES1938 is not set
# CONFIG_SND_ES1968 is not set
# CONFIG_SND_MAESTRO3 is not set
# CONFIG_SND_FM801 is not set
# CONFIG_SND_ICE1712 is not set
# CONFIG_SND_ICE1724 is not set
# CONFIG_SND_INTEL8X0 is not set
# CONFIG_SND_INTEL8X0M is not set
# CONFIG_SND_SONICVIBES is not set
# CONFIG_SND_VIA82XX is not set
# CONFIG_SND_VIA82XX_MODEM is not set
# CONFIG_SND_VX222 is not set
# CONFIG_SND_HDA_INTEL is not set
#
# ALSA PowerMac devices
#
CONFIG_SND_POWERMAC=m
CONFIG_SND_POWERMAC_AUTO_DRC=y
#
# USB devices
#
# CONFIG_SND_USB_AUDIO is not set
# CONFIG_SND_USB_USX2Y is not set
#
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set
#
# USB support
...
...
@@ -1046,12 +1178,16 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
#
# USB Device Class drivers
#
# CONFIG_
USB_BLUETOOTH_TTY
is not set
# CONFIG_
OBSOLETE_OSS_USB_DRIVER
is not set
# CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set
#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
#
#
# may also be needed; see USB_STORAGE Help for more information
#
CONFIG_USB_STORAGE=m
# CONFIG_USB_STORAGE_DEBUG is not set
...
...
@@ -1106,7 +1242,7 @@ CONFIG_USB_HIDDEV=y
#
# CONFIG_USB_CATC is not set
# CONFIG_USB_KAWETH is not set
CONFIG_USB_PEGASUS
=y
#
CONFIG_USB_PEGASUS
is not set
# CONFIG_USB_RTL8150 is not set
# CONFIG_USB_USBNET is not set
# CONFIG_USB_MON is not set
...
...
@@ -1114,7 +1250,6 @@ CONFIG_USB_PEGASUS=y
#
# USB port drivers
#
# CONFIG_USB_USS720 is not set
#
# USB Serial Converter support
...
...
@@ -1163,6 +1298,7 @@ CONFIG_INFINIBAND_MTHCA=m
# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
CONFIG_INFINIBAND_IPOIB=m
# CONFIG_INFINIBAND_IPOIB_DEBUG is not set
# CONFIG_INFINIBAND_SRP is not set
#
# SN Devices
...
...
@@ -1358,10 +1494,25 @@ CONFIG_NLS_KOI8_U=m
CONFIG_NLS_UTF8=m
#
# Profiling support
# Library routines
#
CONFIG_CRC_CCITT=m
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
CONFIG_LIBCRC32C=m
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=m
CONFIG_TEXTSEARCH=y
CONFIG_TEXTSEARCH_KMP=m
CONFIG_TEXTSEARCH_BM=m
CONFIG_TEXTSEARCH_FSM=m
#
# Instrumentation Support
#
CONFIG_PROFILING=y
CONFIG_OPROFILE=y
# CONFIG_KPROBES is not set
#
# Kernel hacking
...
...
@@ -1378,14 +1529,15 @@ CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_INFO is not set
CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_VM is not set
# CONFIG_RCU_TORTURE_TEST is not set
CONFIG_DEBUG_STACKOVERFLOW=y
# CONFIG_KPROBES is not set
CONFIG_DEBUG_STACK_USAGE=y
CONFIG_DEBUGGER=y
CONFIG_XMON=y
# CONFIG_XMON_DEFAULT is not set
# CONFIG_PPCDBG is not set
CONFIG_IRQSTACKS=y
CONFIG_BOOTX_TEXT=y
#
# Security options
...
...
@@ -1425,17 +1577,3 @@ CONFIG_CRYPTO_TEST=m
#
# Hardware crypto devices
#
#
# Library routines
#
CONFIG_CRC_CCITT=m
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
CONFIG_LIBCRC32C=m
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=m
CONFIG_TEXTSEARCH=y
CONFIG_TEXTSEARCH_KMP=m
CONFIG_TEXTSEARCH_BM=m
CONFIG_TEXTSEARCH_FSM=m
This diff is collapsed.
Click to expand it.
arch/powerpc/configs/pseries_defconfig
View file @
2161558f
...
...
@@ -165,7 +165,6 @@ CONFIG_SPARSEMEM_EXTREME=y
# CONFIG_MEMORY_HOTPLUG is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
CONFIG_NODES_SPAN_OTHER_NODES=y
# CONFIG_PPC_64K_PAGES is not set
CONFIG_SCHED_SMT=y
CONFIG_PROC_DEVICETREE=y
...
...
This diff is collapsed.
Click to expand it.
arch/powerpc/kernel/Makefile
View file @
2161558f
...
...
@@ -12,12 +12,12 @@ CFLAGS_btext.o += -fPIC
endif
obj-y
:=
semaphore.o cputable.o ptrace.o syscalls.o
\
irq.o signal_32.o pmc.o vdso.o
irq.o
align.o
signal_32.o pmc.o vdso.o
obj-y
+=
vdso32/
obj-$(CONFIG_PPC64)
+=
setup_64.o binfmt_elf32.o sys_ppc32.o
\
signal_64.o ptrace32.o systbl.o
\
paca.o ioctl32.o cpu_setup_power4.o
\
firmware.o sysfs.o udbg.o
firmware.o sysfs.o udbg.o
idle_64.o
obj-$(CONFIG_PPC64)
+=
vdso64/
obj-$(CONFIG_ALTIVEC)
+=
vecemu.o vector.o
obj-$(CONFIG_POWER4)
+=
idle_power4.o
...
...
@@ -35,6 +35,7 @@ obj-$(CONFIG_PPC_PSERIES) += udbg_16550.o
obj-$(CONFIG_PPC_MAPLE)
+=
udbg_16550.o
udbgscc-$(CONFIG_PPC64)
:=
udbg_scc.o
obj-$(CONFIG_PPC_PMAC)
+=
$
(
udbgscc-y
)
obj64-$(CONFIG_PPC_MULTIPLATFORM)
+=
nvram_64.o
ifeq
($(CONFIG_PPC_MERGE),y)
...
...
@@ -78,5 +79,7 @@ smpobj-$(CONFIG_SMP) += smp.o
endif
obj-$(CONFIG_PPC64)
+=
$
(
obj64-y
)
extra-$(CONFIG_PPC_FPU)
+=
fpu.o
extra-$(CONFIG_PPC64)
+=
entry_64.o
This diff is collapsed.
Click to expand it.
arch/ppc
64
/kernel/align.c
→
arch/p
ower
pc/kernel/align.c
View file @
2161558f
...
...
@@ -7,6 +7,9 @@
* PowerPC 403GCX/405GP modifications.
* Copyright (c) 2001-2002 PPC64 team, IBM Corp
* 64-bit and Power4 support
* Copyright (c) 2005 Benjamin Herrenschmidt, IBM Corp
* <benh@kernel.crashing.org>
* Merge ppc32 and ppc64 implementations
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
...
...
@@ -38,10 +41,15 @@ struct aligninfo {
#define F 8
/* to/from fp regs */
#define U 0x10
/* update index register */
#define M 0x20
/* multiple load/store */
#define SW 0x40
/* byte swap */
#define SW 0x40
/* byte swap int or ... */
#define S 0x40
/* ... single-precision fp */
#define SX 0x40
/* byte count in XER */
#define HARD 0x80
/* string, stwcx. */
#define DCBZ 0x5f
/* 8xx/82xx dcbz faults when cache not enabled */
#define SWAP(a, b) (t = (a), (a) = (b), (b) = t)
/*
* The PowerPC stores certain bits of the instruction that caused the
* alignment exception in the DSISR register. This array maps those
...
...
@@ -57,14 +65,14 @@ static struct aligninfo aligninfo[128] = {
{
2
,
LD
+
SE
},
/* 00 0 0101: lha */
{
2
,
ST
},
/* 00 0 0110: sth */
{
4
,
LD
+
M
},
/* 00 0 0111: lmw */
{
4
,
LD
+
F
},
/* 00 0 1000: lfs */
{
4
,
LD
+
F
+
S
},
/* 00 0 1000: lfs */
{
8
,
LD
+
F
},
/* 00 0 1001: lfd */
{
4
,
ST
+
F
},
/* 00 0 1010: stfs */
{
4
,
ST
+
F
+
S
},
/* 00 0 1010: stfs */
{
8
,
ST
+
F
},
/* 00 0 1011: stfd */
INVALID
,
/* 00 0 1100 */
{
8
,
LD
},
/* 00 0 1101: ld */
{
8
,
LD
},
/* 00 0 1101: ld
/ldu/lwa
*/
INVALID
,
/* 00 0 1110 */
{
8
,
ST
},
/* 00 0 1111: std */
{
8
,
ST
},
/* 00 0 1111: std
/stdu
*/
{
4
,
LD
+
U
},
/* 00 1 0000: lwzu */
INVALID
,
/* 00 1 0001 */
{
4
,
ST
+
U
},
/* 00 1 0010: stwu */
...
...
@@ -73,9 +81,9 @@ static struct aligninfo aligninfo[128] = {
{
2
,
LD
+
SE
+
U
},
/* 00 1 0101: lhau */
{
2
,
ST
+
U
},
/* 00 1 0110: sthu */
{
4
,
ST
+
M
},
/* 00 1 0111: stmw */
{
4
,
LD
+
F
+
U
},
/* 00 1 1000: lfsu */
{
4
,
LD
+
F
+
S
+
U
},
/* 00 1 1000: lfsu */
{
8
,
LD
+
F
+
U
},
/* 00 1 1001: lfdu */
{
4
,
ST
+
F
+
U
},
/* 00 1 1010: stfsu */
{
4
,
ST
+
F
+
S
+
U
},
/* 00 1 1010: stfsu */
{
8
,
ST
+
F
+
U
},
/* 00 1 1011: stfdu */
INVALID
,
/* 00 1 1100 */
INVALID
,
/* 00 1 1101 */
...
...
@@ -89,10 +97,10 @@ static struct aligninfo aligninfo[128] = {
{
4
,
LD
+
SE
},
/* 01 0 0101: lwax */
INVALID
,
/* 01 0 0110 */
INVALID
,
/* 01 0 0111 */
{
0
,
LD
},
/* 01 0 1000: lswx */
{
0
,
LD
},
/* 01 0 1001: lswi */
{
0
,
ST
},
/* 01 0 1010: stswx */
{
0
,
ST
},
/* 01 0 1011: stswi */
{
4
,
LD
+
M
+
HARD
+
SX
},
/* 01 0 1000: lswx */
{
4
,
LD
+
M
+
HARD
},
/* 01 0 1001: lswi */
{
4
,
ST
+
M
+
HARD
+
SX
},
/* 01 0 1010: stswx */
{
4
,
ST
+
M
+
HARD
},
/* 01 0 1011: stswi */
INVALID
,
/* 01 0 1100 */
{
8
,
LD
+
U
},
/* 01 0 1101: ldu */
INVALID
,
/* 01 0 1110 */
...
...
@@ -115,7 +123,7 @@ static struct aligninfo aligninfo[128] = {
INVALID
,
/* 01 1 1111 */
INVALID
,
/* 10 0 0000 */
INVALID
,
/* 10 0 0001 */
{
0
,
ST
}
,
/* 10 0 0010: stwcx. */
INVALID
,
/* 10 0 0010: stwcx. */
INVALID
,
/* 10 0 0011 */
INVALID
,
/* 10 0 0100 */
INVALID
,
/* 10 0 0101 */
...
...
@@ -144,7 +152,7 @@ static struct aligninfo aligninfo[128] = {
INVALID
,
/* 10 1 1100 */
INVALID
,
/* 10 1 1101 */
INVALID
,
/* 10 1 1110 */
{
L1_CACHE_BYTES
,
ST
},
/* 10 1 1111: dcbz */
{
0
,
ST
+
HARD
},
/* 10 1 1111: dcbz */
{
4
,
LD
},
/* 11 0 0000: lwzx */
INVALID
,
/* 11 0 0001 */
{
4
,
ST
},
/* 11 0 0010: stwx */
...
...
@@ -153,9 +161,9 @@ static struct aligninfo aligninfo[128] = {
{
2
,
LD
+
SE
},
/* 11 0 0101: lhax */
{
2
,
ST
},
/* 11 0 0110: sthx */
INVALID
,
/* 11 0 0111 */
{
4
,
LD
+
F
},
/* 11 0 1000: lfsx */
{
4
,
LD
+
F
+
S
},
/* 11 0 1000: lfsx */
{
8
,
LD
+
F
},
/* 11 0 1001: lfdx */
{
4
,
ST
+
F
},
/* 11 0 1010: stfsx */
{
4
,
ST
+
F
+
S
},
/* 11 0 1010: stfsx */
{
8
,
ST
+
F
},
/* 11 0 1011: stfdx */
INVALID
,
/* 11 0 1100 */
{
8
,
LD
+
M
},
/* 11 0 1101: lmd */
...
...
@@ -169,9 +177,9 @@ static struct aligninfo aligninfo[128] = {
{
2
,
LD
+
SE
+
U
},
/* 11 1 0101: lhaux */
{
2
,
ST
+
U
},
/* 11 1 0110: sthux */
INVALID
,
/* 11 1 0111 */
{
4
,
LD
+
F
+
U
},
/* 11 1 1000: lfsux */
{
4
,
LD
+
F
+
S
+
U
},
/* 11 1 1000: lfsux */
{
8
,
LD
+
F
+
U
},
/* 11 1 1001: lfdux */
{
4
,
ST
+
F
+
U
},
/* 11 1 1010: stfsux */
{
4
,
ST
+
F
+
S
+
U
},
/* 11 1 1010: stfsux */
{
8
,
ST
+
F
+
U
},
/* 11 1 1011: stfdux */
INVALID
,
/* 11 1 1100 */
INVALID
,
/* 11 1 1101 */
...
...
@@ -179,45 +187,175 @@ static struct aligninfo aligninfo[128] = {
INVALID
,
/* 11 1 1111 */
};
#define SWAP(a, b) (t = (a), (a) = (b), (b) = t)
/*
* Create a DSISR value from the instruction
*/
static
inline
unsigned
make_dsisr
(
unsigned
instr
)
{
unsigned
dsisr
;
/* create a DSISR value from the instruction */
dsisr
=
(
instr
&
0x03ff0000
)
>>
16
;
/* bits 6:15 --> 22:31 */
if
(
IS_XFORM
(
instr
)
)
{
dsisr
|=
(
instr
&
0x00000006
)
<<
14
;
/* bits 29:30 --> 15:16 */
dsisr
|=
(
instr
&
0x00000040
)
<<
8
;
/* bit 25 --> 17 */
dsisr
|=
(
instr
&
0x00000780
)
<<
3
;
/* bits 21:24 --> 18:21 */
/* bits 6:15 --> 22:31 */
dsisr
=
(
instr
&
0x03ff0000
)
>>
16
;
if
(
IS_XFORM
(
instr
))
{
/* bits 29:30 --> 15:16 */
dsisr
|=
(
instr
&
0x00000006
)
<<
14
;
/* bit 25 --> 17 */
dsisr
|=
(
instr
&
0x00000040
)
<<
8
;
/* bits 21:24 --> 18:21 */
dsisr
|=
(
instr
&
0x00000780
)
<<
3
;
}
else
{
/* bit 5 --> 17 */
dsisr
|=
(
instr
&
0x04000000
)
>>
12
;
/* bits 1: 4 --> 18:21 */
dsisr
|=
(
instr
&
0x78000000
)
>>
17
;
/* bits 30:31 --> 12:13 */
if
(
IS_DSFORM
(
instr
))
dsisr
|=
(
instr
&
0x00000003
)
<<
18
;
}
else
{
dsisr
|=
(
instr
&
0x04000000
)
>>
12
;
/* bit 5 --> 17 */
dsisr
|=
(
instr
&
0x78000000
)
>>
17
;
/* bits 1: 4 --> 18:21 */
if
(
IS_DSFORM
(
instr
)
)
{
dsisr
|=
(
instr
&
0x00000003
)
<<
18
;
/* bits 30:31 --> 12:13 */
return
dsisr
;
}
/*
* The dcbz (data cache block zero) instruction
* gives an alignment fault if used on non-cacheable
* memory. We handle the fault mainly for the
* case when we are running with the cache disabled
* for debugging.
*/
static
int
emulate_dcbz
(
struct
pt_regs
*
regs
,
unsigned
char
__user
*
addr
)
{
long
__user
*
p
;
int
i
,
size
;
#ifdef __powerpc64__
size
=
ppc64_caches
.
dline_size
;
#else
size
=
L1_CACHE_BYTES
;
#endif
p
=
(
long
__user
*
)
(
regs
->
dar
&
-
size
);
if
(
user_mode
(
regs
)
&&
!
access_ok
(
VERIFY_WRITE
,
p
,
size
))
return
-
EFAULT
;
for
(
i
=
0
;
i
<
size
/
sizeof
(
long
);
++
i
)
if
(
__put_user
(
0
,
p
+
i
))
return
-
EFAULT
;
return
1
;
}
/*
* Emulate load & store multiple instructions
* On 64-bit machines, these instructions only affect/use the
* bottom 4 bytes of each register, and the loads clear the
* top 4 bytes of the affected register.
*/
#ifdef CONFIG_PPC64
#define REG_BYTE(rp, i) *((u8 *)((rp) + ((i) >> 2)) + ((i) & 3) + 4)
#else
#define REG_BYTE(rp, i) *((u8 *)(rp) + (i))
#endif
static
int
emulate_multiple
(
struct
pt_regs
*
regs
,
unsigned
char
__user
*
addr
,
unsigned
int
reg
,
unsigned
int
nb
,
unsigned
int
flags
,
unsigned
int
instr
)
{
unsigned
long
*
rptr
;
unsigned
int
nb0
,
i
;
/*
* We do not try to emulate 8 bytes multiple as they aren't really
* available in our operating environments and we don't try to
* emulate multiples operations in kernel land as they should never
* be used/generated there at least not on unaligned boundaries
*/
if
(
unlikely
((
nb
>
4
)
||
!
user_mode
(
regs
)))
return
0
;
/* lmw, stmw, lswi/x, stswi/x */
nb0
=
0
;
if
(
flags
&
HARD
)
{
if
(
flags
&
SX
)
{
nb
=
regs
->
xer
&
127
;
if
(
nb
==
0
)
return
1
;
}
else
{
if
(
__get_user
(
instr
,
(
unsigned
int
__user
*
)
regs
->
nip
))
return
-
EFAULT
;
nb
=
(
instr
>>
11
)
&
0x1f
;
if
(
nb
==
0
)
nb
=
32
;
}
if
(
nb
+
reg
*
4
>
128
)
{
nb0
=
nb
+
reg
*
4
-
128
;
nb
=
128
-
reg
*
4
;
}
}
else
{
/* lwm, stmw */
nb
=
(
32
-
reg
)
*
4
;
}
return
dsisr
;
if
(
!
access_ok
((
flags
&
ST
?
VERIFY_WRITE
:
VERIFY_READ
),
addr
,
nb
+
nb0
))
return
-
EFAULT
;
/* bad address */
rptr
=
&
regs
->
gpr
[
reg
];
if
(
flags
&
LD
)
{
/*
* This zeroes the top 4 bytes of the affected registers
* in 64-bit mode, and also zeroes out any remaining
* bytes of the last register for lsw*.
*/
memset
(
rptr
,
0
,
((
nb
+
3
)
/
4
)
*
sizeof
(
unsigned
long
));
if
(
nb0
>
0
)
memset
(
&
regs
->
gpr
[
0
],
0
,
((
nb0
+
3
)
/
4
)
*
sizeof
(
unsigned
long
));
for
(
i
=
0
;
i
<
nb
;
++
i
)
if
(
__get_user
(
REG_BYTE
(
rptr
,
i
),
addr
+
i
))
return
-
EFAULT
;
if
(
nb0
>
0
)
{
rptr
=
&
regs
->
gpr
[
0
];
addr
+=
nb
;
for
(
i
=
0
;
i
<
nb0
;
++
i
)
if
(
__get_user
(
REG_BYTE
(
rptr
,
i
),
addr
+
i
))
return
-
EFAULT
;
}
}
else
{
for
(
i
=
0
;
i
<
nb
;
++
i
)
if
(
__put_user
(
REG_BYTE
(
rptr
,
i
),
addr
+
i
))
return
-
EFAULT
;
if
(
nb0
>
0
)
{
rptr
=
&
regs
->
gpr
[
0
];
addr
+=
nb
;
for
(
i
=
0
;
i
<
nb0
;
++
i
)
if
(
__put_user
(
REG_BYTE
(
rptr
,
i
),
addr
+
i
))
return
-
EFAULT
;
}
}
return
1
;
}
int
fix_alignment
(
struct
pt_regs
*
regs
)
/*
* Called on alignment exception. Attempts to fixup
*
* Return 1 on success
* Return 0 if unable to handle the interrupt
* Return -EFAULT if data address is bad
*/
int
fix_alignment
(
struct
pt_regs
*
regs
)
{
unsigned
int
instr
,
nb
,
flags
;
int
t
;
unsigned
long
reg
,
areg
;
unsigned
long
i
;
int
ret
;
unsigned
dsisr
;
unsigned
int
reg
,
areg
;
unsigned
int
dsisr
;
unsigned
char
__user
*
addr
;
unsigned
char
__user
*
p
;
unsigned
long
__user
*
lp
;
int
ret
,
t
;
union
{
long
ll
;
u64
ll
;
double
dd
;
unsigned
char
v
[
8
];
struct
{
...
...
@@ -231,18 +369,22 @@ fix_alignment(struct pt_regs *regs)
}
data
;
/*
* Return 1 on success
* Return 0 if unable to handle the interrupt
* Return -EFAULT if data address is bad
* We require a complete register set, if not, then our assembly
* is broken
*/
CHECK_FULL_REGS
(
regs
);
dsisr
=
regs
->
dsisr
;
/* Some processors don't provide us with a DSISR we can use here,
* let's make one up from the instruction
*/
if
(
cpu_has_feature
(
CPU_FTR_NODSISRALIGN
))
{
unsigned
int
real_instr
;
if
(
__get_user
(
real_instr
,
(
unsigned
int
__user
*
)
regs
->
nip
))
return
0
;
dsisr
=
make_dsisr
(
real_instr
);
unsigned
int
real_instr
;
if
(
unlikely
(
__get_user
(
real_instr
,
(
unsigned
int
__user
*
)
regs
->
nip
)))
return
-
EFAULT
;
dsisr
=
make_dsisr
(
real_instr
);
}
/* extract the operation and registers from the dsisr */
...
...
@@ -258,33 +400,37 @@ fix_alignment(struct pt_regs *regs)
/* DAR has the operand effective address */
addr
=
(
unsigned
char
__user
*
)
regs
->
dar
;
/* A size of 0 indicates an instruction we don't support */
/* we also don't support the multiples (lmw, stmw, lmd, stmd) */
if
((
nb
==
0
)
||
(
flags
&
M
))
return
0
;
/* too hard or invalid instruction */
/*
* Special handling for dcbz
* dcbz may give an alignment exception for accesses to caching inhibited
* storage
/* A size of 0 indicates an instruction we don't support, with
* the exception of DCBZ which is handled as a special case here
*/
if
(
instr
==
DCBZ
)
addr
=
(
unsigned
char
__user
*
)
((
unsigned
long
)
addr
&
-
L1_CACHE_BYTES
);
return
emulate_dcbz
(
regs
,
addr
);
if
(
unlikely
(
nb
==
0
))
return
0
;
/* Load/Store Multiple instructions are handled in their own
* function
*/
if
(
flags
&
M
)
return
emulate_multiple
(
regs
,
addr
,
reg
,
nb
,
flags
,
instr
);
/* Verify the address of the operand */
if
(
user_mode
(
regs
)
)
{
if
(
!
access_ok
((
flags
&
ST
?
VERIFY_WRITE
:
VERIFY_READ
),
addr
,
nb
))
return
-
EFAULT
;
/* bad address */
}
if
(
unlikely
(
user_mode
(
regs
)
&&
!
access_ok
((
flags
&
ST
?
VERIFY_WRITE
:
VERIFY_READ
),
addr
,
nb
)))
return
-
EFAULT
;
/* Force the fprs into the save area so we can reference them */
if
(
flags
&
F
)
{
if
(
!
user_mode
(
regs
))
/* userland only */
if
(
unlikely
(
!
user_mode
(
regs
)))
return
0
;
flush_fp_to_thread
(
current
);
}
/* If we are loading, get the data from user space */
/* If we are loading, get the data from user space, else
* get it from register values
*/
if
(
flags
&
LD
)
{
data
.
ll
=
0
;
ret
=
0
;
...
...
@@ -301,75 +447,62 @@ fix_alignment(struct pt_regs *regs)
case
2
:
ret
|=
__get_user
(
data
.
v
[
6
],
p
++
);
ret
|=
__get_user
(
data
.
v
[
7
],
p
++
);
if
(
ret
)
if
(
unlikely
(
ret
)
)
return
-
EFAULT
;
}
}
/* If we are storing, get the data from the saved gpr or fpr */
if
(
flags
&
ST
)
{
if
(
flags
&
F
)
{
if
(
nb
==
4
)
{
/* Doing stfs, have to convert to single */
preempt_disable
();
enable_kernel_fp
();
cvt_df
(
&
current
->
thread
.
fpr
[
reg
],
(
float
*
)
&
data
.
v
[
4
],
&
current
->
thread
);
disable_kernel_fp
();
preempt_enable
();
}
else
data
.
dd
=
current
->
thread
.
fpr
[
reg
];
}
else
data
.
ll
=
regs
->
gpr
[
reg
];
}
/* Swap bytes as needed */
if
(
flags
&
SW
)
{
if
(
nb
==
2
)
SWAP
(
data
.
v
[
6
],
data
.
v
[
7
]);
else
{
/* nb must be 4 */
SWAP
(
data
.
v
[
4
],
data
.
v
[
7
]);
SWAP
(
data
.
v
[
5
],
data
.
v
[
6
]);
}
}
/* Sign extend as needed */
if
(
flags
&
SE
)
{
}
else
if
(
flags
&
F
)
data
.
dd
=
current
->
thread
.
fpr
[
reg
];
else
data
.
ll
=
regs
->
gpr
[
reg
];
/* Perform other misc operations like sign extension, byteswap,
* or floating point single precision conversion
*/
switch
(
flags
&
~
U
)
{
case
LD
+
SE
:
/* sign extend */
if
(
nb
==
2
)
data
.
ll
=
data
.
x16
.
low16
;
else
/* nb must be 4 */
data
.
ll
=
data
.
x32
.
low32
;
}
/* If we are loading, move the data to the gpr or fpr */
if
(
flags
&
LD
)
{
if
(
flags
&
F
)
{
if
(
nb
==
4
)
{
/* Doing lfs, have to convert to double */
preempt_disable
();
enable_kernel_fp
();
cvt_fd
((
float
*
)
&
data
.
v
[
4
],
&
current
->
thread
.
fpr
[
reg
],
&
current
->
thread
);
disable_kernel_fp
();
preempt_enable
();
}
else
current
->
thread
.
fpr
[
reg
]
=
data
.
dd
;
break
;
case
LD
+
S
:
/* byte-swap */
case
ST
+
S
:
if
(
nb
==
2
)
{
SWAP
(
data
.
v
[
6
],
data
.
v
[
7
]);
}
else
{
SWAP
(
data
.
v
[
4
],
data
.
v
[
7
]);
SWAP
(
data
.
v
[
5
],
data
.
v
[
6
]);
}
else
regs
->
gpr
[
reg
]
=
data
.
ll
;
break
;
/* Single-precision FP load and store require conversions... */
case
LD
+
F
+
S
:
#ifdef CONFIG_PPC_FPU
preempt_disable
();
enable_kernel_fp
();
cvt_fd
((
float
*
)
&
data
.
v
[
4
],
&
data
.
dd
,
&
current
->
thread
);
preempt_enable
();
#else
return
0
;
#endif
break
;
case
ST
+
F
+
S
:
#ifdef CONFIG_PPC_FPU
preempt_disable
();
enable_kernel_fp
();
cvt_df
(
&
data
.
dd
,
(
float
*
)
&
data
.
v
[
4
],
&
current
->
thread
);
preempt_enable
();
#else
return
0
;
#endif
break
;
}
/*
If w
e
a
re
storing, copy the data to the us
er */
/*
Stor
e re
sult to memory or update regist
er
s
*/
if
(
flags
&
ST
)
{
ret
=
0
;
p
=
addr
;
switch
(
nb
)
{
case
128
:
/* Special case - must be dcbz */
lp
=
(
unsigned
long
__user
*
)
p
;
for
(
i
=
0
;
i
<
L1_CACHE_BYTES
/
sizeof
(
long
);
++
i
)
ret
|=
__put_user
(
0
,
lp
++
);
break
;
case
8
:
ret
|=
__put_user
(
data
.
v
[
0
],
p
++
);
ret
|=
__put_user
(
data
.
v
[
1
],
p
++
);
...
...
@@ -382,15 +515,16 @@ fix_alignment(struct pt_regs *regs)
ret
|=
__put_user
(
data
.
v
[
6
],
p
++
);
ret
|=
__put_user
(
data
.
v
[
7
],
p
++
);
}
if
(
ret
)
if
(
unlikely
(
ret
)
)
return
-
EFAULT
;
}
}
else
if
(
flags
&
F
)
current
->
thread
.
fpr
[
reg
]
=
data
.
dd
;
else
regs
->
gpr
[
reg
]
=
data
.
ll
;
/* Update RA as needed */
if
(
flags
&
U
)
{
if
(
flags
&
U
)
regs
->
gpr
[
areg
]
=
regs
->
dar
;
}
return
1
;
}
This diff is collapsed.
Click to expand it.
arch/ppc
64
/kernel/idle.c
→
arch/p
ower
pc/kernel/idle
_64
.c
View file @
2161558f
File moved
This diff is collapsed.
Click to expand it.
arch/powerpc/kernel/misc_32.S
View file @
2161558f
...
...
@@ -27,14 +27,6 @@
.
text
.
align
5
_GLOBAL
(
__delay
)
cmpwi
0
,
r3
,
0
mtctr
r3
beqlr
1
:
bdnz
1
b
blr
/*
*
This
returns
the
high
64
bits
of
the
product
of
two
64
-
bit
numbers
.
*/
...
...
This diff is collapsed.
Click to expand it.
arch/ppc
64
/kernel/nvram.c
→
arch/p
ower
pc/kernel/nvram
_64
.c
View file @
2161558f
File moved
This diff is collapsed.
Click to expand it.
arch/powerpc/kernel/rtas-rtc.c
View file @
2161558f
...
...
@@ -15,7 +15,7 @@ unsigned long __init rtas_get_boot_time(void)
{
int
ret
[
8
];
int
error
,
wait_time
;
u
nsigned
long
max_wait_tb
;
u
64
max_wait_tb
;
max_wait_tb
=
get_tb
()
+
tb_ticks_per_usec
*
1000
*
MAX_RTC_WAIT
;
do
{
...
...
@@ -45,7 +45,7 @@ void rtas_get_rtc_time(struct rtc_time *rtc_tm)
{
int
ret
[
8
];
int
error
,
wait_time
;
u
nsigned
long
max_wait_tb
;
u
64
max_wait_tb
;
max_wait_tb
=
get_tb
()
+
tb_ticks_per_usec
*
1000
*
MAX_RTC_WAIT
;
do
{
...
...
@@ -80,7 +80,7 @@ void rtas_get_rtc_time(struct rtc_time *rtc_tm)
int
rtas_set_rtc_time
(
struct
rtc_time
*
tm
)
{
int
error
,
wait_time
;
u
nsigned
long
max_wait_tb
;
u
64
max_wait_tb
;
max_wait_tb
=
get_tb
()
+
tb_ticks_per_usec
*
1000
*
MAX_RTC_WAIT
;
do
{
...
...
This diff is collapsed.
Click to expand it.
arch/powerpc/kernel/time.c
View file @
2161558f
...
...
@@ -130,6 +130,34 @@ unsigned long tb_last_stamp;
*/
DEFINE_PER_CPU
(
unsigned
long
,
last_jiffy
);
void
__delay
(
unsigned
long
loops
)
{
unsigned
long
start
;
int
diff
;
if
(
__USE_RTC
())
{
start
=
get_rtcl
();
do
{
/* the RTCL register wraps at 1000000000 */
diff
=
get_rtcl
()
-
start
;
if
(
diff
<
0
)
diff
+=
1000000000
;
}
while
(
diff
<
loops
);
}
else
{
start
=
get_tbl
();
while
(
get_tbl
()
-
start
<
loops
)
HMT_low
();
HMT_medium
();
}
}
EXPORT_SYMBOL
(
__delay
);
void
udelay
(
unsigned
long
usecs
)
{
__delay
(
tb_ticks_per_usec
*
usecs
);
}
EXPORT_SYMBOL
(
udelay
);
static
__inline__
void
timer_check_rtc
(
void
)
{
/*
...
...
This diff is collapsed.
Click to expand it.
arch/powerpc/platforms/chrp/setup.c
View file @
2161558f
...
...
@@ -257,6 +257,13 @@ void __init chrp_setup_arch(void)
if
(
rtas_token
(
"display-character"
)
>=
0
)
ppc_md
.
progress
=
rtas_progress
;
/* use RTAS time-of-day routines if available */
if
(
rtas_token
(
"get-time-of-day"
)
!=
RTAS_UNKNOWN_SERVICE
)
{
ppc_md
.
get_boot_time
=
rtas_get_boot_time
;
ppc_md
.
get_rtc_time
=
rtas_get_rtc_time
;
ppc_md
.
set_rtc_time
=
rtas_set_rtc_time
;
}
#ifdef CONFIG_BOOTX_TEXT
if
(
ppc_md
.
progress
==
NULL
&&
boot_text_mapped
)
ppc_md
.
progress
=
btext_progress
;
...
...
@@ -505,9 +512,11 @@ void __init chrp_init(void)
ppc_md
.
halt
=
rtas_halt
;
ppc_md
.
time_init
=
chrp_time_init
;
ppc_md
.
calibrate_decr
=
chrp_calibrate_decr
;
/* this may get overridden with rtas routines later... */
ppc_md
.
set_rtc_time
=
chrp_set_rtc_time
;
ppc_md
.
get_rtc_time
=
chrp_get_rtc_time
;
ppc_md
.
calibrate_decr
=
chrp_calibrate_decr
;
#ifdef CONFIG_SMP
smp_ops
=
&
chrp_smp_ops
;
...
...
This diff is collapsed.
Click to expand it.
arch/powerpc/platforms/chrp/smp.c
View file @
2161558f
...
...
@@ -34,6 +34,7 @@
#include <asm/machdep.h>
#include <asm/smp.h>
#include <asm/mpic.h>
#include <asm/rtas.h>
static
void
__devinit
smp_chrp_kick_cpu
(
int
nr
)
{
...
...
This diff is collapsed.
Click to expand it.
arch/powerpc/platforms/chrp/time.c
View file @
2161558f
...
...
@@ -87,7 +87,6 @@ int chrp_set_rtc_time(struct rtc_time *tmarg)
chrp_cmos_clock_write
((
save_freq_select
|
RTC_DIV_RESET2
),
RTC_FREQ_SELECT
);
tm
.
tm_year
-=
1900
;
if
(
!
(
save_control
&
RTC_DM_BINARY
)
||
RTC_ALWAYS_BCD
)
{
BIN_TO_BCD
(
tm
.
tm_sec
);
BIN_TO_BCD
(
tm
.
tm_min
);
...
...
@@ -156,7 +155,7 @@ void chrp_get_rtc_time(struct rtc_time *tm)
BCD_TO_BIN
(
mon
);
BCD_TO_BIN
(
year
);
}
if
(
(
year
+=
1900
)
<
19
70
)
if
(
year
<
70
)
year
+=
100
;
tm
->
tm_sec
=
sec
;
tm
->
tm_min
=
min
;
...
...
This diff is collapsed.
Click to expand it.
arch/powerpc/platforms/maple/time.c
View file @
2161558f
...
...
@@ -158,6 +158,11 @@ int maple_set_rtc_time(struct rtc_time *tm)
return
0
;
}
static
struct
resource
rtc_iores
=
{
.
name
=
"rtc"
,
.
flags
=
IORESOURCE_BUSY
,
};
unsigned
long
__init
maple_get_boot_time
(
void
)
{
struct
rtc_time
tm
;
...
...
@@ -172,7 +177,11 @@ unsigned long __init maple_get_boot_time(void)
printk
(
KERN_INFO
"Maple: No device node for RTC, assuming "
"legacy address (0x%x)
\n
"
,
maple_rtc_addr
);
}
rtc_iores
.
start
=
maple_rtc_addr
;
rtc_iores
.
end
=
maple_rtc_addr
+
7
;
request_resource
(
&
ioport_resource
,
&
rtc_iores
);
maple_get_rtc_time
(
&
tm
);
return
mktime
(
tm
.
tm_year
+
1900
,
tm
.
tm_mon
+
1
,
tm
.
tm_mday
,
tm
.
tm_hour
,
tm
.
tm_min
,
tm
.
tm_sec
);
...
...
This diff is collapsed.
Click to expand it.
Prev
1
2
3
4
5
Next
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