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
c730f5b6
Commit
c730f5b6
authored
Oct 04, 2006
by
Paul Mackerras
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
git://oak/home/sfr/kernels/iseries/work
parents
0a730ae5
80a544ce
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
201 additions
and
100 deletions
+201
-100
arch/powerpc/Kconfig
arch/powerpc/Kconfig
+4
-4
arch/powerpc/kernel/entry_64.S
arch/powerpc/kernel/entry_64.S
+12
-6
arch/powerpc/kernel/head_64.S
arch/powerpc/kernel/head_64.S
+25
-3
arch/powerpc/kernel/misc_64.S
arch/powerpc/kernel/misc_64.S
+46
-0
arch/powerpc/kernel/pci_64.c
arch/powerpc/kernel/pci_64.c
+30
-28
arch/powerpc/kernel/vmlinux.lds.S
arch/powerpc/kernel/vmlinux.lds.S
+8
-0
arch/powerpc/mm/pgtable_64.c
arch/powerpc/mm/pgtable_64.c
+7
-22
arch/powerpc/mm/slb_low.S
arch/powerpc/mm/slb_low.S
+3
-0
arch/powerpc/platforms/iseries/pci.c
arch/powerpc/platforms/iseries/pci.c
+0
-8
arch/powerpc/platforms/iseries/setup.c
arch/powerpc/platforms/iseries/setup.c
+13
-3
drivers/char/hvc_iseries.c
drivers/char/hvc_iseries.c
+6
-2
drivers/char/hvc_vio.c
drivers/char/hvc_vio.c
+4
-0
include/asm-powerpc/firmware.h
include/asm-powerpc/firmware.h
+43
-24
No files found.
arch/powerpc/Kconfig
View file @
c730f5b6
...
...
@@ -338,10 +338,6 @@ config PPC_MULTIPLATFORM
RS/6000 machine, an Apple machine, or a PReP, CHRP,
Maple or Cell-based machine.
config PPC_ISERIES
bool "IBM Legacy iSeries"
depends on PPC64
config EMBEDDED6xx
bool "Embedded 6xx/7xx/7xxx-based board"
depends on PPC32 && (BROKEN||BROKEN_ON_SMP)
...
...
@@ -365,6 +361,10 @@ config PPC_PSERIES
select PPC_UDBG_16550
default y
config PPC_ISERIES
bool "IBM Legacy iSeries"
depends on PPC_MULTIPLATFORM && PPC64
config PPC_CHRP
bool "Common Hardware Reference Platform (CHRP) based machines"
depends on PPC_MULTIPLATFORM && PPC32
...
...
arch/powerpc/kernel/entry_64.S
View file @
c730f5b6
...
...
@@ -27,10 +27,7 @@
#include <asm/ppc_asm.h>
#include <asm/asm-offsets.h>
#include <asm/cputable.h>
#ifdef CONFIG_PPC_ISERIES
#define DO_SOFT_DISABLE
#endif
#include <asm/firmware.h>
/*
*
System
calls
.
...
...
@@ -91,6 +88,7 @@ system_call_common:
ld
r11
,
exception_marker
@
toc
(
r2
)
std
r11
,-
16
(
r9
)
/*
"regshere"
marker
*/
#ifdef CONFIG_PPC_ISERIES
BEGIN_FW_FTR_SECTION
/
*
Hack
for
handling
interrupts
when
soft
-
enabling
on
iSeries
*/
cmpdi
cr1
,
r0
,
0x5555
/*
syscall
0x5555
*/
andi
.
r10
,
r12
,
MSR_PR
/*
from
kernel
*/
...
...
@@ -98,6 +96,7 @@ system_call_common:
beq
hardware_interrupt_entry
lbz
r10
,
PACAPROCENABLED
(
r13
)
std
r10
,
SOFTE
(
r1
)
END_FW_FTR_SECTION_IFSET
(
FW_FEATURE_ISERIES
)
#endif
mfmsr
r11
ori
r11
,
r11
,
MSR_EE
...
...
@@ -462,6 +461,7 @@ _GLOBAL(ret_from_except_lite)
restore
:
#ifdef CONFIG_PPC_ISERIES
BEGIN_FW_FTR_SECTION
ld
r5
,
SOFTE
(
r1
)
cmpdi
0
,
r5
,
0
beq
4
f
...
...
@@ -480,6 +480,7 @@ restore:
b
.
ret_from_except_lite
/*
loop
back
and
handle
more
*/
4
:
stb
r5
,
PACAPROCENABLED
(
r13
)
END_FW_FTR_SECTION_IFSET
(
FW_FEATURE_ISERIES
)
#endif
ld
r3
,
_MSR
(
r1
)
...
...
@@ -538,18 +539,23 @@ do_work:
lwz
r8
,
TI_PREEMPT
(
r9
)
cmpwi
cr1
,
r8
,
0
#ifdef CONFIG_PPC_ISERIES
BEGIN_FW_FTR_SECTION
ld
r0
,
SOFTE
(
r1
)
cmpdi
r0
,
0
#else
andi
.
r0
,
r3
,
MSR_EE
END_FW_FTR_SECTION_IFSET
(
FW_FEATURE_ISERIES
)
#endif
BEGIN_FW_FTR_SECTION
andi
.
r0
,
r3
,
MSR_EE
END_FW_FTR_SECTION_IFCLR
(
FW_FEATURE_ISERIES
)
crandc
eq
,
cr1
*
4
+
eq
,
eq
bne
restore
/
*
here
we
are
preempting
the
current
task
*/
1
:
#ifdef CONFIG_PPC_ISERIES
BEGIN_FW_FTR_SECTION
li
r0
,
1
stb
r0
,
PACAPROCENABLED
(
r13
)
END_FW_FTR_SECTION_IFSET
(
FW_FEATURE_ISERIES
)
#endif
ori
r10
,
r10
,
MSR_EE
mtmsrd
r10
,
1
/*
reenable
interrupts
*/
...
...
arch/powerpc/kernel/head_64.S
View file @
c730f5b6
...
...
@@ -33,6 +33,7 @@
#include <asm/hvcall.h>
#include <asm/iseries/lpar_map.h>
#include <asm/thread_info.h>
#include <asm/firmware.h>
#ifdef CONFIG_PPC_ISERIES
#define DO_SOFT_DISABLE
...
...
@@ -365,19 +366,28 @@ label##_iSeries: \
#ifdef DO_SOFT_DISABLE
#define DISABLE_INTS \
BEGIN_FW_FTR_SECTION
; \
lbz
r10
,
PACAPROCENABLED
(
r13
)
; \
li
r11
,
0
; \
std
r10
,
SOFTE
(
r1
)
; \
mfmsr
r10
; \
stb
r11
,
PACAPROCENABLED
(
r13
)
; \
ori
r10
,
r10
,
MSR_EE
; \
mtmsrd
r10
,
1
mtmsrd
r10
,
1
; \
END_FW_FTR_SECTION_IFSET
(
FW_FEATURE_ISERIES
)
#define ENABLE_INTS \
BEGIN_FW_FTR_SECTION
; \
lbz
r10
,
PACAPROCENABLED
(
r13
)
; \
mfmsr
r11
; \
std
r10
,
SOFTE
(
r1
)
; \
ori
r11
,
r11
,
MSR_EE
; \
END_FW_FTR_SECTION_IFSET
(
FW_FEATURE_ISERIES
)
; \
BEGIN_FW_FTR_SECTION
; \
ld
r12
,
_MSR
(
r1
)
; \
mfmsr
r11
; \
rlwimi
r11
,
r12
,
0
,
MSR_EE
; \
END_FW_FTR_SECTION_IFCLR
(
FW_FEATURE_ISERIES
)
; \
mtmsrd
r11
,
1
#else /* hard enable/disable interrupts */
...
...
@@ -1071,8 +1081,10 @@ _GLOBAL(slb_miss_realmode)
ld
r3
,
PACA_EXSLB
+
EX_R3
(
r13
)
lwz
r9
,
PACA_EXSLB
+
EX_CCR
(
r13
)
/*
get
saved
CR
*/
#ifdef CONFIG_PPC_ISERIES
BEGIN_FW_FTR_SECTION
ld
r11
,
PACALPPACAPTR
(
r13
)
ld
r11
,
LPPACASRR0
(
r11
)
/*
get
SRR0
value
*/
END_FW_FTR_SECTION_IFSET
(
FW_FEATURE_ISERIES
)
#endif /* CONFIG_PPC_ISERIES */
mtlr
r10
...
...
@@ -1087,8 +1099,10 @@ _GLOBAL(slb_miss_realmode)
.
machine
pop
#ifdef CONFIG_PPC_ISERIES
BEGIN_FW_FTR_SECTION
mtspr
SPRN_SRR0
,
r11
mtspr
SPRN_SRR1
,
r12
END_FW_FTR_SECTION_IFSET
(
FW_FEATURE_ISERIES
)
#endif /* CONFIG_PPC_ISERIES */
ld
r9
,
PACA_EXSLB
+
EX_R9
(
r13
)
ld
r10
,
PACA_EXSLB
+
EX_R10
(
r13
)
...
...
@@ -1301,6 +1315,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_SLB)
cmpdi
r3
,
0
/*
see
if
hash_page
succeeded
*/
#ifdef DO_SOFT_DISABLE
BEGIN_FW_FTR_SECTION
/
*
*
If
we
had
interrupts
soft
-
enabled
at
the
point
where
the
*
DSI
/
ISI
occurred
,
and
an
interrupt
came
in
during
hash_page
,
...
...
@@ -1321,12 +1336,14 @@ END_FTR_SECTION_IFCLR(CPU_FTR_SLB)
ld
r3
,
SOFTE
(
r1
)
bl
.
local_irq_restore
b
11
f
#else
END_FW_FTR_SECTION_IFSET
(
FW_FEATURE_ISERIES
)
#endif
BEGIN_FW_FTR_SECTION
beq
fast_exception_return
/*
Return
from
exception
on
success
*/
ble
-
12
f
/*
Failure
return
from
hash_page
*/
/
*
fall
through
*/
#endif
END_FW_FTR_SECTION_IFCLR
(
FW_FEATURE_ISERIES
)
/*
Here
we
have
a
page
fault
that
hash_page
can
't handle. */
_GLOBAL
(
handle_page_fault
)
...
...
@@ -1861,7 +1878,9 @@ _GLOBAL(__secondary_start)
LOAD_REG_ADDR
(
r3
,
.
start_secondary_prolog
)
LOAD_REG_IMMEDIATE
(
r4
,
MSR_KERNEL
)
#ifdef DO_SOFT_DISABLE
BEGIN_FW_FTR_SECTION
ori
r4
,
r4
,
MSR_EE
END_FW_FTR_SECTION_IFSET
(
FW_FEATURE_ISERIES
)
#endif
mtspr
SPRN_SRR0
,
r3
mtspr
SPRN_SRR1
,
r4
...
...
@@ -1986,6 +2005,7 @@ _STATIC(start_here_common)
*/
li
r3
,
0
bl
.
do_cpu_ftr_fixups
bl
.
do_fw_ftr_fixups
/
*
ptr
to
current
*/
LOAD_REG_IMMEDIATE
(
r4
,
init_task
)
...
...
@@ -2000,11 +2020,13 @@ _STATIC(start_here_common)
/
*
Load
up
the
kernel
context
*/
5
:
#ifdef DO_SOFT_DISABLE
BEGIN_FW_FTR_SECTION
li
r5
,
0
stb
r5
,
PACAPROCENABLED
(
r13
)
/*
Soft
Disabled
*/
mfmsr
r5
ori
r5
,
r5
,
MSR_EE
/*
Hard
Enabled
*/
mtmsrd
r5
END_FW_FTR_SECTION_IFSET
(
FW_FEATURE_ISERIES
)
#endif
bl
.
start_kernel
...
...
arch/powerpc/kernel/misc_64.S
View file @
c730f5b6
...
...
@@ -325,6 +325,52 @@ _GLOBAL(do_cpu_ftr_fixups)
isync
b
1
b
/*
*
do_fw_ftr_fixups
-
goes
through
the
list
of
firmware
feature
fixups
*
and
writes
nop
's over sections of code that don'
t
apply
for
this
firmware
.
*
r3
=
data
offset
(
not
changed
)
*/
_GLOBAL
(
do_fw_ftr_fixups
)
/
*
Get
firmware
features
*/
LOAD_REG_IMMEDIATE
(
r6
,
powerpc_firmware_features
)
sub
r6
,
r6
,
r3
ld
r4
,
0
(
r6
)
/
*
Get
the
fixup
table
*/
LOAD_REG_IMMEDIATE
(
r6
,
__start___fw_ftr_fixup
)
sub
r6
,
r6
,
r3
LOAD_REG_IMMEDIATE
(
r7
,
__stop___fw_ftr_fixup
)
sub
r7
,
r7
,
r3
/
*
Do
the
fixup
*/
1
:
cmpld
r6
,
r7
bgelr
addi
r6
,
r6
,
32
ld
r8
,-
32
(
r6
)
/*
mask
*/
and
r8
,
r8
,
r4
ld
r9
,-
24
(
r6
)
/*
value
*/
cmpld
r8
,
r9
beq
1
b
ld
r8
,-
16
(
r6
)
/*
section
begin
*/
ld
r9
,-
8
(
r6
)
/*
section
end
*/
subf
.
r9
,
r8
,
r9
beq
1
b
/
*
write
nops
over
the
section
of
code
*/
/
*
todo
:
if
large
section
,
add
a
branch
at
the
start
of
it
*/
srwi
r9
,
r9
,
2
mtctr
r9
sub
r8
,
r8
,
r3
lis
r0
,
0x60000000
@
h
/*
nop
*/
3
:
stw
r0
,
0
(
r8
)
BEGIN_FTR_SECTION
dcbst
0
,
r8
/*
suboptimal
,
but
simpler
*/
sync
icbi
0
,
r8
END_FTR_SECTION_IFSET
(
CPU_FTR_SPLIT_ID_CACHE
)
addi
r8
,
r8
,
4
bdnz
3
b
sync
/*
additional
sync
needed
on
g4
*/
isync
b
1
b
#if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_MAPLE)
/*
*
Do
an
IO
access
in
real
mode
...
...
arch/powerpc/kernel/pci_64.c
View file @
c730f5b6
...
...
@@ -30,6 +30,7 @@
#include <asm/byteorder.h>
#include <asm/machdep.h>
#include <asm/ppc-pci.h>
#include <asm/firmware.h>
#ifdef DEBUG
#include <asm/udbg.h>
...
...
@@ -209,7 +210,6 @@ void pcibios_free_controller(struct pci_controller *phb)
kfree
(
phb
);
}
#ifndef CONFIG_PPC_ISERIES
void
__devinit
pcibios_claim_one_bus
(
struct
pci_bus
*
b
)
{
struct
pci_dev
*
dev
;
...
...
@@ -238,10 +238,12 @@ static void __init pcibios_claim_of_setup(void)
{
struct
pci_bus
*
b
;
if
(
firmware_has_feature
(
FW_FEATURE_ISERIES
))
return
;
list_for_each_entry
(
b
,
&
pci_root_buses
,
node
)
pcibios_claim_one_bus
(
b
);
}
#endif
#ifdef CONFIG_PPC_MULTIPLATFORM
static
u32
get_int_prop
(
struct
device_node
*
np
,
const
char
*
name
,
u32
def
)
...
...
@@ -554,9 +556,8 @@ static int __init pcibios_init(void)
*/
ppc_md
.
phys_mem_access_prot
=
pci_phys_mem_access_prot
;
#ifdef CONFIG_PPC_ISERIES
iSeries_pcibios_init
();
#endif
if
(
firmware_has_feature
(
FW_FEATURE_ISERIES
))
iSeries_pcibios_init
();
printk
(
KERN_DEBUG
"PCI: Probing PCI hardware
\n
"
);
...
...
@@ -566,15 +567,15 @@ static int __init pcibios_init(void)
pci_bus_add_devices
(
hose
->
bus
);
}
#ifndef CONFIG_PPC_ISERIES
if
(
pci_probe_only
)
pcibios_claim_of_setup
();
else
/* FIXME: `else' will be removed when
pci_assign_unassigned_resources() is able to work
correctly with [partially] allocated PCI tree. */
pci_assign_unassigned_resources
();
#endif
/* !CONFIG_PPC_ISERIES */
if
(
!
firmware_has_feature
(
FW_FEATURE_ISERIES
))
{
if
(
pci_probe_only
)
pcibios_claim_of_setup
();
else
/* FIXME: `else' will be removed when
pci_assign_unassigned_resources() is able to work
correctly with [partially] allocated PCI tree. */
pci_assign_unassigned_resources
();
}
/* Call machine dependent final fixup */
if
(
ppc_md
.
pcibios_fixup
)
...
...
@@ -586,8 +587,9 @@ static int __init pcibios_init(void)
printk
(
KERN_DEBUG
"ISA bridge at %s
\n
"
,
pci_name
(
ppc64_isabridge_dev
));
#ifdef CONFIG_PPC_MULTIPLATFORM
/* map in PCI I/O space */
phbs_remap_io
();
if
(
!
firmware_has_feature
(
FW_FEATURE_ISERIES
))
/* map in PCI I/O space */
phbs_remap_io
();
#endif
printk
(
KERN_DEBUG
"PCI: Probing PCI hardware done
\n
"
);
...
...
@@ -637,13 +639,13 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)
*/
int
pci_domain_nr
(
struct
pci_bus
*
bus
)
{
#ifdef CONFIG_PPC_ISERIES
return
0
;
#else
struct
pci_controller
*
hose
=
pci_bus_to_host
(
bus
);
if
(
firmware_has_feature
(
FW_FEATURE_ISERIES
))
return
0
;
else
{
struct
pci_controller
*
hose
=
pci_bus_to_host
(
bus
);
return
hose
->
global_number
;
#endif
return
hose
->
global_number
;
}
}
EXPORT_SYMBOL
(
pci_domain_nr
);
...
...
@@ -651,12 +653,12 @@ EXPORT_SYMBOL(pci_domain_nr);
/* Decide whether to display the domain number in /proc */
int
pci_proc_domain
(
struct
pci_bus
*
bus
)
{
#ifdef CONFIG_PPC_ISERIES
return
0
;
#else
struct
pci_controller
*
hose
=
pci_bus_to_host
(
bus
);
return
hose
->
buid
;
#endif
if
(
firmware_has_feature
(
FW_FEATURE_ISERIES
))
return
0
;
else
{
struct
pci_controller
*
hose
=
pci_bus_to_host
(
bus
);
return
hose
->
buid
;
}
}
/*
...
...
arch/powerpc/kernel/vmlinux.lds.S
View file @
c730f5b6
...
...
@@ -132,6 +132,14 @@ SECTIONS
*(
__ftr_fixup
)
__stop___ftr_fixup
=
.
;
}
#ifdef CONFIG_PPC64
.
=
ALIGN
(
8
)
;
__fw_ftr_fixup
:
{
__start___fw_ftr_fixup
=
.
;
*(
__fw_ftr_fixup
)
__stop___fw_ftr_fixup
=
.
;
}
#endif
.
=
ALIGN
(
PAGE_SIZE
)
;
.
init.ramfs
:
{
...
...
arch/powerpc/mm/pgtable_64.c
View file @
c730f5b6
...
...
@@ -63,32 +63,13 @@
#include <asm/iommu.h>
#include <asm/abs_addr.h>
#include <asm/vdso.h>
#include <asm/firmware.h>
#include "mmu_decl.h"
unsigned
long
ioremap_bot
=
IMALLOC_BASE
;
static
unsigned
long
phbs_io_bot
=
PHBS_IO_BASE
;
#ifdef CONFIG_PPC_ISERIES
void
__iomem
*
ioremap
(
unsigned
long
addr
,
unsigned
long
size
)
{
return
(
void
__iomem
*
)
addr
;
}
extern
void
__iomem
*
__ioremap
(
unsigned
long
addr
,
unsigned
long
size
,
unsigned
long
flags
)
{
return
(
void
__iomem
*
)
addr
;
}
void
iounmap
(
volatile
void
__iomem
*
addr
)
{
return
;
}
#else
/*
* map_io_page currently only called by __ioremap
* map_io_page adds an entry to the ioremap page table
...
...
@@ -161,6 +142,9 @@ void __iomem * __ioremap(unsigned long addr, unsigned long size,
unsigned
long
pa
,
ea
;
void
__iomem
*
ret
;
if
(
firmware_has_feature
(
FW_FEATURE_ISERIES
))
return
(
void
__iomem
*
)
addr
;
/*
* Choose an address to map it to.
* Once the imalloc system is running, we use it.
...
...
@@ -255,6 +239,9 @@ void iounmap(volatile void __iomem *token)
{
void
*
addr
;
if
(
firmware_has_feature
(
FW_FEATURE_ISERIES
))
return
;
if
(
!
mem_init_done
)
return
;
...
...
@@ -315,8 +302,6 @@ int iounmap_explicit(volatile void __iomem *start, unsigned long size)
return
0
;
}
#endif
EXPORT_SYMBOL
(
ioremap
);
EXPORT_SYMBOL
(
__ioremap
);
EXPORT_SYMBOL
(
iounmap
);
...
...
arch/powerpc/mm/slb_low.S
View file @
c730f5b6
...
...
@@ -21,6 +21,7 @@
#include <asm/page.h>
#include <asm/mmu.h>
#include <asm/pgtable.h>
#include <asm/firmware.h>
/*
void
slb_allocate_realmode
(
unsigned
long
ea
)
;
*
...
...
@@ -183,6 +184,7 @@ slb_finish_load:
*
dont
have
any
LRU
information
to
help
us
choose
a
slot
.
*/
#ifdef CONFIG_PPC_ISERIES
BEGIN_FW_FTR_SECTION
/
*
*
On
iSeries
,
the
"bolted"
stack
segment
can
be
cast
out
on
*
shared
processor
switch
so
we
need
to
check
for
a
miss
on
...
...
@@ -194,6 +196,7 @@ slb_finish_load:
li
r10
,
SLB_NUM_BOLTED
-
1
/*
Stack
goes
in
last
bolted
slot
*/
cmpld
r9
,
r3
beq
3
f
END_FW_FTR_SECTION_IFSET
(
FW_FEATURE_ISERIES
)
#endif /* CONFIG_PPC_ISERIES */
ld
r10
,
PACASTABRR
(
r13
)
...
...
arch/powerpc/platforms/iseries/pci.c
View file @
c730f5b6
...
...
@@ -262,14 +262,6 @@ void __init iSeries_pci_final_fixup(void)
mf_display_src
(
0xC9000200
);
}
void
pcibios_fixup_bus
(
struct
pci_bus
*
PciBus
)
{
}
void
pcibios_fixup_resources
(
struct
pci_dev
*
pdev
)
{
}
/*
* Look down the chain to find the matching Device Device
*/
...
...
arch/powerpc/platforms/iseries/setup.c
View file @
c730f5b6
...
...
@@ -649,15 +649,21 @@ static void iseries_dedicated_idle(void)
void
__init
iSeries_init_IRQ
(
void
)
{
}
#endif
/*
* iSeries has no legacy IO, anything calling this function has to
* fail or bad things will happen
*/
static
int
iseries_check_legacy_ioport
(
unsigned
int
baseport
)
{
return
-
ENODEV
;
}
static
int
__init
iseries_probe
(
void
)
{
unsigned
long
root
=
of_get_flat_dt_root
();
if
(
!
of_flat_dt_is_compatible
(
root
,
"IBM,iSeries"
))
return
0
;
powerpc_firmware_features
|=
FW_FEATURE_ISERIES
;
powerpc_firmware_features
|=
FW_FEATURE_LPAR
;
hpte_init_iSeries
();
return
1
;
...
...
@@ -680,6 +686,7 @@ define_machine(iseries) {
.
calibrate_decr
=
generic_calibrate_decr
,
.
progress
=
iSeries_progress
,
.
probe
=
iseries_probe
,
.
check_legacy_ioport
=
iseries_check_legacy_ioport
,
/* XXX Implement enable_pmcs for iSeries */
};
...
...
@@ -687,6 +694,9 @@ void * __init iSeries_early_setup(void)
{
unsigned
long
phys_mem_size
;
powerpc_firmware_features
|=
FW_FEATURE_ISERIES
;
powerpc_firmware_features
|=
FW_FEATURE_LPAR
;
iSeries_fixup_klimit
();
/*
...
...
drivers/char/hvc_iseries.c
View file @
c730f5b6
...
...
@@ -29,6 +29,7 @@
#include <asm/hvconsole.h>
#include <asm/vio.h>
#include <asm/prom.h>
#include <asm/firmware.h>
#include <asm/iseries/vio.h>
#include <asm/iseries/hv_call.h>
#include <asm/iseries/hv_lp_config.h>
...
...
@@ -488,6 +489,9 @@ static int hvc_vio_init(void)
atomic_t
wait_flag
;
int
rc
;
if
(
!
firmware_has_feature
(
FW_FEATURE_ISERIES
))
return
-
EIO
;
/* +2 for fudge */
rc
=
viopath_open
(
HvLpConfig_getPrimaryLpIndex
(),
viomajorsubtype_chario
,
VIOCHAR_WINDOW
+
2
);
...
...
@@ -562,7 +566,7 @@ static int hvc_find_vtys(void)
for
(
vty
=
of_find_node_by_name
(
NULL
,
"vty"
);
vty
!=
NULL
;
vty
=
of_find_node_by_name
(
vty
,
"vty"
))
{
uint32_t
*
vtermno
;
const
uint32_t
*
vtermno
;
/* We have statically defined space for only a certain number
* of console adapters.
...
...
@@ -571,7 +575,7 @@ static int hvc_find_vtys(void)
(
num_found
>=
VTTY_PORTS
))
break
;
vtermno
=
(
uint32_t
*
)
get_property
(
vty
,
"reg"
,
NULL
);
vtermno
=
get_property
(
vty
,
"reg"
,
NULL
);
if
(
!
vtermno
)
continue
;
...
...
drivers/char/hvc_vio.c
View file @
c730f5b6
...
...
@@ -35,6 +35,7 @@
#include <asm/hvconsole.h>
#include <asm/vio.h>
#include <asm/prom.h>
#include <asm/firmware.h>
#include "hvc_console.h"
...
...
@@ -120,6 +121,9 @@ static int hvc_vio_init(void)
{
int
rc
;
if
(
firmware_has_feature
(
FW_FEATURE_ISERIES
))
return
-
EIO
;
/* Register as a vio device to receive callbacks */
rc
=
vio_register_driver
(
&
hvc_vio_driver
);
...
...
include/asm-powerpc/firmware.h
View file @
c730f5b6
...
...
@@ -14,34 +14,36 @@
#ifdef __KERNEL__
#i
fndef __ASSEMBLY__
#i
nclude <asm/asm-compat.h>
/* firmware feature bitmask values */
#define FIRMWARE_MAX_FEATURES 63
#define FW_FEATURE_PFT (1UL<<0)
#define FW_FEATURE_TCE (1UL<<1)
#define FW_FEATURE_SPRG0 (1UL<<2)
#define FW_FEATURE_DABR (1UL<<3)
#define FW_FEATURE_COPY (1UL<<4)
#define FW_FEATURE_ASR (1UL<<5)
#define FW_FEATURE_DEBUG (1UL<<6)
#define FW_FEATURE_TERM (1UL<<7)
#define FW_FEATURE_PERF (1UL<<8)
#define FW_FEATURE_DUMP (1UL<<9)
#define FW_FEATURE_INTERRUPT (1UL<<10)
#define FW_FEATURE_MIGRATE (1UL<<11)
#define FW_FEATURE_PERFMON (1UL<<12)
#define FW_FEATURE_CRQ (1UL<<13)
#define FW_FEATURE_VIO (1UL<<14)
#define FW_FEATURE_RDMA (1UL<<15)
#define FW_FEATURE_LLAN (1UL<<16)
#define FW_FEATURE_BULK (1UL<<17)
#define FW_FEATURE_XDABR (1UL<<18)
#define FW_FEATURE_MULTITCE (1UL<<19)
#define FW_FEATURE_SPLPAR (1UL<<20)
#define FW_FEATURE_ISERIES (1UL<<21)
#define FW_FEATURE_LPAR (1UL<<22)
#define FW_FEATURE_PFT ASM_CONST(0x0000000000000001)
#define FW_FEATURE_TCE ASM_CONST(0x0000000000000002)
#define FW_FEATURE_SPRG0 ASM_CONST(0x0000000000000004)
#define FW_FEATURE_DABR ASM_CONST(0x0000000000000008)
#define FW_FEATURE_COPY ASM_CONST(0x0000000000000010)
#define FW_FEATURE_ASR ASM_CONST(0x0000000000000020)
#define FW_FEATURE_DEBUG ASM_CONST(0x0000000000000040)
#define FW_FEATURE_TERM ASM_CONST(0x0000000000000080)
#define FW_FEATURE_PERF ASM_CONST(0x0000000000000100)
#define FW_FEATURE_DUMP ASM_CONST(0x0000000000000200)
#define FW_FEATURE_INTERRUPT ASM_CONST(0x0000000000000400)
#define FW_FEATURE_MIGRATE ASM_CONST(0x0000000000000800)
#define FW_FEATURE_PERFMON ASM_CONST(0x0000000000001000)
#define FW_FEATURE_CRQ ASM_CONST(0x0000000000002000)
#define FW_FEATURE_VIO ASM_CONST(0x0000000000004000)
#define FW_FEATURE_RDMA ASM_CONST(0x0000000000008000)
#define FW_FEATURE_LLAN ASM_CONST(0x0000000000010000)
#define FW_FEATURE_BULK ASM_CONST(0x0000000000020000)
#define FW_FEATURE_XDABR ASM_CONST(0x0000000000040000)
#define FW_FEATURE_MULTITCE ASM_CONST(0x0000000000080000)
#define FW_FEATURE_SPLPAR ASM_CONST(0x0000000000100000)
#define FW_FEATURE_ISERIES ASM_CONST(0x0000000000200000)
#define FW_FEATURE_LPAR ASM_CONST(0x0000000000400000)
#ifndef __ASSEMBLY__
enum
{
#ifdef CONFIG_PPC64
...
...
@@ -94,6 +96,23 @@ extern void machine_check_fwnmi(void);
/* This is true if we are using the firmware NMI handler (typically LPAR) */
extern
int
fwnmi_active
;
#else
/* __ASSEMBLY__ */
#define BEGIN_FW_FTR_SECTION 96:
#define END_FW_FTR_SECTION(msk, val) \
97: \
.section __fw_ftr_fixup,"a"; \
.align 3; \
.llong msk; \
.llong val; \
.llong 96b; \
.llong 97b; \
.previous
#define END_FW_FTR_SECTION_IFSET(msk) END_FW_FTR_SECTION((msk), (msk))
#define END_FW_FTR_SECTION_IFCLR(msk) END_FW_FTR_SECTION((msk), 0)
#endif
/* __ASSEMBLY__ */
#endif
/* __KERNEL__ */
#endif
/* __ASM_POWERPC_FIRMWARE_H */
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