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
7b71051f
Commit
7b71051f
authored
Oct 13, 2003
by
Paul Mackerras
Browse files
Options
Browse Files
Download
Plain Diff
Merge samba.org:/stuff/paulus/kernel/linux-2.5
into samba.org:/stuff/paulus/kernel/for-linus-ppc
parents
7c6c04c2
1e050781
Changes
14
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
203 additions
and
62 deletions
+203
-62
arch/ppc/boot/of1275/map.c
arch/ppc/boot/of1275/map.c
+4
-5
arch/ppc/boot/openfirmware/coffmain.c
arch/ppc/boot/openfirmware/coffmain.c
+2
-2
arch/ppc/kernel/head.S
arch/ppc/kernel/head.S
+29
-19
arch/ppc/kernel/ppc_ksyms.c
arch/ppc/kernel/ppc_ksyms.c
+7
-1
arch/ppc/kernel/process.c
arch/ppc/kernel/process.c
+1
-0
arch/ppc/mm/hashtable.S
arch/ppc/mm/hashtable.S
+15
-0
arch/ppc/mm/ppc_mmu.c
arch/ppc/mm/ppc_mmu.c
+18
-6
arch/ppc/platforms/pmac_smp.c
arch/ppc/platforms/pmac_smp.c
+92
-10
arch/ppc/platforms/pmac_time.c
arch/ppc/platforms/pmac_time.c
+5
-3
arch/ppc/syslib/of_device.c
arch/ppc/syslib/of_device.c
+6
-6
drivers/macintosh/adbhid.c
drivers/macintosh/adbhid.c
+2
-2
drivers/video/imsttfb.c
drivers/video/imsttfb.c
+14
-0
include/asm-ppc/reg.h
include/asm-ppc/reg.h
+8
-0
include/asm-ppc/reg_booke.h
include/asm-ppc/reg_booke.h
+0
-8
No files found.
arch/ppc/boot/of1275/map.c
View file @
7b71051f
...
@@ -23,11 +23,10 @@ map(unsigned int phys, unsigned int virt, unsigned int size)
...
@@ -23,11 +23,10 @@ map(unsigned int phys, unsigned int virt, unsigned int size)
char
*
method
;
char
*
method
;
ihandle
mmu_ihandle
;
ihandle
mmu_ihandle
;
int
misc
;
int
misc
;
unsigned
int
phys
;
unsigned
int
virt
;
unsigned
int
size
;
unsigned
int
size
;
unsigned
int
virt
;
unsigned
int
phys
;
int
ret0
;
int
ret0
;
int
ret1
;
}
args
;
}
args
;
if
(
of_prom_mmu
==
0
)
{
if
(
of_prom_mmu
==
0
)
{
...
@@ -36,10 +35,10 @@ map(unsigned int phys, unsigned int virt, unsigned int size)
...
@@ -36,10 +35,10 @@ map(unsigned int phys, unsigned int virt, unsigned int size)
}
}
args
.
service
=
"call-method"
;
args
.
service
=
"call-method"
;
args
.
nargs
=
6
;
args
.
nargs
=
6
;
args
.
nret
=
2
;
args
.
nret
=
1
;
args
.
method
=
"map"
;
args
.
method
=
"map"
;
args
.
mmu_ihandle
=
of_prom_mmu
;
args
.
mmu_ihandle
=
of_prom_mmu
;
args
.
misc
=
-
1
;
args
.
misc
=
0
;
args
.
phys
=
phys
;
args
.
phys
=
phys
;
args
.
virt
=
virt
;
args
.
virt
=
virt
;
args
.
size
=
size
;
args
.
size
=
size
;
...
...
arch/ppc/boot/openfirmware/coffmain.c
View file @
7b71051f
...
@@ -38,9 +38,9 @@ static char heap[SCRATCH_SIZE];
...
@@ -38,9 +38,9 @@ static char heap[SCRATCH_SIZE];
static
unsigned
long
ram_start
=
0
;
static
unsigned
long
ram_start
=
0
;
static
unsigned
long
ram_end
=
0x1000000
;
static
unsigned
long
ram_end
=
0x1000000
;
static
unsigned
long
prog_start
=
0x800000
;
static
unsigned
long
prog_size
=
0x800000
;
static
unsigned
long
prog_start
=
0x900000
;
static
unsigned
long
prog_size
=
0x700000
;
typedef
void
(
*
kernel_start_t
)(
int
,
int
,
void
*
);
typedef
void
(
*
kernel_start_t
)(
int
,
int
,
void
*
);
...
...
arch/ppc/kernel/head.S
View file @
7b71051f
...
@@ -181,26 +181,8 @@ __after_mmu_off:
...
@@ -181,26 +181,8 @@ __after_mmu_off:
bl
setup_disp_bat
bl
setup_disp_bat
#endif
#endif
#else /* CONFIG_POWER4 */
#else /* CONFIG_POWER4 */
/*
*
Load
up
the
SDR1
and
segment
register
values
now
*
since
we
don
't have the BATs.
*
Also
make
sure
we
are
running
in
32
-
bit
mode
.
*/
bl
reloc_offset
bl
reloc_offset
addis
r14
,
r3
,
_SDR1
@
ha
/*
get
the
value
from
_SDR1
*/
bl
initial_mm_power4
lwz
r14
,
_SDR1
@
l
(
r14
)
/*
assume
hash
table
below
4
GB
*/
mtspr
SDR1
,
r14
slbia
lis
r4
,
0x2000
/*
set
pseudo
-
segment
reg
12
*/
ori
r5
,
r4
,
0x0ccc
mtsr
12
,
r5
ori
r4
,
r4
,
0x0888
/*
set
pseudo
-
segment
reg
8
*/
mtsr
8
,
r4
/*
(
for
access
to
serial
port
)
*/
mfmsr
r0
clrldi
r0
,
r0
,
1
sync
mtmsr
r0
isync
#endif /* CONFIG_POWER4 */
#endif /* CONFIG_POWER4 */
/*
/*
...
@@ -1637,6 +1619,34 @@ setup_disp_bat:
...
@@ -1637,6 +1619,34 @@ setup_disp_bat:
#endif /* !defined(CONFIG_APUS) && defined(CONFIG_BOOTX_TEXT) */
#endif /* !defined(CONFIG_APUS) && defined(CONFIG_BOOTX_TEXT) */
#else /* CONFIG_POWER4 */
#else /* CONFIG_POWER4 */
/*
*
Load
up
the
SDR1
and
segment
register
values
now
*
since
we
don
't have the BATs.
*
Also
make
sure
we
are
running
in
32
-
bit
mode
.
*/
initial_mm_power4
:
addis
r14
,
r3
,
_SDR1
@
ha
/*
get
the
value
from
_SDR1
*/
lwz
r14
,
_SDR1
@
l
(
r14
)
/*
assume
hash
table
below
4
GB
*/
mtspr
SDR1
,
r14
slbia
lis
r4
,
0x2000
/*
set
pseudo
-
segment
reg
12
*/
ori
r5
,
r4
,
0x0ccc
mtsr
12
,
r5
ori
r5
,
r4
,
0x0888
/*
set
pseudo
-
segment
reg
8
*/
mtsr
8
,
r5
/*
(
for
access
to
serial
port
)
*/
ori
r5
,
r4
,
0x0999
/*
set
pseudo
-
segment
reg
8
*/
mtsr
9
,
r5
/*
(
for
access
to
screen
)
*/
mfmsr
r0
clrldi
r0
,
r0
,
1
sync
mtmsr
r0
isync
blr
/*
*
On
970
(
G5
),
we
pre
-
set
a
few
bits
in
HID0
&
HID1
*/
ppc970_setup_hid
:
ppc970_setup_hid
:
li
r0
,
0
li
r0
,
0
sync
sync
...
...
arch/ppc/kernel/ppc_ksyms.c
View file @
7b71051f
...
@@ -367,11 +367,17 @@ EXPORT_SYMBOL(next_mmu_context);
...
@@ -367,11 +367,17 @@ EXPORT_SYMBOL(next_mmu_context);
EXPORT_SYMBOL
(
set_context
);
EXPORT_SYMBOL
(
set_context
);
EXPORT_SYMBOL
(
handle_mm_fault
);
/* For MOL */
EXPORT_SYMBOL
(
handle_mm_fault
);
/* For MOL */
EXPORT_SYMBOL_NOVERS
(
disarm_decr
);
EXPORT_SYMBOL_NOVERS
(
disarm_decr
);
extern
long
mol_trampoline
;
EXPORT_SYMBOL
(
mol_trampoline
);
/* For MOL */
#ifdef CONFIG_PPC_STD_MMU
#ifdef CONFIG_PPC_STD_MMU
EXPORT_SYMBOL
(
flush_hash_pages
);
/* For MOL */
EXPORT_SYMBOL
(
flush_hash_pages
);
/* For MOL */
#ifdef CONFIG_SMP
extern
int
mmu_hash_lock
;
EXPORT_SYMBOL
(
mmu_hash_lock
);
/* For MOL */
#endif
/* CONFIG_SMP */
extern
long
*
intercept_table
;
extern
long
*
intercept_table
;
EXPORT_SYMBOL
(
intercept_table
);
EXPORT_SYMBOL
(
intercept_table
);
#endif
#endif
/* CONFIG_PPC_STD_MMU */
EXPORT_SYMBOL
(
cur_cpu_spec
);
EXPORT_SYMBOL
(
cur_cpu_spec
);
#ifdef CONFIG_PPC_PMAC
#ifdef CONFIG_PPC_PMAC
extern
unsigned
long
agp_special_page
;
extern
unsigned
long
agp_special_page
;
...
...
arch/ppc/kernel/process.c
View file @
7b71051f
...
@@ -56,6 +56,7 @@ static struct files_struct init_files = INIT_FILES;
...
@@ -56,6 +56,7 @@ static struct files_struct init_files = INIT_FILES;
static
struct
signal_struct
init_signals
=
INIT_SIGNALS
(
init_signals
);
static
struct
signal_struct
init_signals
=
INIT_SIGNALS
(
init_signals
);
static
struct
sighand_struct
init_sighand
=
INIT_SIGHAND
(
init_sighand
);
static
struct
sighand_struct
init_sighand
=
INIT_SIGHAND
(
init_sighand
);
struct
mm_struct
init_mm
=
INIT_MM
(
init_mm
);
struct
mm_struct
init_mm
=
INIT_MM
(
init_mm
);
EXPORT_SYMBOL
(
init_mm
);
/* this is 8kB-aligned so we can get to the thread_info struct
/* this is 8kB-aligned so we can get to the thread_info struct
at the base of it from the stack pointer with 1 integer instruction. */
at the base of it from the stack pointer with 1 integer instruction. */
...
...
arch/ppc/mm/hashtable.S
View file @
7b71051f
...
@@ -417,6 +417,21 @@ _GLOBAL(hash_page_patch_C)
...
@@ -417,6 +417,21 @@ _GLOBAL(hash_page_patch_C)
lwz
r6
,
next_slot
@
l
(
r4
)
lwz
r6
,
next_slot
@
l
(
r4
)
addi
r6
,
r6
,
PTE_SIZE
addi
r6
,
r6
,
PTE_SIZE
andi
.
r6
,
r6
,
7
*
PTE_SIZE
andi
.
r6
,
r6
,
7
*
PTE_SIZE
#ifdef CONFIG_POWER4
/
*
*
Since
we
don
't have BATs on POWER4, we rely on always having
*
PTEs
in
the
hash
table
to
map
the
hash
table
and
the
code
*
that
manipulates
it
in
virtual
mode
,
namely
flush_hash_page
and
*
flush_hash_segments
.
Otherwise
we
can
get
a
DSI
inside
those
*
routines
which
leads
to
a
deadlock
on
the
hash_table_lock
on
*
SMP
machines
.
We
avoid
this
by
never
overwriting
the
first
*
PTE
of
each
PTEG
if
it
is
already
valid
.
*
--
paulus
.
*/
bne
102
f
li
r6
,
PTE_SIZE
102
:
#endif /* CONFIG_POWER4 */
stw
r6
,
next_slot
@
l
(
r4
)
stw
r6
,
next_slot
@
l
(
r4
)
add
r4
,
r3
,
r6
add
r4
,
r3
,
r6
...
...
arch/ppc/mm/ppc_mmu.c
View file @
7b71051f
...
@@ -211,6 +211,17 @@ void __init MMU_init_hw(void)
...
@@ -211,6 +211,17 @@ void __init MMU_init_hw(void)
#define MIN_N_HPTEG 1024
/* min 64kB hash table */
#define MIN_N_HPTEG 1024
/* min 64kB hash table */
#endif
#endif
#ifdef CONFIG_POWER4
/* The hash table has already been allocated and initialized
in prom.c */
n_hpteg
=
Hash_size
>>
LG_HPTEG_SIZE
;
lg_n_hpteg
=
__ilog2
(
n_hpteg
);
/* Remove the hash table from the available memory */
if
(
Hash
)
reserve_phys_mem
(
__pa
(
Hash
),
Hash_size
);
#else
/* CONFIG_POWER4 */
/*
/*
* Allow 1 HPTE (1/8 HPTEG) for each page of memory.
* Allow 1 HPTE (1/8 HPTEG) for each page of memory.
* This is less than the recommended amount, but then
* This is less than the recommended amount, but then
...
@@ -224,13 +235,7 @@ void __init MMU_init_hw(void)
...
@@ -224,13 +235,7 @@ void __init MMU_init_hw(void)
++
lg_n_hpteg
;
/* round up if not power of 2 */
++
lg_n_hpteg
;
/* round up if not power of 2 */
n_hpteg
=
1
<<
lg_n_hpteg
;
n_hpteg
=
1
<<
lg_n_hpteg
;
}
}
Hash_size
=
n_hpteg
<<
LG_HPTEG_SIZE
;
Hash_size
=
n_hpteg
<<
LG_HPTEG_SIZE
;
Hash_mask
=
n_hpteg
-
1
;
hmask
=
Hash_mask
>>
(
16
-
LG_HPTEG_SIZE
);
mb2
=
mb
=
32
-
LG_HPTEG_SIZE
-
lg_n_hpteg
;
if
(
lg_n_hpteg
>
16
)
mb2
=
16
-
LG_HPTEG_SIZE
;
/*
/*
* Find some memory for the hash table.
* Find some memory for the hash table.
...
@@ -240,6 +245,7 @@ void __init MMU_init_hw(void)
...
@@ -240,6 +245,7 @@ void __init MMU_init_hw(void)
cacheable_memzero
(
Hash
,
Hash_size
);
cacheable_memzero
(
Hash
,
Hash_size
);
_SDR1
=
__pa
(
Hash
)
|
SDR1_LOW_BITS
;
_SDR1
=
__pa
(
Hash
)
|
SDR1_LOW_BITS
;
Hash_end
=
(
PTE
*
)
((
unsigned
long
)
Hash
+
Hash_size
);
Hash_end
=
(
PTE
*
)
((
unsigned
long
)
Hash
+
Hash_size
);
#endif
/* CONFIG_POWER4 */
printk
(
"Total memory = %ldMB; using %ldkB for hash table (at %p)
\n
"
,
printk
(
"Total memory = %ldMB; using %ldkB for hash table (at %p)
\n
"
,
total_memory
>>
20
,
Hash_size
>>
10
,
Hash
);
total_memory
>>
20
,
Hash_size
>>
10
,
Hash
);
...
@@ -249,6 +255,12 @@ void __init MMU_init_hw(void)
...
@@ -249,6 +255,12 @@ void __init MMU_init_hw(void)
* Patch up the instructions in hashtable.S:create_hpte
* Patch up the instructions in hashtable.S:create_hpte
*/
*/
if
(
ppc_md
.
progress
)
ppc_md
.
progress
(
"hash:patch"
,
0x345
);
if
(
ppc_md
.
progress
)
ppc_md
.
progress
(
"hash:patch"
,
0x345
);
Hash_mask
=
n_hpteg
-
1
;
hmask
=
Hash_mask
>>
(
16
-
LG_HPTEG_SIZE
);
mb2
=
mb
=
32
-
LG_HPTEG_SIZE
-
lg_n_hpteg
;
if
(
lg_n_hpteg
>
16
)
mb2
=
16
-
LG_HPTEG_SIZE
;
hash_page_patch_A
[
0
]
=
(
hash_page_patch_A
[
0
]
&
~
0xffff
)
hash_page_patch_A
[
0
]
=
(
hash_page_patch_A
[
0
]
&
~
0xffff
)
|
((
unsigned
int
)(
Hash
)
>>
16
);
|
((
unsigned
int
)(
Hash
)
>>
16
);
hash_page_patch_A
[
1
]
=
(
hash_page_patch_A
[
1
]
&
~
0x7c0
)
|
(
mb
<<
6
);
hash_page_patch_A
[
1
]
=
(
hash_page_patch_A
[
1
]
&
~
0x7c0
)
|
(
mb
<<
6
);
...
...
arch/ppc/platforms/pmac_smp.c
View file @
7b71051f
...
@@ -51,6 +51,7 @@
...
@@ -51,6 +51,7 @@
#include <asm/time.h>
#include <asm/time.h>
#include <asm/open_pic.h>
#include <asm/open_pic.h>
#include <asm/cacheflush.h>
#include <asm/cacheflush.h>
#include <asm/keylargo.h>
/*
/*
* Powersurge (old powermac SMP) support.
* Powersurge (old powermac SMP) support.
...
@@ -108,9 +109,16 @@ static volatile u32 *psurge_start;
...
@@ -108,9 +109,16 @@ static volatile u32 *psurge_start;
/* what sort of powersurge board we have */
/* what sort of powersurge board we have */
static
int
psurge_type
=
PSURGE_NONE
;
static
int
psurge_type
=
PSURGE_NONE
;
/* L2 and L3 cache settings to pass from CPU0 to CPU1 */
volatile
static
long
int
core99_l2_cache
;
volatile
static
long
int
core99_l2_cache
;
volatile
static
long
int
core99_l3_cache
;
volatile
static
long
int
core99_l3_cache
;
/* Timebase freeze GPIO */
static
unsigned
int
core99_tb_gpio
;
/* Sync flag for HW tb sync */
static
volatile
int
sec_tb_reset
=
0
;
static
void
__init
static
void
__init
core99_init_caches
(
int
cpu
)
core99_init_caches
(
int
cpu
)
{
{
...
@@ -380,7 +388,6 @@ static void __init smp_psurge_kick_cpu(int nr)
...
@@ -380,7 +388,6 @@ static void __init smp_psurge_kick_cpu(int nr)
*/
*/
static
void
__init
psurge_dual_sync_tb
(
int
cpu_nr
)
static
void
__init
psurge_dual_sync_tb
(
int
cpu_nr
)
{
{
static
volatile
int
sec_tb_reset
=
0
;
int
t
;
int
t
;
set_dec
(
tb_ticks_per_jiffy
);
set_dec
(
tb_ticks_per_jiffy
);
...
@@ -408,8 +415,15 @@ smp_psurge_setup_cpu(int cpu_nr)
...
@@ -408,8 +415,15 @@ smp_psurge_setup_cpu(int cpu_nr)
{
{
if
(
cpu_nr
==
0
)
{
if
(
cpu_nr
==
0
)
{
if
(
num_online_cpus
()
<
2
)
/* If we failed to start the second CPU, we should still
* send it an IPI to start the timebase & DEC or we might
* have them stuck.
*/
if
(
num_online_cpus
()
<
2
)
{
if
(
psurge_type
==
PSURGE_DUAL
)
psurge_set_ipi
(
1
);
return
;
return
;
}
/* reset the entry point so if we get another intr we won't
/* reset the entry point so if we get another intr we won't
* try to startup again */
* try to startup again */
out_be32
(
psurge_start
,
0x100
);
out_be32
(
psurge_start
,
0x100
);
...
@@ -421,19 +435,42 @@ smp_psurge_setup_cpu(int cpu_nr)
...
@@ -421,19 +435,42 @@ smp_psurge_setup_cpu(int cpu_nr)
psurge_dual_sync_tb
(
cpu_nr
);
psurge_dual_sync_tb
(
cpu_nr
);
}
}
void
__init
smp_psurge_take_timebase
(
void
)
{
/* Dummy implementation */
}
void
__init
smp_psurge_give_timebase
(
void
)
{
/* Dummy implementation */
}
static
int
__init
static
int
__init
smp_core99_probe
(
void
)
smp_core99_probe
(
void
)
{
{
extern
int
powersave_nap
;
struct
device_node
*
cpus
;
struct
device_node
*
cpus
;
int
i
,
ncpus
=
1
;
int
i
,
ncpus
=
1
;
extern
int
powersave_na
p
;
u32
*
tbpro
p
;
if
(
ppc_md
.
progress
)
ppc_md
.
progress
(
"smp_core99_probe"
,
0x345
);
if
(
ppc_md
.
progress
)
ppc_md
.
progress
(
"smp_core99_probe"
,
0x345
);
cpus
=
find_type_devices
(
"cpu"
);
cpus
=
find_type_devices
(
"cpu"
);
if
(
cpus
)
if
(
cpus
==
NULL
)
return
0
;
tbprop
=
(
u32
*
)
get_property
(
cpus
,
"timebase-enable"
,
NULL
);
if
(
tbprop
)
core99_tb_gpio
=
*
tbprop
;
else
core99_tb_gpio
=
KL_GPIO_TB_ENABLE
;
while
((
cpus
=
cpus
->
next
)
!=
NULL
)
while
((
cpus
=
cpus
->
next
)
!=
NULL
)
++
ncpus
;
++
ncpus
;
printk
(
"smp_core99_probe: found %d cpus
\n
"
,
ncpus
);
printk
(
"smp_core99_probe: found %d cpus
\n
"
,
ncpus
);
if
(
ncpus
>
1
)
{
if
(
ncpus
>
1
)
{
openpic_request_IPIs
();
openpic_request_IPIs
();
for
(
i
=
1
;
i
<
ncpus
;
++
i
)
for
(
i
=
1
;
i
<
ncpus
;
++
i
)
...
@@ -517,14 +554,59 @@ smp_core99_setup_cpu(int cpu_nr)
...
@@ -517,14 +554,59 @@ smp_core99_setup_cpu(int cpu_nr)
if
(
ppc_md
.
progress
)
ppc_md
.
progress
(
"core99_setup_cpu 0 done"
,
0x349
);
if
(
ppc_md
.
progress
)
ppc_md
.
progress
(
"core99_setup_cpu 0 done"
,
0x349
);
}
}
void
__init
smp_core99_take_timebase
(
void
)
{
/* Secondary processor "takes" the timebase by freezing
* it, resetting its local TB and telling CPU 0 to go on
*/
pmac_call_feature
(
PMAC_FTR_WRITE_GPIO
,
NULL
,
core99_tb_gpio
,
4
);
pmac_call_feature
(
PMAC_FTR_READ_GPIO
,
NULL
,
core99_tb_gpio
,
0
);
mb
();
set_dec
(
tb_ticks_per_jiffy
);
set_tb
(
0
,
0
);
last_jiffy_stamp
(
smp_processor_id
())
=
0
;
mb
();
sec_tb_reset
=
1
;
}
void
__init
smp_core99_give_timebase
(
void
)
{
unsigned
int
t
;
/* Primary processor waits for secondary to have frozen
* the timebase, resets local TB, and kick timebase again
*/
/* wait for the secondary to have reset its TB before proceeding */
for
(
t
=
1000
;
t
>
0
&&
!
sec_tb_reset
;
--
t
)
udelay
(
1000
);
if
(
t
==
0
)
printk
(
KERN_WARNING
"Timeout waiting sync on second CPU
\n
"
);
set_dec
(
tb_ticks_per_jiffy
);
set_tb
(
0
,
0
);
last_jiffy_stamp
(
smp_processor_id
())
=
0
;
mb
();
/* Now, restart the timebase by leaving the GPIO to an open collector */
pmac_call_feature
(
PMAC_FTR_WRITE_GPIO
,
NULL
,
core99_tb_gpio
,
0
);
pmac_call_feature
(
PMAC_FTR_READ_GPIO
,
NULL
,
core99_tb_gpio
,
0
);
smp_tb_synchronized
=
1
;
}
/* PowerSurge-style Macs */
/* PowerSurge-style Macs */
struct
smp_ops_t
psurge_smp_ops
__pmacdata
=
{
struct
smp_ops_t
psurge_smp_ops
__pmacdata
=
{
.
message_pass
=
smp_psurge_message_pass
,
.
message_pass
=
smp_psurge_message_pass
,
.
probe
=
smp_psurge_probe
,
.
probe
=
smp_psurge_probe
,
.
kick_cpu
=
smp_psurge_kick_cpu
,
.
kick_cpu
=
smp_psurge_kick_cpu
,
.
setup_cpu
=
smp_psurge_setup_cpu
,
.
setup_cpu
=
smp_psurge_setup_cpu
,
.
give_timebase
=
smp_
generic
_give_timebase
,
.
give_timebase
=
smp_
psurge
_give_timebase
,
.
take_timebase
=
smp_
generic
_take_timebase
,
.
take_timebase
=
smp_
psurge
_take_timebase
,
};
};
/* Core99 Macs (dual G4s) */
/* Core99 Macs (dual G4s) */
...
@@ -533,6 +615,6 @@ struct smp_ops_t core99_smp_ops __pmacdata = {
...
@@ -533,6 +615,6 @@ struct smp_ops_t core99_smp_ops __pmacdata = {
.
probe
=
smp_core99_probe
,
.
probe
=
smp_core99_probe
,
.
kick_cpu
=
smp_core99_kick_cpu
,
.
kick_cpu
=
smp_core99_kick_cpu
,
.
setup_cpu
=
smp_core99_setup_cpu
,
.
setup_cpu
=
smp_core99_setup_cpu
,
.
give_timebase
=
smp_
generic
_give_timebase
,
.
give_timebase
=
smp_
core99
_give_timebase
,
.
take_timebase
=
smp_
generic
_take_timebase
,
.
take_timebase
=
smp_
core99
_take_timebase
,
};
};
arch/ppc/platforms/pmac_time.c
View file @
7b71051f
...
@@ -166,7 +166,7 @@ via_calibrate_decr(void)
...
@@ -166,7 +166,7 @@ via_calibrate_decr(void)
{
{
struct
device_node
*
vias
;
struct
device_node
*
vias
;
volatile
unsigned
char
*
via
;
volatile
unsigned
char
*
via
;
int
count
=
VIA_TIMER_FREQ_6
/
HZ
;
int
count
=
VIA_TIMER_FREQ_6
/
100
;
unsigned
int
dstart
,
dend
;
unsigned
int
dstart
,
dend
;
vias
=
find_devices
(
"via-cuda"
);
vias
=
find_devices
(
"via-cuda"
);
...
@@ -196,7 +196,7 @@ via_calibrate_decr(void)
...
@@ -196,7 +196,7 @@ via_calibrate_decr(void)
;
;
dend
=
get_dec
();
dend
=
get_dec
();
tb_ticks_per_jiffy
=
(
dstart
-
dend
)
/
6
;
tb_ticks_per_jiffy
=
(
dstart
-
dend
)
/
(
6
*
(
HZ
/
100
))
;
tb_to_us
=
mulhwu_scale_factor
(
dstart
-
dend
,
60000
);
tb_to_us
=
mulhwu_scale_factor
(
dstart
-
dend
,
60000
);
printk
(
KERN_INFO
"via_calibrate_decr: ticks per jiffy = %u (%u ticks)
\n
"
,
printk
(
KERN_INFO
"via_calibrate_decr: ticks per jiffy = %u (%u ticks)
\n
"
,
...
@@ -260,7 +260,9 @@ pmac_calibrate_decr(void)
...
@@ -260,7 +260,9 @@ pmac_calibrate_decr(void)
* calibration. That's better since the VIA itself seems
* calibration. That's better since the VIA itself seems
* to be slightly off. --BenH
* to be slightly off. --BenH
*/
*/
if
(
!
machine_is_compatible
(
"MacRISC2"
))
if
(
!
machine_is_compatible
(
"MacRISC2"
)
&&
!
machine_is_compatible
(
"MacRISC3"
)
&&
!
machine_is_compatible
(
"MacRISC4"
))
if
(
via_calibrate_decr
())
if
(
via_calibrate_decr
())
return
;
return
;
...
...
arch/ppc/syslib/of_device.c
View file @
7b71051f
...
@@ -97,9 +97,9 @@ static int of_device_probe(struct device *dev)
...
@@ -97,9 +97,9 @@ static int of_device_probe(struct device *dev)
static
int
of_device_remove
(
struct
device
*
dev
)
static
int
of_device_remove
(
struct
device
*
dev
)
{
{
struct
of_device
*
of_dev
=
to_of_device
(
dev
);
struct
of_device
*
of_dev
=
to_of_device
(
dev
);
struct
of_platform_driver
*
drv
=
to_of_platform_driver
(
of_dev
->
dev
.
driver
);
struct
of_platform_driver
*
drv
=
to_of_platform_driver
(
dev
->
driver
);
if
(
d
rv
&&
drv
->
remove
)
if
(
d
ev
->
driver
&&
drv
->
remove
)
drv
->
remove
(
of_dev
);
drv
->
remove
(
of_dev
);
return
0
;
return
0
;
}
}
...
@@ -107,10 +107,10 @@ static int of_device_remove(struct device *dev)
...
@@ -107,10 +107,10 @@ static int of_device_remove(struct device *dev)
static
int
of_device_suspend
(
struct
device
*
dev
,
u32
state
)
static
int
of_device_suspend
(
struct
device
*
dev
,
u32
state
)
{
{
struct
of_device
*
of_dev
=
to_of_device
(
dev
);
struct
of_device
*
of_dev
=
to_of_device
(
dev
);
struct
of_platform_driver
*
drv
=
to_of_platform_driver
(
of_dev
->
dev
.
driver
);
struct
of_platform_driver
*
drv
=
to_of_platform_driver
(
dev
->
driver
);
int
error
=
0
;
int
error
=
0
;
if
(
d
rv
&&
drv
->
suspend
)
if
(
d
ev
->
driver
&&
drv
->
suspend
)
error
=
drv
->
suspend
(
of_dev
,
state
);
error
=
drv
->
suspend
(
of_dev
,
state
);
return
error
;
return
error
;
}
}
...
@@ -118,10 +118,10 @@ static int of_device_suspend(struct device *dev, u32 state)
...
@@ -118,10 +118,10 @@ static int of_device_suspend(struct device *dev, u32 state)
static
int
of_device_resume
(
struct
device
*
dev
)
static
int
of_device_resume
(
struct
device
*
dev
)
{
{
struct
of_device
*
of_dev
=
to_of_device
(
dev
);
struct
of_device
*
of_dev
=
to_of_device
(
dev
);
struct
of_platform_driver
*
drv
=
to_of_platform_driver
(
of_dev
->
dev
.
driver
);
struct
of_platform_driver
*
drv
=
to_of_platform_driver
(
dev
->
driver
);
int
error
=
0
;
int
error
=
0
;
if
(
d
rv
&&
drv
->
resume
)
if
(
d
ev
->
driver
&&
drv
->
resume
)
error
=
drv
->
resume
(
of_dev
);
error
=
drv
->
resume
(
of_dev
);
return
error
;
return
error
;
}
}
...
...
drivers/macintosh/adbhid.c
View file @
7b71051f
...
@@ -611,8 +611,8 @@ adbhid_input_register(int id, int default_id, int original_handler_id,
...
@@ -611,8 +611,8 @@ adbhid_input_register(int id, int default_id, int original_handler_id,
/* HACK WARNING!! This should go away as soon there is an utility
/* HACK WARNING!! This should go away as soon there is an utility
* to control that for event devices.
* to control that for event devices.
*/
*/
adbhid
[
id
]
->
input
.
rep
[
REP_DELAY
]
=
HZ
/
2
;
/* input layer default: HZ/4
*/
adbhid
[
id
]
->
input
.
rep
[
REP_DELAY
]
=
500
;
/* input layer default: 250
*/
adbhid
[
id
]
->
input
.
rep
[
REP_PERIOD
]
=
HZ
/
15
;
/* input layer default: HZ/
33 */
adbhid
[
id
]
->
input
.
rep
[
REP_PERIOD
]
=
66
;
/* input layer default:
33 */
}
}
}
}
...
...
drivers/video/imsttfb.c
View file @
7b71051f
...
@@ -1461,6 +1461,15 @@ imsttfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
...
@@ -1461,6 +1461,15 @@ imsttfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
unsigned
long
addr
,
size
;
unsigned
long
addr
,
size
;
struct
imstt_par
*
par
;
struct
imstt_par
*
par
;
struct
fb_info
*
info
;
struct
fb_info
*
info
;
#ifdef CONFIG_PPC_OF
struct
device_node
*
dp
;
dp
=
pci_device_to_OF_node
(
pdev
);
if
(
dp
)
printk
(
KERN_INFO
"%s: OF name %s
\n
"
,
__FUNCTION__
,
dp
->
name
);
else
printk
(
KERN_ERR
"imsttfb: no OF node for pci device
\n
"
);
#endif
/* CONFIG_PPC_OF */
size
=
sizeof
(
struct
fb_info
)
+
sizeof
(
struct
imstt_par
)
+
size
=
sizeof
(
struct
fb_info
)
+
sizeof
(
struct
imstt_par
)
+
sizeof
(
u32
)
*
16
;
sizeof
(
u32
)
*
16
;
...
@@ -1488,6 +1497,11 @@ imsttfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
...
@@ -1488,6 +1497,11 @@ imsttfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
switch
(
pdev
->
device
)
{
switch
(
pdev
->
device
)
{
case
PCI_DEVICE_ID_IMS_TT128
:
/* IMS,tt128mbA */
case
PCI_DEVICE_ID_IMS_TT128
:
/* IMS,tt128mbA */
par
->
ramdac
=
IBM
;
par
->
ramdac
=
IBM
;
#ifdef CONFIG_PPC_OF
if
(
dp
&&
((
strcmp
(
dp
->
name
,
"IMS,tt128mb8"
)
==
0
)
||
(
strcmp
(
dp
->
name
,
"IMS,tt128mb8A"
)
==
0
)))
par
->
ramdac
=
TVP
;
#endif
/* CONFIG_PPC_OF */
break
;
break
;
case
PCI_DEVICE_ID_IMS_TT3D
:
/* IMS,tt3d */
case
PCI_DEVICE_ID_IMS_TT3D
:
/* IMS,tt3d */
par
->
ramdac
=
TVP
;
par
->
ramdac
=
TVP
;
...
...
include/asm-ppc/reg.h
View file @
7b71051f
...
@@ -87,6 +87,10 @@
...
@@ -87,6 +87,10 @@
#define SPRN_CTR 0x009
/* Count Register */
#define SPRN_CTR 0x009
/* Count Register */
#define SPRN_DABR 0x3F5
/* Data Address Breakpoint Register */
#define SPRN_DABR 0x3F5
/* Data Address Breakpoint Register */
#define SPRN_DAR 0x013
/* Data Address Register */
#define SPRN_DAR 0x013
/* Data Address Register */
#define SPRN_TBRL 0x10C
/* Time Base Read Lower Register (user, R/O) */
#define SPRN_TBRU 0x10D
/* Time Base Read Upper Register (user, R/O) */
#define SPRN_TBWL 0x11C
/* Time Base Lower Register (super, R/W) */
#define SPRN_TBWU 0x11D
/* Time Base Upper Register (super, R/W) */
#define SPRN_DBAT0L 0x219
/* Data BAT 0 Lower Register */
#define SPRN_DBAT0L 0x219
/* Data BAT 0 Lower Register */
#define SPRN_DBAT0U 0x218
/* Data BAT 0 Upper Register */
#define SPRN_DBAT0U 0x218
/* Data BAT 0 Upper Register */
#define SPRN_DBAT1L 0x21B
/* Data BAT 1 Lower Register */
#define SPRN_DBAT1L 0x21B
/* Data BAT 1 Lower Register */
...
@@ -397,6 +401,10 @@
...
@@ -397,6 +401,10 @@
#define THRM2 SPRN_THRM2
/* Thermal Management Register 2 */
#define THRM2 SPRN_THRM2
/* Thermal Management Register 2 */
#define THRM3 SPRN_THRM3
/* Thermal Management Register 3 */
#define THRM3 SPRN_THRM3
/* Thermal Management Register 3 */
#define XER SPRN_XER
#define XER SPRN_XER
#define TBRL SPRN_TBRL
/* Time Base Read Lower Register */
#define TBRU SPRN_TBRU
/* Time Base Read Upper Register */
#define TBWL SPRN_TBWL
/* Time Base Write Lower Register */
#define TBWU SPRN_TBWU
/* Time Base Write Upper Register */
/* Processor Version Register */
/* Processor Version Register */
...
...
include/asm-ppc/reg_booke.h
View file @
7b71051f
...
@@ -59,14 +59,10 @@ do { \
...
@@ -59,14 +59,10 @@ do { \
#define SPRN_SPRG5R 0x105
/* Special Purpose Register General 5 Read */
#define SPRN_SPRG5R 0x105
/* Special Purpose Register General 5 Read */
#define SPRN_SPRG6R 0x106
/* Special Purpose Register General 6 Read */
#define SPRN_SPRG6R 0x106
/* Special Purpose Register General 6 Read */
#define SPRN_SPRG7R 0x107
/* Special Purpose Register General 7 Read */
#define SPRN_SPRG7R 0x107
/* Special Purpose Register General 7 Read */
#define SPRN_TBRL 0x10C
/* Time Base Read Lower Register (user, R/O) */
#define SPRN_TBRU 0x10D
/* Time Base Read Upper Register (user, R/O) */
#define SPRN_SPRG4W 0x114
/* Special Purpose Register General 4 Write */
#define SPRN_SPRG4W 0x114
/* Special Purpose Register General 4 Write */
#define SPRN_SPRG5W 0x115
/* Special Purpose Register General 5 Write */
#define SPRN_SPRG5W 0x115
/* Special Purpose Register General 5 Write */
#define SPRN_SPRG6W 0x116
/* Special Purpose Register General 6 Write */
#define SPRN_SPRG6W 0x116
/* Special Purpose Register General 6 Write */
#define SPRN_SPRG7W 0x117
/* Special Purpose Register General 7 Write */
#define SPRN_SPRG7W 0x117
/* Special Purpose Register General 7 Write */
#define SPRN_TBWL 0x11C
/* Time Base Lower Register (super, R/W) */
#define SPRN_TBWU 0x11D
/* Time Base Upper Register (super, R/W) */
#define SPRN_DBCR2 0x136
/* Debug Control Register 2 */
#define SPRN_DBCR2 0x136
/* Debug Control Register 2 */
#define SPRN_IAC3 0x13A
/* Instruction Address Compare 3 */
#define SPRN_IAC3 0x13A
/* Instruction Address Compare 3 */
#define SPRN_IAC4 0x13B
/* Instruction Address Compare 4 */
#define SPRN_IAC4 0x13B
/* Instruction Address Compare 4 */
...
@@ -252,10 +248,6 @@ do { \
...
@@ -252,10 +248,6 @@ do { \
#define SPRG5W SPRN_SPRG5W
#define SPRG5W SPRN_SPRG5W
#define SPRG6W SPRN_SPRG6W
#define SPRG6W SPRN_SPRG6W
#define SPRG7W SPRN_SPRG7W
#define SPRG7W SPRN_SPRG7W
#define TBRL SPRN_TBRL
/* Time Base Read Lower Register */
#define TBRU SPRN_TBRU
/* Time Base Read Upper Register */
#define TBWL SPRN_TBWL
/* Time Base Write Lower Register */
#define TBWU SPRN_TBWU
/* Time Base Write Upper Register */
/*
/*
* The IBM-403 is an even more odd special case, as it is much
* The IBM-403 is an even more odd special case, as it is much
...
...
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