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
225b563b
Commit
225b563b
authored
Sep 13, 2002
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge nuts.ninka.net:/home/davem/src/BK/zaitcev-2.5
into nuts.ninka.net:/home/davem/src/BK/sparc-2.5
parents
cc8a6820
23340580
Changes
26
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
333 additions
and
462 deletions
+333
-462
arch/sparc/config.in
arch/sparc/config.in
+5
-0
arch/sparc/defconfig
arch/sparc/defconfig
+127
-178
arch/sparc/kernel/Makefile
arch/sparc/kernel/Makefile
+1
-1
arch/sparc/kernel/ebus.c
arch/sparc/kernel/ebus.c
+0
-4
arch/sparc/kernel/entry.S
arch/sparc/kernel/entry.S
+2
-1
arch/sparc/kernel/pcic.c
arch/sparc/kernel/pcic.c
+82
-73
arch/sparc/kernel/process.c
arch/sparc/kernel/process.c
+2
-4
arch/sparc/kernel/setup.c
arch/sparc/kernel/setup.c
+44
-84
arch/sparc/kernel/sparc-stub.c
arch/sparc/kernel/sparc-stub.c
+3
-11
arch/sparc/kernel/tadpole.c
arch/sparc/kernel/tadpole.c
+8
-5
arch/sparc/kernel/tick14.c
arch/sparc/kernel/tick14.c
+5
-7
arch/sparc/kernel/unaligned.c
arch/sparc/kernel/unaligned.c
+9
-0
arch/sparc/mm/srmmu.c
arch/sparc/mm/srmmu.c
+0
-8
arch/sparc/mm/sun4c.c
arch/sparc/mm/sun4c.c
+0
-7
arch/sparc/prom/misc.c
arch/sparc/prom/misc.c
+4
-6
arch/sparc64/kernel/power.c
arch/sparc64/kernel/power.c
+1
-2
arch/sparc64/kernel/process.c
arch/sparc64/kernel/process.c
+0
-1
arch/sparc64/kernel/setup.c
arch/sparc64/kernel/setup.c
+1
-29
arch/sparc64/mm/init.c
arch/sparc64/mm/init.c
+0
-8
arch/sparc64/prom/misc.c
arch/sparc64/prom/misc.c
+1
-1
drivers/serial/sunsu.c
drivers/serial/sunsu.c
+3
-0
drivers/serial/sunzilog.c
drivers/serial/sunzilog.c
+18
-28
include/asm-sparc/hardirq.h
include/asm-sparc/hardirq.h
+1
-1
include/asm-sparc/irq.h
include/asm-sparc/irq.h
+2
-0
include/asm-sparc/kmap_types.h
include/asm-sparc/kmap_types.h
+2
-0
include/asm-sparc/system.h
include/asm-sparc/system.h
+12
-3
No files found.
arch/sparc/config.in
View file @
225b563b
...
...
@@ -59,6 +59,9 @@ endmenu
mainmenu_option next_comment
comment 'Console drivers'
bool 'PROM console' CONFIG_PROM_CONSOLE
if [ "$CONFIG_PROM_CONSOLE" != "y" ]; then
define_bool CONFIG_DUMMY_CONSOLE y
fi
source drivers/video/Config.in
endmenu
...
...
@@ -214,6 +217,8 @@ if [ "$CONFIG_UNIX98_PTYS" = "y" ]; then
fi
endmenu
source drivers/input/Config.in
source fs/Config.in
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
...
...
arch/sparc/defconfig
View file @
225b563b
This diff is collapsed.
Click to expand it.
arch/sparc/kernel/Makefile
View file @
225b563b
...
...
@@ -13,7 +13,7 @@ export-objs := sparc_ksyms.o
IRQ_OBJS
:=
irq.o sun4m_irq.o sun4c_irq.o sun4d_irq.o
obj-y
:=
entry.o wof.o wuf.o etrap.o rtrap.o traps.o
${IRQ_OBJS}
\
process.o signal.o ioport.o setup.o idprom.o
\
sys_sparc.o sunos_asm.o s
parc-stub.o s
ystbls.o
\
sys_sparc.o sunos_asm.o systbls.o
\
time.o windows.o cpu.o devices.o sclow.o
\
tadpole.o tick14.o ptrace.o sys_solaris.o
\
unaligned.o muldiv.o pcic.o semaphore.o sparc_ksyms.o
...
...
arch/sparc/kernel/ebus.c
View file @
225b563b
...
...
@@ -24,8 +24,6 @@
struct
linux_ebus
*
ebus_chain
=
0
;
extern
void
rs_init
(
void
);
/* We are together with pcic.c under CONFIG_PCI. */
extern
unsigned
int
pcic_pin_to_irq
(
unsigned
int
,
char
*
name
);
...
...
@@ -361,6 +359,4 @@ void __init ebus_init(void)
ebus
->
next
=
0
;
++
num_ebus
;
}
rs_init
();
}
arch/sparc/kernel/entry.S
View file @
225b563b
...
...
@@ -53,6 +53,7 @@ in_trap_handler:
.
text
.
align
4
#if 0 /* kgdb is dropped from 2.5.33 */
!
This
function
is
called
when
any
SPARC
trap
(
except
window
overflow
or
!
underflow
)
occurs
.
It
makes
sure
that
the
invalid
register
window
is
still
!
available
before
jumping
into
C
code
.
It
will
also
restore
the
world
if
you
...
...
@@ -119,7 +120,7 @@ C_LABEL(trap_low):
STORE_PT_PRIV
(
sp
,
l0
,
l1
,
l2
)
RESTORE_ALL
#endif
#ifdef CONFIG_BLK_DEV_FD
.
text
...
...
arch/sparc/kernel/pcic.c
View file @
225b563b
/*
$Id: pcic.c,v 1.23 2002/01/23 14:33:55 davem Exp $
* pcic.c:
Sparc/
PCI controller support
/*
* pcic.c:
MicroSPARC-IIep
PCI controller support
*
* Copyright (C) 1998 V. Roganov and G. Raiko
*
...
...
@@ -193,48 +193,26 @@ static void pci_do_settimeofday(struct timeval *tv);
#define CONFIG_CMD(bus, device_fn, where) (0x80000000 | (((unsigned int)bus) << 16) | (((unsigned int)device_fn) << 8) | (where & ~3))
static
int
pcic_read_config
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
siz
e
,
u32
*
value
)
static
int
pcic_read_config
_dword
(
unsigned
int
busno
,
unsigned
int
devfn
,
int
wher
e
,
u32
*
value
)
{
unsigned
int
v
;
unsigned
char
busnum
=
bus
->
number
;
struct
linux_pcic
*
pcic
;
unsigned
long
flags
;
/* unsigned char where; */
switch
(
size
)
{
case
1
:
pcic_read_config
(
bus
,
devfn
,
where
&~
3
,
4
,
&
v
);
*
value
=
0xff
&
(
v
>>
(
8
*
(
where
&
3
)));
return
PCIBIOS_SUCCESSFUL
;
break
;
case
2
:
if
(
where
&
1
)
return
PCIBIOS_BAD_REGISTER_NUMBER
;
pcic_read_config
(
bus
,
devfn
,
where
&~
3
,
4
,
&
v
);
*
value
=
0xffff
&
(
v
>>
(
8
*
(
where
&
3
)));
return
PCIBIOS_SUCCESSFUL
;
break
;
}
/* size == 4, i.e. dword */
if
(
where
&
3
)
return
PCIBIOS_BAD_REGISTER_NUMBER
;
if
(
busnum
!=
0
)
return
PCIBIOS_DEVICE_NOT_FOUND
;
pcic
=
&
pcic0
;
save_and_cli
(
flags
);
local_irq_save
(
flags
);
#if 0 /* does not fail here */
pcic_speculative = 1;
pcic_trapped = 0;
#endif
writel
(
CONFIG_CMD
(
busn
um
,
devfn
,
where
),
pcic
->
pcic_config_space_addr
);
writel
(
CONFIG_CMD
(
busn
o
,
devfn
,
where
),
pcic
->
pcic_config_space_addr
);
#if 0 /* does not fail here */
nop();
if (pcic_trapped) {
restore_flags
(flags);
local_irq_restore
(flags);
*value = ~0;
return
PCIBIOS_SUCCESSFUL
;
return
0
;
}
#endif
pcic_speculative
=
2
;
...
...
@@ -243,50 +221,77 @@ static int pcic_read_config(struct pci_bus *bus, unsigned int devfn,
nop
();
if
(
pcic_trapped
)
{
pcic_speculative
=
0
;
restore_flags
(
flags
);
local_irq_restore
(
flags
);
*
value
=
~
0
;
return
PCIBIOS_SUCCESSFUL
;
return
0
;
}
pcic_speculative
=
0
;
restore_flags
(
flags
);
return
PCIBIOS_SUCCESSFUL
;
local_irq_restore
(
flags
);
return
0
;
}
static
int
pcic_
write
_config
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
value
)
static
int
pcic_
read
_config
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
*
val
)
{
unsigned
int
v
;
unsigned
char
busnum
=
bus
->
number
;
struct
linux_pcic
*
pcic
;
unsigned
long
flags
;
if
(
bus
->
number
!=
0
)
return
-
EINVAL
;
switch
(
size
)
{
case
1
:
pcic_read_config
(
bus
,
devfn
,
where
&~
3
,
4
,
&
v
);
v
=
(
v
&
~
(
0xff
<<
(
8
*
(
where
&
3
))))
|
((
0xff
&
(
unsigned
)
value
)
<<
(
8
*
(
where
&
3
)));
return
pcic_write_config
(
bus
,
devfn
,
where
&~
3
,
4
,
v
);
break
;
pcic_read_config_dword
(
bus
->
number
,
devfn
,
where
&~
3
,
&
v
);
*
val
=
0xff
&
(
v
>>
(
8
*
(
where
&
3
)));
return
0
;
case
2
:
if
(
where
&
1
)
return
PCIBIOS_BAD_REGISTER_NUMBER
;
pcic_read_config
(
bus
,
devfn
,
where
&~
3
,
4
,
&
v
);
v
=
(
v
&
~
(
0xffff
<<
(
8
*
(
where
&
3
))))
|
((
0xffff
&
(
unsigned
)
value
)
<<
(
8
*
(
where
&
3
)));
return
pcic_write_config
(
bus
,
devfn
,
where
&~
3
,
4
,
v
);
break
;
if
(
where
&
1
)
return
-
EINVAL
;
pcic_read_config_dword
(
bus
->
number
,
devfn
,
where
&~
3
,
&
v
);
*
val
=
0xffff
&
(
v
>>
(
8
*
(
where
&
3
)));
return
0
;
case
4
:
if
(
where
&
3
)
return
-
EINVAL
;
pcic_read_config_dword
(
bus
->
number
,
devfn
,
where
&~
3
,
val
);
return
0
;
}
return
-
EINVAL
;
}
static
int
pcic_write_config_dword
(
unsigned
int
busno
,
unsigned
int
devfn
,
int
where
,
u32
value
)
{
struct
linux_pcic
*
pcic
;
unsigned
long
flags
;
/* size == 4, i.e. dword */
if
(
where
&
3
)
return
PCIBIOS_BAD_REGISTER_NUMBER
;
if
(
busnum
!=
0
)
return
PCIBIOS_DEVICE_NOT_FOUND
;
pcic
=
&
pcic0
;
save_and_cli
(
flags
);
writel
(
CONFIG_CMD
(
busn
um
,
devfn
,
where
),
pcic
->
pcic_config_space_addr
);
local_irq_save
(
flags
);
writel
(
CONFIG_CMD
(
busn
o
,
devfn
,
where
),
pcic
->
pcic_config_space_addr
);
writel
(
value
,
pcic
->
pcic_config_space_data
+
(
where
&
4
));
restore_flags
(
flags
);
return
PCIBIOS_SUCCESSFUL
;
local_irq_restore
(
flags
);
return
0
;
}
static
int
pcic_write_config
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
val
)
{
unsigned
int
v
;
if
(
bus
->
number
!=
0
)
return
-
EINVAL
;
switch
(
size
)
{
case
1
:
pcic_read_config_dword
(
bus
->
number
,
devfn
,
where
&~
3
,
&
v
);
v
=
(
v
&
~
(
0xff
<<
(
8
*
(
where
&
3
))))
|
((
0xff
&
val
)
<<
(
8
*
(
where
&
3
)));
return
pcic_write_config_dword
(
bus
->
number
,
devfn
,
where
&~
3
,
v
);
case
2
:
if
(
where
&
1
)
return
-
EINVAL
;
pcic_read_config_dword
(
bus
->
number
,
devfn
,
where
&~
3
,
&
v
);
v
=
(
v
&
~
(
0xffff
<<
(
8
*
(
where
&
3
))))
|
((
0xffff
&
val
)
<<
(
8
*
(
where
&
3
)));
return
pcic_write_config_dword
(
bus
->
number
,
devfn
,
where
&~
3
,
v
);
case
4
:
if
(
where
&
3
)
return
-
EINVAL
;
return
pcic_write_config_dword
(
bus
->
number
,
devfn
,
where
,
val
);
}
return
-
EINVAL
;
}
static
struct
pci_ops
pcic_ops
=
{
...
...
@@ -420,7 +425,7 @@ static void __init pcic_pbm_scan_bus(struct linux_pcic *pcic)
/*
* Main entry point from the PCI subsystem.
*/
static
int
__init
pci
bios
_init
(
void
)
static
int
__init
pci
c
_init
(
void
)
{
struct
linux_pcic
*
pcic
;
...
...
@@ -623,7 +628,7 @@ void __init pcibios_fixup_bus(struct pci_bus *bus)
{
struct
list_head
*
walk
;
int
i
,
has_io
,
has_mem
;
unsigned
shor
t
cmd
;
unsigned
in
t
cmd
;
struct
linux_pcic
*
pcic
;
/* struct linux_pbm_info* pbm = &pcic->pbm; */
int
node
;
...
...
@@ -663,19 +668,21 @@ void __init pcibios_fixup_bus(struct pci_bus *bus)
}
else
if
(
f
&
IORESOURCE_MEM
)
has_mem
=
1
;
}
pcic_read_config
_word
(
dev
,
PCI_COMMAND
,
&
cmd
);
pcic_read_config
(
dev
->
bus
,
dev
->
devfn
,
PCI_COMMAND
,
2
,
&
cmd
);
if
(
has_io
&&
!
(
cmd
&
PCI_COMMAND_IO
))
{
printk
(
"PCIC: Enabling I/O for device %02x:%02x
\n
"
,
dev
->
bus
->
number
,
dev
->
devfn
);
cmd
|=
PCI_COMMAND_IO
;
pcic_write_config_word
(
dev
,
PCI_COMMAND
,
cmd
);
pcic_write_config
(
dev
->
bus
,
dev
->
devfn
,
PCI_COMMAND
,
2
,
cmd
);
}
if
(
has_mem
&&
!
(
cmd
&
PCI_COMMAND_MEMORY
))
{
printk
(
"PCIC: Enabling memory for device %02x:%02x
\n
"
,
dev
->
bus
->
number
,
dev
->
devfn
);
cmd
|=
PCI_COMMAND_MEMORY
;
pcic_write_config_word
(
dev
,
PCI_COMMAND
,
cmd
);
}
pcic_write_config
(
dev
->
bus
,
dev
->
devfn
,
PCI_COMMAND
,
2
,
cmd
);
}
node
=
pdev_to_pnode
(
&
pcic
->
pbm
,
dev
);
if
(
node
==
0
)
...
...
@@ -791,7 +798,7 @@ static void pci_do_gettimeofday(struct timeval *tv)
{
unsigned
long
flags
;
save_and_cli
(
flags
);
local_irq_save
(
flags
);
*
tv
=
xtime
;
tv
->
tv_usec
+=
do_gettimeoffset
();
...
...
@@ -803,7 +810,7 @@ static void pci_do_gettimeofday(struct timeval *tv)
if
((
jiffies
-
wall_jiffies
)
!=
0
)
tv
->
tv_usec
+=
USECS_PER_JIFFY
;
restore_flags
(
flags
);
local_irq_restore
(
flags
);
if
(
tv
->
tv_usec
>=
1000000
)
{
tv
->
tv_usec
-=
1000000
;
...
...
@@ -813,7 +820,9 @@ static void pci_do_gettimeofday(struct timeval *tv)
static
void
pci_do_settimeofday
(
struct
timeval
*
tv
)
{
cli
();
unsigned
long
flags
;
local_irq_save
(
flags
);
tv
->
tv_usec
-=
do_gettimeoffset
();
if
(
tv
->
tv_usec
<
0
)
{
tv
->
tv_usec
+=
1000000
;
...
...
@@ -824,7 +833,7 @@ static void pci_do_settimeofday(struct timeval *tv)
time_status
|=
STA_UNSYNC
;
time_maxerror
=
NTP_PHASE_LIMIT
;
time_esterror
=
NTP_PHASE_LIMIT
;
sti
(
);
local_irq_restore
(
flags
);
}
#if 0
...
...
@@ -898,9 +907,9 @@ static void pcic_disable_irq(unsigned int irq_nr)
unsigned
long
mask
,
flags
;
mask
=
get_irqmask
(
irq_nr
);
save_and_cli
(
flags
);
local_irq_save
(
flags
);
writel
(
mask
,
pcic0
.
pcic_regs
+
PCI_SYS_INT_TARGET_MASK_SET
);
restore_flags
(
flags
);
local_irq_restore
(
flags
);
}
static
void
pcic_enable_irq
(
unsigned
int
irq_nr
)
...
...
@@ -908,9 +917,9 @@ static void pcic_enable_irq(unsigned int irq_nr)
unsigned
long
mask
,
flags
;
mask
=
get_irqmask
(
irq_nr
);
save_and_cli
(
flags
);
local_irq_save
(
flags
);
writel
(
mask
,
pcic0
.
pcic_regs
+
PCI_SYS_INT_TARGET_MASK_CLEAR
);
restore_flags
(
flags
);
local_irq_restore
(
flags
);
}
static
void
pcic_clear_profile_irq
(
int
cpu
)
...
...
@@ -1021,4 +1030,4 @@ void insl(unsigned long addr, void *dst, unsigned long count) {
#endif
subsys_initcall
(
pci
bios
_init
);
subsys_initcall
(
pci
c
_init
);
arch/sparc/kernel/process.c
View file @
225b563b
...
...
@@ -94,7 +94,7 @@ int cpu_idle(void)
extern
unsigned
long
sun4c_kernel_faults
;
extern
void
sun4c_grow_kernel_ring
(
void
);
save_and_cli
(
flags
);
local_irq_save
(
flags
);
now
=
jiffies
;
count
-=
(
now
-
last_jiffies
);
last_jiffies
=
now
;
...
...
@@ -110,7 +110,7 @@ int cpu_idle(void)
sun4c_grow_kernel_ring
();
}
}
restore_flags
(
flags
);
local_irq_restore
(
flags
);
}
while
((
!
need_resched
())
&&
pm_idle
)
{
...
...
@@ -144,8 +144,6 @@ int cpu_idle(void)
extern
char
reboot_command
[];
extern
int
serial_console
;
extern
void
(
*
prom_palette
)(
int
);
void
machine_halt
(
void
)
...
...
arch/sparc/kernel/setup.c
View file @
225b563b
...
...
@@ -34,7 +34,6 @@
#include <asm/segment.h>
#include <asm/system.h>
#include <asm/io.h>
#include <asm/kgdb.h>
#include <asm/processor.h>
#include <asm/oplib.h>
#include <asm/page.h>
...
...
@@ -67,8 +66,6 @@ struct screen_info screen_info = {
*/
extern
unsigned
long
trapbase
;
extern
int
serial_console
;
extern
void
breakpoint
(
void
);
void
(
*
prom_palette
)(
int
);
asmlinkage
void
sys_sync
(
void
);
/* it's really int */
...
...
@@ -105,28 +102,15 @@ void prom_sync_me(void)
return
;
}
extern
void
rs_kgdb_hook
(
int
tty_num
);
/* sparc/serial.c */
unsigned
int
boot_flags
__initdata
=
0
;
#define BOOTME_DEBUG 0x1
#define BOOTME_SINGLE 0x2
#define BOOTME_KGDBA 0x4
#define BOOTME_KGDBB 0x8
#define BOOTME_KGDB 0xc
static
int
console_fb
__initdata
=
0
;
/* Exported for mm/init.c:paging_init. */
unsigned
long
cmdline_memory_size
__initdata
=
0
;
void
kernel_enter_debugger
(
void
)
{
if
(
boot_flags
&
BOOTME_KGDB
)
{
printk
(
"KGDB: Entered
\n
"
);
breakpoint
();
}
}
static
void
prom_console_write
(
struct
console
*
con
,
const
char
*
s
,
unsigned
n
)
{
...
...
@@ -142,11 +126,6 @@ static struct console prom_debug_console = {
int
obp_system_intr
(
void
)
{
if
(
boot_flags
&
BOOTME_KGDB
)
{
printk
(
"KGDB: system interrupted
\n
"
);
breakpoint
();
return
1
;
}
if
(
boot_flags
&
BOOTME_DEBUG
)
{
printk
(
"OBP: system interrupted
\n
"
);
prom_halt
();
...
...
@@ -196,24 +175,6 @@ static void __init boot_flags_init(char *commands)
commands
++
;
while
(
*
commands
&&
*
commands
!=
' '
)
process_switch
(
*
commands
++
);
}
else
if
(
strlen
(
commands
)
>=
9
&&
!
strncmp
(
commands
,
"kgdb=tty"
,
8
))
{
switch
(
commands
[
8
])
{
#ifdef CONFIG_SUN_SERIAL
case
'a'
:
boot_flags
|=
BOOTME_KGDBA
;
prom_printf
(
"KGDB: Using serial line /dev/ttya.
\n
"
);
break
;
case
'b'
:
boot_flags
|=
BOOTME_KGDBB
;
prom_printf
(
"KGDB: Using serial line /dev/ttyb.
\n
"
);
break
;
#endif
default:
printk
(
"KGDB: Unknown tty line.
\n
"
);
break
;
}
commands
+=
9
;
}
else
{
if
(
!
strncmp
(
commands
,
"console="
,
8
))
{
commands
+=
8
;
...
...
@@ -378,65 +339,48 @@ void __init setup_arch(char **cmdline_p)
prom_setsync
(
prom_sync_me
);
{
#if !CONFIG_SUN_SERIAL
serial_console
=
0
;
#ifndef CONFIG_SERIAL_CONSOLE
/* Not CONFIG_SERIAL_SUNCORE: to be gone. */
serial_console
=
0
;
#else
switch
(
console_fb
)
{
case
0
:
/* Let get our io devices from prom */
{
int
idev
=
prom_query_input_device
();
int
odev
=
prom_query_output_device
();
if
(
idev
==
PROMDEV_IKBD
&&
odev
==
PROMDEV_OSCREEN
)
{
serial_console
=
0
;
}
else
if
(
idev
==
PROMDEV_ITTYA
&&
odev
==
PROMDEV_OTTYA
)
{
serial_console
=
1
;
}
else
if
(
idev
==
PROMDEV_ITTYB
&&
odev
==
PROMDEV_OTTYB
)
{
serial_console
=
2
;
}
else
if
(
idev
==
PROMDEV_I_UNK
&&
odev
==
PROMDEV_OTTYA
)
{
prom_printf
(
"MrCoffee ttya
\n
"
);
serial_console
=
1
;
}
else
if
(
idev
==
PROMDEV_I_UNK
&&
odev
==
PROMDEV_OSCREEN
)
{
serial_console
=
0
;
prom_printf
(
"MrCoffee keyboard
\n
"
);
}
else
{
prom_printf
(
"Inconsistent or unknown console
\n
"
);
prom_printf
(
"You cannot mix serial and non serial input/output devices
\n
"
);
prom_halt
();
}
switch
(
console_fb
)
{
case
0
:
/* Let get our io devices from prom */
{
int
idev
=
prom_query_input_device
();
int
odev
=
prom_query_output_device
();
if
(
idev
==
PROMDEV_IKBD
&&
odev
==
PROMDEV_OSCREEN
)
{
serial_console
=
0
;
}
else
if
(
idev
==
PROMDEV_ITTYA
&&
odev
==
PROMDEV_OTTYA
)
{
serial_console
=
1
;
}
else
if
(
idev
==
PROMDEV_ITTYB
&&
odev
==
PROMDEV_OTTYB
)
{
serial_console
=
2
;
}
else
if
(
idev
==
PROMDEV_I_UNK
&&
odev
==
PROMDEV_OTTYA
)
{
prom_printf
(
"MrCoffee ttya
\n
"
);
serial_console
=
1
;
}
else
if
(
idev
==
PROMDEV_I_UNK
&&
odev
==
PROMDEV_OSCREEN
)
{
serial_console
=
0
;
prom_printf
(
"MrCoffee keyboard
\n
"
);
}
else
{
prom_printf
(
"Inconsistent or unknown console
\n
"
);
prom_printf
(
"You cannot mix serial and non serial input/output devices
\n
"
);
prom_halt
();
}
break
;
case
1
:
serial_console
=
0
;
break
;
/* Force one of the framebuffers as console */
case
2
:
serial_console
=
1
;
break
;
/* Force ttya as console */
case
3
:
serial_console
=
2
;
break
;
/* Force ttyb as console */
}
#endif
}
if
((
boot_flags
&
BOOTME_KGDBA
))
{
rs_kgdb_hook
(
0
);
}
if
((
boot_flags
&
BOOTME_KGDBB
))
{
rs_kgdb_hook
(
1
);
break
;
case
1
:
serial_console
=
0
;
break
;
/* Force one of the framebuffers as console */
case
2
:
serial_console
=
1
;
break
;
/* Force ttya as console */
case
3
:
serial_console
=
2
;
break
;
/* Force ttyb as console */
}
#endif
if
((
boot_flags
&
BOOTME_DEBUG
)
&&
(
linux_dbvec
!=
0
)
&&
((
*
(
short
*
)
linux_dbvec
)
!=
-
1
))
{
printk
(
"Booted under KADB. Syncing trap table.
\n
"
);
(
*
(
linux_dbvec
->
teach_debugger
))();
}
if
((
boot_flags
&
BOOTME_KGDB
))
{
set_debug_traps
();
prom_printf
(
"Breakpoint!
\n
"
);
breakpoint
();
}
init_mm
.
context
=
(
unsigned
long
)
NO_CONTEXT
;
init_task
.
thread
.
kregs
=
&
fake_swapper_regs
;
if
(
serial_console
)
conswitchp
=
NULL
;
paging_init
();
}
...
...
@@ -514,3 +458,19 @@ struct seq_operations cpuinfo_op = {
.
stop
=
c_stop
,
.
show
=
show_cpuinfo
,
};
extern
int
stop_a_enabled
;
void
sun_do_break
(
void
)
{
if
(
!
stop_a_enabled
)
return
;
printk
(
"
\n
"
);
flush_user_windows
();
prom_cmdline
();
}
int
serial_console
;
int
stop_a_enabled
=
1
;
arch/sparc/kernel/sparc-stub.c
View file @
225b563b
...
...
@@ -188,22 +188,16 @@ static inline void copy_ttentry(struct tt_entry *src, struct tt_entry *dest)
/* Initialize the kgdb_savettable so that debugging can commence */
static
void
eh_init
(
void
)
{
int
i
,
flags
;
int
i
;
save_and_cli
(
flags
);
for
(
i
=
0
;
i
<
256
;
i
++
)
copy_ttentry
(
&
sparc_ttable
[
i
],
&
kgdb_savettable
[
i
]);
restore_flags
(
flags
);
}
/* Install an exception handler for kgdb */
static
void
exceptionHandler
(
int
tnum
,
trapfunc_t
trap_entry
)
{
unsigned
long
te_addr
=
(
unsigned
long
)
trap_entry
;
int
flags
;
/* We are dorking with a live trap table, all irqs off */
save_and_cli
(
flags
);
/* Make new vector */
sparc_ttable
[
tnum
].
inst_one
=
...
...
@@ -212,8 +206,6 @@ static void exceptionHandler(int tnum, trapfunc_t trap_entry)
sparc_ttable
[
tnum
].
inst_two
=
SPARC_RD_PSR_L0
;
sparc_ttable
[
tnum
].
inst_three
=
SPARC_NOP
;
sparc_ttable
[
tnum
].
inst_four
=
SPARC_NOP
;
restore_flags
(
flags
);
}
/* Convert ch from a hex digit to an int */
...
...
@@ -406,7 +398,7 @@ set_debug_traps(void)
struct
hard_trap_info
*
ht
;
unsigned
long
flags
;
save_and_cli
(
flags
);
local_irq_save
(
flags
);
#if 0
/* Have to sort this out. This cannot be done after initialization. */
BTFIXUPSET_CALL(flush_cache_all, flush_cache_all_nop, BTFIXUPCALL_NOP);
...
...
@@ -438,7 +430,7 @@ set_debug_traps(void)
#endif
initialized
=
1
;
/* connect! */
restore_flags
(
flags
);
local_irq_restore
(
flags
);
}
/* Convert the SPARC hardware trap type code to a unix signal number. */
...
...
arch/sparc/kernel/tadpole.c
View file @
225b563b
...
...
@@ -56,6 +56,9 @@ static void clk_slow(void)
"g2"
,
"g3"
,
"g4"
,
"g5"
);
}
/*
* Tadpole is guaranteed to be UP, using local_irq_save.
*/
static
void
tsu_clockstop
(
void
)
{
unsigned
int
mcsr
;
...
...
@@ -64,28 +67,28 @@ static void tsu_clockstop(void)
if
(
!
clk_ctrl
)
return
;
if
(
!
(
clk_state
&
CLOCK_INIT_DONE
))
{
save_and_cli
(
flags
);
local_irq_save
(
flags
);
clk_init
();
clk_state
|=
CLOCK_INIT_DONE
;
/* all done */
restore_flags
(
flags
);
local_irq_restore
(
flags
);
return
;
}
if
(
!
(
clk_ctrl
[
2
]
&
1
))
return
;
/* no speed up yet */
save_and_cli
(
flags
);
local_irq_save
(
flags
);
/* if SCSI DMA in progress, don't slow clock */
mcsr
=
ldphys
(
MACIO_SCSI_CSR_ADDR
);
if
((
mcsr
&
MACIO_EN_DMA
)
!=
0
)
{
restore_flags
(
flags
);
local_irq_restore
(
flags
);
return
;
}
/* TODO... the minimum clock setting ought to increase the
* memory refresh interval..
*/
clk_slow
();
restore_flags
(
flags
);
local_irq_restore
(
flags
);
}
static
void
swift_clockstop
(
void
)
...
...
arch/sparc/kernel/tick14.c
View file @
225b563b
...
...
@@ -29,32 +29,30 @@ extern unsigned long lvl14_save[5];
static
unsigned
long
*
linux_lvl14
=
NULL
;
static
unsigned
long
obp_lvl14
[
4
];
/*
* Call with timer IRQ closed.
* First time we do it with disable_irq, later prom code uses spin_lock_irq().
*/
void
install_linux_ticker
(
void
)
{
unsigned
long
flags
;
if
(
!
linux_lvl14
)
return
;
save_and_cli
(
flags
);
linux_lvl14
[
0
]
=
lvl14_save
[
0
];
linux_lvl14
[
1
]
=
lvl14_save
[
1
];
linux_lvl14
[
2
]
=
lvl14_save
[
2
];
linux_lvl14
[
3
]
=
lvl14_save
[
3
];
restore_flags
(
flags
);
}
void
install_obp_ticker
(
void
)
{
unsigned
long
flags
;
if
(
!
linux_lvl14
)
return
;
save_and_cli
(
flags
);
linux_lvl14
[
0
]
=
obp_lvl14
[
0
];
linux_lvl14
[
1
]
=
obp_lvl14
[
1
];
linux_lvl14
[
2
]
=
obp_lvl14
[
2
];
linux_lvl14
[
3
]
=
obp_lvl14
[
3
];
restore_flags
(
flags
);
}
void
claim_ticker14
(
void
(
*
handler
)(
int
,
void
*
,
struct
pt_regs
*
),
...
...
arch/sparc/kernel/unaligned.c
View file @
225b563b
...
...
@@ -506,9 +506,18 @@ asmlinkage void user_unaligned_trap(struct pt_regs *regs, unsigned int insn)
break
;
case
both
:
#if 0 /* unsupported */
do_atomic(fetch_reg_addr(((insn>>25)&0x1f), regs),
(unsigned long *) addr,
user_unaligned_trap_fault);
#else
/*
* This was supported in 2.4. However, we question
* the value of SWAP instruction across word boundaries.
*/
printk
(
"Unaligned SWAP unsupported.
\n
"
);
goto
kill_user
;
#endif
break
;
default:
...
...
arch/sparc/mm/srmmu.c
View file @
225b563b
...
...
@@ -1212,7 +1212,6 @@ extern int linux_num_cpus;
void
(
*
poke_srmmu
)(
void
)
__initdata
=
NULL
;
extern
unsigned
long
bootmem_init
(
unsigned
long
*
pages_avail
);
extern
void
sun_serial_setup
(
void
);
void
__init
srmmu_paging_init
(
void
)
{
...
...
@@ -1281,13 +1280,6 @@ void __init srmmu_paging_init(void)
flush_cache_all
();
flush_tlb_all
();
/*
* This does not logically belong here, but we need to
* call it at the moment we are able to use the bootmem
* allocator.
*/
sun_serial_setup
();
sparc_context_init
(
num_contexts
);
kmap_init
();
...
...
arch/sparc/mm/sun4c.c
View file @
225b563b
...
...
@@ -2001,7 +2001,6 @@ extern void sparc_context_init(int);
extern
unsigned
long
end
;
extern
unsigned
long
bootmem_init
(
unsigned
long
*
pages_avail
);
extern
unsigned
long
last_valid_pfn
;
extern
void
sun_serial_setup
(
void
);
void
__init
sun4c_paging_init
(
void
)
{
...
...
@@ -2018,12 +2017,6 @@ void __init sun4c_paging_init(void)
last_valid_pfn
=
bootmem_init
(
&
pages_avail
);
end_pfn
=
last_valid_pfn
;
/* This does not logically belong here, but we need to
* call it at the moment we are able to use the bootmem
* allocator.
*/
sun_serial_setup
();
sun4c_probe_mmu
();
invalid_segment
=
(
num_segmaps
-
1
);
sun4c_init_mmu_entry_pool
();
...
...
arch/sparc/prom/misc.c
View file @
225b563b
...
...
@@ -12,6 +12,7 @@
#include <asm/openprom.h>
#include <asm/oplib.h>
#include <asm/auxio.h>
#include <asm/system.h>
extern
void
restore_current
(
void
);
...
...
@@ -47,7 +48,6 @@ prom_feval(char *fstring)
/* We want to do this more nicely some day. */
extern
void
(
*
prom_palette
)(
int
);
extern
int
serial_console
;
/* Drop into the prom, with the chance to continue with the 'go'
* prom command.
...
...
@@ -55,20 +55,18 @@ extern int serial_console;
void
prom_cmdline
(
void
)
{
extern
void
kernel_enter_debugger
(
void
);
extern
void
install_obp_ticker
(
void
);
extern
void
install_linux_ticker
(
void
);
unsigned
long
flags
;
kernel_enter_debugger
();
if
(
!
serial_console
&&
prom_palette
)
prom_palette
(
1
);
install_obp_ticker
();
spin_lock_irqsave
(
&
prom_lock
,
flags
);
install_obp_ticker
();
(
*
(
romvec
->
pv_abort
))();
restore_current
();
spin_unlock_irqrestore
(
&
prom_lock
,
flags
);
install_linux_ticker
();
spin_unlock_irqrestore
(
&
prom_lock
,
flags
);
#ifdef CONFIG_SUN_AUXIO
TURN_ON_LED
;
#endif
...
...
arch/sparc64/kernel/power.c
View file @
225b563b
...
...
@@ -11,6 +11,7 @@
#include <linux/signal.h>
#include <linux/delay.h>
#include <asm/system.h>
#include <asm/ebus.h>
#define __KERNEL_SYSCALLS__
...
...
@@ -37,8 +38,6 @@ extern void machine_halt(void);
extern
void
machine_alt_power_off
(
void
);
static
void
(
*
poweroff_method
)(
void
)
=
machine_alt_power_off
;
extern
int
serial_console
;
void
machine_power_off
(
void
)
{
if
(
!
serial_console
)
{
...
...
arch/sparc64/kernel/process.c
View file @
225b563b
...
...
@@ -110,7 +110,6 @@ int cpu_idle(void)
extern
char
reboot_command
[];
extern
void
(
*
prom_palette
)(
int
);
extern
int
serial_console
;
extern
void
(
*
prom_keyboard
)(
void
);
void
machine_halt
(
void
)
...
...
arch/sparc64/kernel/setup.c
View file @
225b563b
...
...
@@ -314,12 +314,9 @@ int prom_callback(long *args)
return
0
;
}
extern
void
rs_kgdb_hook
(
int
tty_num
);
/* sparc/serial.c */
unsigned
int
boot_flags
=
0
;
#define BOOTME_DEBUG 0x1
#define BOOTME_SINGLE 0x2
#define BOOTME_KGDB 0x4
static
int
console_fb
__initdata
=
0
;
...
...
@@ -389,26 +386,6 @@ static void __init boot_flags_init(char *commands)
commands
++
;
while
(
*
commands
&&
*
commands
!=
' '
)
process_switch
(
*
commands
++
);
}
else
if
(
strlen
(
commands
)
>=
9
&&
!
strncmp
(
commands
,
"kgdb=tty"
,
8
))
{
boot_flags
|=
BOOTME_KGDB
;
switch
(
commands
[
8
])
{
#ifdef CONFIG_SUN_SERIAL
case
'a'
:
rs_kgdb_hook
(
0
);
prom_printf
(
"KGDB: Using serial line /dev/ttya.
\n
"
);
break
;
case
'b'
:
rs_kgdb_hook
(
1
);
prom_printf
(
"KGDB: Using serial line /dev/ttyb.
\n
"
);
break
;
#endif
default:
printk
(
"KGDB: Unknown tty line.
\n
"
);
boot_flags
&=
~
BOOTME_KGDB
;
break
;
}
commands
+=
9
;
}
else
{
if
(
!
strncmp
(
commands
,
"console="
,
8
))
{
commands
+=
8
;
...
...
@@ -484,7 +461,6 @@ extern void paging_init(void);
void
__init
setup_arch
(
char
**
cmdline_p
)
{
extern
int
serial_console
;
/* in console.c, of course */
unsigned
long
highest_paddr
;
int
i
;
...
...
@@ -568,7 +544,6 @@ void __init setup_arch(char **cmdline_p)
}
#endif
#ifdef CONFIG_SUN_SERIAL
switch
(
console_fb
)
{
case
0
:
/* Let's get our io devices from prom */
{
...
...
@@ -597,10 +572,7 @@ void __init setup_arch(char **cmdline_p)
case
3
:
/* Force ttyb as console */
serial_console
=
2
;
break
;
}
#else
serial_console
=
0
;
#endif
};
if
(
serial_console
)
conswitchp
=
NULL
;
...
...
arch/sparc64/mm/init.c
View file @
225b563b
...
...
@@ -1515,14 +1515,6 @@ void __init paging_init(void)
pages_avail
=
0
;
last_valid_pfn
=
end_pfn
=
bootmem_init
(
&
pages_avail
);
#ifdef CONFIG_SUN_SERIAL
/* This does not logically belong here, but we need to
* call it at the moment we are able to use the bootmem
* allocator.
*/
sun_serial_setup
();
#endif
/* Inherit non-locked OBP mappings. */
inherit_prom_mappings
();
...
...
arch/sparc64/prom/misc.c
View file @
225b563b
...
...
@@ -14,6 +14,7 @@
#include <linux/delay.h>
#include <asm/openprom.h>
#include <asm/oplib.h>
#include <asm/system.h>
/* Reset and reboot the machine with the command 'bcommand'. */
void
prom_reboot
(
char
*
bcommand
)
...
...
@@ -33,7 +34,6 @@ void prom_feval(char *fstring)
/* We want to do this more nicely some day. */
extern
void
(
*
prom_palette
)(
int
);
extern
int
serial_console
;
#ifdef CONFIG_SMP
extern
void
smp_capture
(
void
);
...
...
drivers/serial/sunsu.c
View file @
225b563b
...
...
@@ -34,6 +34,7 @@
#include <linux/serio.h>
#endif
#include <linux/init.h>
#include <linux/delay.h>
#include <asm/io.h>
#include <asm/irq.h>
...
...
@@ -1019,6 +1020,8 @@ static void sunsu_autoconfig(struct uart_sunsu_port *up)
if
(
!
up
->
port_node
||
!
up
->
su_type
)
return
;
up
->
port
.
iotype
=
SERIAL_IO_MEM
;
/*
* First we look for Ebus-bases su's
*/
...
...
drivers/serial/sunzilog.c
View file @
225b563b
...
...
@@ -382,13 +382,6 @@ static void sunzilog_receive_chars(struct uart_sunzilog_port *up,
sun_do_break
();
return
;
}
#ifndef CONFIG_SPARC64
/* Look for kgdb 'stop' character. */
if
(
ZS_IS_KGDB
(
up
)
&&
(
ch
==
'\003'
))
{
breakpoint
();
return
;
}
#endif
/* A real serial line, record the character and status. */
*
tty
->
flip
.
char_buf_ptr
=
ch
;
...
...
@@ -1152,11 +1145,11 @@ static struct zilog_layout * __init get_zs_sun4u(int chip)
static
struct
zilog_layout
*
__init
get_zs_sun4cmd
(
int
chip
)
{
struct
linux_prom_irqs
irq_info
[
2
];
unsigned
long
mapped_addr
;
int
zsnode
,
chipid
,
cpunode
;
unsigned
long
mapped_addr
=
0
;
int
zsnode
,
chipid
,
cpunode
,
bbnode
;
if
(
sparc_cpu_model
==
sun4d
)
{
int
bbnode
,
walk
,
no
;
int
walk
,
no
;
zsnode
=
0
;
bbnode
=
0
;
...
...
@@ -1249,7 +1242,7 @@ static struct zilog_layout * __init get_zs_sun4cmd(int chip)
}
else
if
(
zilog_irq
!=
irq_info
[
0
].
pri
)
{
prom_printf
(
"SunZilog: Inconsistent IRQ layout for Zilog %d.
\n
"
,
chip
);
prom
t
_halt
();
prom_halt
();
}
break
;
}
...
...
@@ -1290,7 +1283,7 @@ static struct zilog_layout * __init get_zs(int chip)
zilog_irq
=
12
;
res
.
end
=
(
res
.
start
+
(
8
-
1
));
res
.
flags
=
IORESOURCE_IO
;
return
sbus_ioremap
(
&
res
,
0
,
8
,
"SunZilog"
);
return
(
struct
zilog_layout
*
)
sbus_ioremap
(
&
res
,
0
,
8
,
"SunZilog"
);
}
return
get_zs_sun4cmd
(
chip
);
...
...
@@ -1649,13 +1642,10 @@ static int __init sunzilog_init(void)
/* Sun4 Zilog setup is hard coded, no probing to do. */
if
(
sparc_cpu_model
==
sun4
)
{
NUM_SUNZILOG
=
2
;
goto
no_probe
;
}
node
=
prom_getchild
(
prom_root_node
);
if
(
sparc_cpu_model
==
sun4d
)
{
}
else
if
(
sparc_cpu_model
==
sun4d
)
{
int
bbnode
;
node
=
prom_getchild
(
prom_root_node
);
NUM_SUNZILOG
=
0
;
while
(
node
&&
(
node
=
prom_searchsiblings
(
node
,
"cpu-unit"
)))
{
...
...
@@ -1664,7 +1654,6 @@ static int __init sunzilog_init(void)
NUM_SUNZILOG
+=
2
;
node
=
prom_getsibling
(
node
);
}
goto
no_probe
;
}
else
if
(
sparc_cpu_model
==
sun4u
)
{
int
central_node
;
...
...
@@ -1675,27 +1664,28 @@ static int __init sunzilog_init(void)
if
(
central_node
!=
0
&&
central_node
!=
-
1
)
node
=
prom_searchsiblings
(
prom_getchild
(
central_node
),
"fhc"
);
else
node
=
prom_searchsiblings
(
node
,
"sbus"
);
node
=
prom_searchsiblings
(
prom_getchild
(
prom_root_node
)
,
"sbus"
);
if
(
node
!=
0
&&
node
!=
-
1
)
node
=
prom_getchild
(
node
);
if
(
node
==
0
||
node
==
-
1
)
return
-
ENODEV
;
node
=
prom_searchsiblings
(
node
,
"zs"
);
if
(
!
node
)
return
-
ENODEV
;
NUM_SUNZILOG
=
2
;
}
else
{
node
=
prom_getchild
(
prom_root_node
);
node
=
prom_searchsiblings
(
node
,
"obio"
);
if
(
node
)
node
=
prom_getchild
(
node
);
if
(
!
node
)
return
-
ENODEV
;
NUM_SUNZILOG
=
2
;
goto
no_probe
;
}
node
=
prom_searchsiblings
(
node
,
"zs"
);
if
(
!
node
)
return
-
ENODEV
;
NUM_SUNZILOG
=
2
;
no_probe:
sunzilog_alloc_tables
();
sunzilog_ports_init
();
...
...
include/asm-sparc/hardirq.h
View file @
225b563b
...
...
@@ -121,7 +121,7 @@ do { \
#ifndef CONFIG_SMP
#define synchronize_irq() barrier()
#define synchronize_irq(
irq
) barrier()
#else
/* (CONFIG_SMP) */
...
...
include/asm-sparc/irq.h
View file @
225b563b
...
...
@@ -21,6 +21,8 @@ BTFIXUPDEF_CALL(char *, __irq_itoa, unsigned int)
#define NR_IRQS 15
#define irq_cannonicalize(irq) (irq)
/* Dave Redman (djhr@tadpole.co.uk)
* changed these to function pointers.. it saves cycles and will allow
* the irq dependencies to be split into different files at a later date
...
...
include/asm-sparc/kmap_types.h
View file @
225b563b
...
...
@@ -11,6 +11,8 @@ enum km_type {
KM_BIO_DST_IRQ
,
KM_PTE0
,
KM_PTE1
,
KM_IRQ0
,
KM_IRQ1
,
KM_TYPE_NR
};
...
...
include/asm-sparc/system.h
View file @
225b563b
...
...
@@ -56,6 +56,17 @@ extern unsigned long empty_zero_page;
extern
struct
linux_romvec
*
romvec
;
#define halt() romvec->pv_halt()
extern
void
sun_do_break
(
void
);
extern
int
serial_console
;
extern
int
stop_a_enabled
;
static
__inline__
int
con_is_present
(
void
)
{
return
serial_console
?
0
:
1
;
}
extern
struct
pt_regs
*
kbd_pt_regs
;
/* When a context switch happens we must flush all user windows so that
* the windows of the current process are flushed onto its stack. This
* way the windows are all clean for the next process and the stack
...
...
@@ -113,6 +124,7 @@ extern void fpsave(unsigned long *fpregs, unsigned long *fsr,
"restore; restore; restore; restore; restore; restore; restore"); \
} while(0)
#define finish_arch_switch(rq, next) do{ }while(0)
#define task_running(rq, p) ((rq)->curr == (p))
/* Much care has gone into this code, do not touch it.
*
...
...
@@ -282,9 +294,6 @@ extern void __global_restore_flags(unsigned long flags);
#define cli() local_irq_disable()
#define sti() local_irq_enable()
#define save_flags(x) local_save_flags(x)
#define restore_flags(x) local_irq_restore(x)
#define save_and_cli(x) local_irq_save(x)
#endif
...
...
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