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
4f43143f
Commit
4f43143f
authored
Dec 31, 2007
by
Paul Mackerras
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-2.6.25' of
git://git.kernel.org/pub/scm/linux/kernel/git/olof/pasemi
parents
533b1928
90c26375
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
100 additions
and
14 deletions
+100
-14
arch/powerpc/configs/pasemi_defconfig
arch/powerpc/configs/pasemi_defconfig
+26
-4
arch/powerpc/platforms/pasemi/setup.c
arch/powerpc/platforms/pasemi/setup.c
+27
-3
arch/powerpc/sysdev/mpic.c
arch/powerpc/sysdev/mpic.c
+28
-3
arch/powerpc/sysdev/mpic.h
arch/powerpc/sysdev/mpic.h
+0
-3
include/asm-powerpc/mpic.h
include/asm-powerpc/mpic.h
+19
-1
No files found.
arch/powerpc/configs/pasemi_defconfig
View file @
4f43143f
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.24-rc
4
#
Thu Dec 6 16:49:0
3 2007
# Linux kernel version: 2.6.24-rc
6
#
Fri Dec 28 11:01:5
3 2007
#
CONFIG_PPC64=y
...
...
@@ -256,7 +256,7 @@ CONFIG_PCI_DOMAINS=y
CONFIG_PCI_SYSCALL=y
# CONFIG_PCIEPORTBUS is not set
CONFIG_ARCH_SUPPORTS_MSI=y
# CONFIG_PCI_MSI is not set
CONFIG_PCI_MSI=y
CONFIG_PCI_LEGACY=y
# CONFIG_PCI_DEBUG is not set
CONFIG_PCCARD=y
...
...
@@ -663,7 +663,25 @@ CONFIG_PATA_PCMCIA=y
# CONFIG_PATA_VIA is not set
# CONFIG_PATA_WINBOND is not set
CONFIG_PATA_PLATFORM=y
# CONFIG_MD is not set
CONFIG_MD=y
CONFIG_BLK_DEV_MD=y
CONFIG_MD_LINEAR=y
CONFIG_MD_RAID0=y
CONFIG_MD_RAID1=y
CONFIG_MD_RAID10=y
CONFIG_MD_RAID456=y
CONFIG_MD_RAID5_RESHAPE=y
# CONFIG_MD_MULTIPATH is not set
# CONFIG_MD_FAULTY is not set
CONFIG_BLK_DEV_DM=y
# CONFIG_DM_DEBUG is not set
CONFIG_DM_CRYPT=y
# CONFIG_DM_SNAPSHOT is not set
# CONFIG_DM_MIRROR is not set
# CONFIG_DM_ZERO is not set
# CONFIG_DM_MULTIPATH is not set
# CONFIG_DM_DELAY is not set
# CONFIG_DM_UEVENT is not set
# CONFIG_FUSION is not set
#
...
...
@@ -1686,6 +1704,10 @@ CONFIG_XMON_DISASSEMBLY=y
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
CONFIG_XOR_BLOCKS=y
CONFIG_ASYNC_CORE=y
CONFIG_ASYNC_MEMCPY=y
CONFIG_ASYNC_XOR=y
CONFIG_CRYPTO=y
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_BLKCIPHER=y
...
...
arch/powerpc/platforms/pasemi/setup.c
View file @
4f43143f
...
...
@@ -61,6 +61,7 @@ struct mce_regs {
static
struct
mce_regs
mce_regs
[
MAX_MCE_REGS
];
static
int
num_mce_regs
;
static
int
nmi_virq
=
NO_IRQ
;
static
void
pas_restart
(
char
*
cmd
)
...
...
@@ -189,6 +190,8 @@ static __init void pas_init_IRQ(void)
unsigned
long
openpic_addr
;
const
unsigned
int
*
opprop
;
int
naddr
,
opplen
;
int
mpic_flags
;
const
unsigned
int
*
nmiprop
;
struct
mpic
*
mpic
;
mpic_node
=
NULL
;
...
...
@@ -221,13 +224,26 @@ static __init void pas_init_IRQ(void)
openpic_addr
=
of_read_number
(
opprop
,
naddr
);
printk
(
KERN_DEBUG
"OpenPIC addr: %lx
\n
"
,
openpic_addr
);
mpic_flags
=
MPIC_PRIMARY
|
MPIC_LARGE_VECTORS
|
MPIC_NO_BIAS
;
nmiprop
=
of_get_property
(
mpic_node
,
"nmi-source"
,
NULL
);
if
(
nmiprop
)
mpic_flags
|=
MPIC_ENABLE_MCK
;
mpic
=
mpic_alloc
(
mpic_node
,
openpic_addr
,
MPIC_PRIMARY
|
MPIC_LARGE_VECTORS
,
0
,
0
,
"PASEMI-OPIC"
);
mpic_flags
,
0
,
0
,
"PASEMI-OPIC"
);
BUG_ON
(
!
mpic
);
mpic_assign_isu
(
mpic
,
0
,
openpic_addr
+
0x10000
);
mpic_init
(
mpic
);
/* The NMI/MCK source needs to be prio 15 */
if
(
nmiprop
)
{
nmi_virq
=
irq_create_mapping
(
NULL
,
*
nmiprop
);
mpic_irq_set_priority
(
nmi_virq
,
15
);
set_irq_type
(
nmi_virq
,
IRQ_TYPE_EDGE_RISING
);
mpic_unmask_irq
(
nmi_virq
);
}
of_node_put
(
mpic_node
);
of_node_put
(
root
);
}
...
...
@@ -247,6 +263,14 @@ static int pas_machine_check_handler(struct pt_regs *regs)
srr0
=
regs
->
nip
;
srr1
=
regs
->
msr
;
if
(
mpic_get_mcirq
()
==
nmi_virq
)
{
printk
(
KERN_ERR
"NMI delivered
\n
"
);
debugger
(
regs
);
mpic_end_irq
(
nmi_virq
);
goto
out
;
}
dsisr
=
mfspr
(
SPRN_DSISR
);
printk
(
KERN_ERR
"Machine Check on CPU %d
\n
"
,
cpu
);
printk
(
KERN_ERR
"SRR0 0x%016lx SRR1 0x%016lx
\n
"
,
srr0
,
srr1
);
...
...
@@ -310,7 +334,7 @@ static int pas_machine_check_handler(struct pt_regs *regs)
}
}
out:
/* SRR1[62] is from MSR[62] if recoverable, so pass that back */
return
!!
(
srr1
&
0x2
);
}
...
...
arch/powerpc/sysdev/mpic.c
View file @
4f43143f
...
...
@@ -83,6 +83,7 @@ static u32 mpic_infos[][MPIC_IDX_END] = {
MPIC_CPU_WHOAMI
,
MPIC_CPU_INTACK
,
MPIC_CPU_EOI
,
MPIC_CPU_MCACK
,
MPIC_IRQ_BASE
,
MPIC_IRQ_STRIDE
,
...
...
@@ -121,6 +122,7 @@ static u32 mpic_infos[][MPIC_IDX_END] = {
TSI108_CPU_WHOAMI
,
TSI108_CPU_INTACK
,
TSI108_CPU_EOI
,
TSI108_CPU_MCACK
,
TSI108_IRQ_BASE
,
TSI108_IRQ_STRIDE
,
...
...
@@ -1126,6 +1128,11 @@ struct mpic * __init mpic_alloc(struct device_node *node,
mb
();
}
if
(
flags
&
MPIC_ENABLE_MCK
)
mpic_write
(
mpic
->
gregs
,
MPIC_INFO
(
GREG_GLOBAL_CONF_0
),
mpic_read
(
mpic
->
gregs
,
MPIC_INFO
(
GREG_GLOBAL_CONF_0
))
|
MPIC_GREG_GCONF_MCK
);
/* Read feature register, calculate num CPUs and, for non-ISU
* MPICs, num sources as well. On ISU MPICs, sources are counted
* as ISUs are added
...
...
@@ -1272,6 +1279,11 @@ void __init mpic_init(struct mpic *mpic)
mpic_read
(
mpic
->
gregs
,
MPIC_INFO
(
GREG_GLOBAL_CONF_0
))
|
MPIC_GREG_GCONF_8259_PTHROU_DIS
);
if
(
mpic
->
flags
&
MPIC_NO_BIAS
)
mpic_write
(
mpic
->
gregs
,
MPIC_INFO
(
GREG_GLOBAL_CONF_0
),
mpic_read
(
mpic
->
gregs
,
MPIC_INFO
(
GREG_GLOBAL_CONF_0
))
|
MPIC_GREG_GCONF_NO_BIAS
);
/* Set current processor priority to 0 */
mpic_cpu_write
(
MPIC_INFO
(
CPU_CURRENT_TASK_PRI
),
0
);
...
...
@@ -1438,13 +1450,13 @@ void mpic_send_ipi(unsigned int ipi_no, unsigned int cpu_mask)
mpic_physmask
(
cpu_mask
&
cpus_addr
(
cpu_online_map
)[
0
]));
}
unsigned
int
mpic_get_one_irq
(
struct
mpic
*
mpic
)
static
unsigned
int
_mpic_get_one_irq
(
struct
mpic
*
mpic
,
int
reg
)
{
u32
src
;
src
=
mpic_cpu_read
(
MPIC_INFO
(
CPU_INTACK
)
)
&
MPIC_INFO
(
VECPRI_VECTOR_MASK
);
src
=
mpic_cpu_read
(
reg
)
&
MPIC_INFO
(
VECPRI_VECTOR_MASK
);
#ifdef DEBUG_LOW
DBG
(
"%s: get_one_irq(
): %d
\n
"
,
mpic
->
name
,
src
);
DBG
(
"%s: get_one_irq(
reg 0x%x): %d
\n
"
,
mpic
->
name
,
reg
,
src
);
#endif
if
(
unlikely
(
src
==
mpic
->
spurious_vec
))
{
if
(
mpic
->
flags
&
MPIC_SPV_EOI
)
...
...
@@ -1462,6 +1474,11 @@ unsigned int mpic_get_one_irq(struct mpic *mpic)
return
irq_linear_revmap
(
mpic
->
irqhost
,
src
);
}
unsigned
int
mpic_get_one_irq
(
struct
mpic
*
mpic
)
{
return
_mpic_get_one_irq
(
mpic
,
MPIC_INFO
(
CPU_INTACK
));
}
unsigned
int
mpic_get_irq
(
void
)
{
struct
mpic
*
mpic
=
mpic_primary
;
...
...
@@ -1471,6 +1488,14 @@ unsigned int mpic_get_irq(void)
return
mpic_get_one_irq
(
mpic
);
}
unsigned
int
mpic_get_mcirq
(
void
)
{
struct
mpic
*
mpic
=
mpic_primary
;
BUG_ON
(
mpic
==
NULL
);
return
_mpic_get_one_irq
(
mpic
,
MPIC_INFO
(
CPU_MCACK
));
}
#ifdef CONFIG_SMP
void
mpic_request_ipis
(
void
)
...
...
arch/powerpc/sysdev/mpic.h
View file @
4f43143f
...
...
@@ -38,9 +38,6 @@ static inline int mpic_pasemi_msi_init(struct mpic *mpic)
extern
int
mpic_set_irq_type
(
unsigned
int
virq
,
unsigned
int
flow_type
);
extern
void
mpic_set_vector
(
unsigned
int
virq
,
unsigned
int
vector
);
extern
void
mpic_end_irq
(
unsigned
int
irq
);
extern
void
mpic_mask_irq
(
unsigned
int
irq
);
extern
void
mpic_unmask_irq
(
unsigned
int
irq
);
extern
void
mpic_set_affinity
(
unsigned
int
irq
,
cpumask_t
cpumask
);
#endif
/* _POWERPC_SYSDEV_MPIC_H */
include/asm-powerpc/mpic.h
View file @
4f43143f
...
...
@@ -22,7 +22,9 @@
#define MPIC_GREG_GLOBAL_CONF_0 0x00020
#define MPIC_GREG_GCONF_RESET 0x80000000
#define MPIC_GREG_GCONF_8259_PTHROU_DIS 0x20000000
#define MPIC_GREG_GCONF_NO_BIAS 0x10000000
#define MPIC_GREG_GCONF_BASE_MASK 0x000fffff
#define MPIC_GREG_GCONF_MCK 0x08000000
#define MPIC_GREG_GLOBAL_CONF_1 0x00030
#define MPIC_GREG_GLOBAL_CONF_1_SIE 0x08000000
#define MPIC_GREG_GLOBAL_CONF_1_CLK_RATIO_MASK 0x70000000
...
...
@@ -78,6 +80,7 @@
#define MPIC_CPU_WHOAMI_MASK 0x0000001f
#define MPIC_CPU_INTACK 0x000a0
#define MPIC_CPU_EOI 0x000b0
#define MPIC_CPU_MCACK 0x000c0
/*
* Per-source registers
...
...
@@ -141,6 +144,7 @@
#define TSI108_CPU_WHOAMI 0xffffffff
#define TSI108_CPU_INTACK 0x00004
#define TSI108_CPU_EOI 0x00008
#define TSI108_CPU_MCACK 0x00004
/* Doesn't really exist here */
/*
* Per-source registers
...
...
@@ -183,6 +187,7 @@ enum {
MPIC_IDX_CPU_WHOAMI
,
MPIC_IDX_CPU_INTACK
,
MPIC_IDX_CPU_EOI
,
MPIC_IDX_CPU_MCACK
,
MPIC_IDX_IRQ_BASE
,
MPIC_IDX_IRQ_STRIDE
,
...
...
@@ -344,6 +349,10 @@ struct mpic
#define MPIC_USES_DCR 0x00000080
/* MPIC has 11-bit vector fields (or larger) */
#define MPIC_LARGE_VECTORS 0x00000100
/* Enable delivery of prio 15 interrupts as MCK instead of EE */
#define MPIC_ENABLE_MCK 0x00000200
/* Disable bias among target selection, spread interrupts evenly */
#define MPIC_NO_BIAS 0x00000400
/* MPIC HW modification ID */
#define MPIC_REGSET_MASK 0xf0000000
...
...
@@ -447,10 +456,19 @@ extern void mpic_send_ipi(unsigned int ipi_no, unsigned int cpu_mask);
/* Send a message (IPI) to a given target (cpu number or MSG_*) */
void
smp_mpic_message_pass
(
int
target
,
int
msg
);
/* Unmask a specific virq */
extern
void
mpic_unmask_irq
(
unsigned
int
irq
);
/* Mask a specific virq */
extern
void
mpic_mask_irq
(
unsigned
int
irq
);
/* EOI a specific virq */
extern
void
mpic_end_irq
(
unsigned
int
irq
);
/* Fetch interrupt from a given mpic */
extern
unsigned
int
mpic_get_one_irq
(
struct
mpic
*
mpic
);
/* This one gets
to
the primary mpic */
/* This one gets
from
the primary mpic */
extern
unsigned
int
mpic_get_irq
(
void
);
/* Fetch Machine Check interrupt from primary mpic */
extern
unsigned
int
mpic_get_mcirq
(
void
);
/* Set the EPIC clock ratio */
void
mpic_set_clk_ratio
(
struct
mpic
*
mpic
,
u32
clock_ratio
);
...
...
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