Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
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
Hide 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
)
while
((
cpus
=
cpus
->
next
)
!=
NULL
)
return
0
;
++
ncpus
;
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
)
++
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