Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
48b1bf86
Commit
48b1bf86
authored
Dec 07, 2011
by
Benjamin Herrenschmidt
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'mpic' into next
parents
4666ca2a
09dc34a9
Changes
33
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
33 changed files
with
225 additions
and
621 deletions
+225
-621
arch/powerpc/include/asm/mpic.h
arch/powerpc/include/asm/mpic.h
+10
-4
arch/powerpc/platforms/44x/iss4xx.c
arch/powerpc/platforms/44x/iss4xx.c
+1
-1
arch/powerpc/platforms/85xx/corenet_ds.c
arch/powerpc/platforms/85xx/corenet_ds.c
+3
-23
arch/powerpc/platforms/85xx/ksi8560.c
arch/powerpc/platforms/85xx/ksi8560.c
+2
-21
arch/powerpc/platforms/85xx/mpc8536_ds.c
arch/powerpc/platforms/85xx/mpc8536_ds.c
+2
-20
arch/powerpc/platforms/85xx/mpc85xx_ads.c
arch/powerpc/platforms/85xx/mpc85xx_ads.c
+2
-20
arch/powerpc/platforms/85xx/mpc85xx_cds.c
arch/powerpc/platforms/85xx/mpc85xx_cds.c
+2
-22
arch/powerpc/platforms/85xx/mpc85xx_ds.c
arch/powerpc/platforms/85xx/mpc85xx_ds.c
+5
-25
arch/powerpc/platforms/85xx/mpc85xx_mds.c
arch/powerpc/platforms/85xx/mpc85xx_mds.c
+3
-23
arch/powerpc/platforms/85xx/mpc85xx_rdb.c
arch/powerpc/platforms/85xx/mpc85xx_rdb.c
+4
-27
arch/powerpc/platforms/85xx/p1010rdb.c
arch/powerpc/platforms/85xx/p1010rdb.c
+3
-18
arch/powerpc/platforms/85xx/p1022_ds.c
arch/powerpc/platforms/85xx/p1022_ds.c
+3
-27
arch/powerpc/platforms/85xx/p1023_rds.c
arch/powerpc/platforms/85xx/p1023_rds.c
+3
-24
arch/powerpc/platforms/85xx/sbc8548.c
arch/powerpc/platforms/85xx/sbc8548.c
+2
-23
arch/powerpc/platforms/85xx/sbc8560.c
arch/powerpc/platforms/85xx/sbc8560.c
+2
-20
arch/powerpc/platforms/85xx/smp.c
arch/powerpc/platforms/85xx/smp.c
+1
-0
arch/powerpc/platforms/85xx/smp.h
arch/powerpc/platforms/85xx/smp.h
+15
-0
arch/powerpc/platforms/85xx/socrates.c
arch/powerpc/platforms/85xx/socrates.c
+2
-18
arch/powerpc/platforms/85xx/stx_gp3.c
arch/powerpc/platforms/85xx/stx_gp3.c
+2
-20
arch/powerpc/platforms/85xx/tqm85xx.c
arch/powerpc/platforms/85xx/tqm85xx.c
+2
-20
arch/powerpc/platforms/85xx/xes_mpc85xx.c
arch/powerpc/platforms/85xx/xes_mpc85xx.c
+3
-25
arch/powerpc/platforms/86xx/pic.c
arch/powerpc/platforms/86xx/pic.c
+4
-14
arch/powerpc/platforms/cell/setup.c
arch/powerpc/platforms/cell/setup.c
+1
-24
arch/powerpc/platforms/chrp/setup.c
arch/powerpc/platforms/chrp/setup.c
+1
-2
arch/powerpc/platforms/embedded6xx/holly.c
arch/powerpc/platforms/embedded6xx/holly.c
+3
-20
arch/powerpc/platforms/embedded6xx/linkstation.c
arch/powerpc/platforms/embedded6xx/linkstation.c
+5
-15
arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c
arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c
+3
-21
arch/powerpc/platforms/embedded6xx/storcenter.c
arch/powerpc/platforms/embedded6xx/storcenter.c
+4
-22
arch/powerpc/platforms/maple/setup.c
arch/powerpc/platforms/maple/setup.c
+1
-1
arch/powerpc/platforms/pasemi/setup.c
arch/powerpc/platforms/pasemi/setup.c
+2
-2
arch/powerpc/platforms/powermac/pic.c
arch/powerpc/platforms/powermac/pic.c
+7
-39
arch/powerpc/platforms/pseries/setup.c
arch/powerpc/platforms/pseries/setup.c
+1
-2
arch/powerpc/sysdev/mpic.c
arch/powerpc/sysdev/mpic.c
+121
-78
No files found.
arch/powerpc/include/asm/mpic.h
View file @
48b1bf86
...
...
@@ -251,6 +251,9 @@ struct mpic_irq_save {
/* The instance data of a given MPIC */
struct
mpic
{
/* The OpenFirmware dt node for this MPIC */
struct
device_node
*
node
;
/* The remapper for this MPIC */
struct
irq_host
*
irqhost
;
...
...
@@ -293,6 +296,9 @@ struct mpic
/* Register access method */
enum
mpic_reg_type
reg_type
;
/* The physical base address of the MPIC */
phys_addr_t
paddr
;
/* The various ioremap'ed bases */
struct
mpic_reg_bank
gregs
;
struct
mpic_reg_bank
tmregs
;
...
...
@@ -331,11 +337,11 @@ struct mpic
* Note setting any ID (leaving those bits to 0) means standard MPIC
*/
/*
This is the primary controller, only that one has IPIs and
*
has afinity control. A non-primary MPIC always uses
CPU0
* registers
only
/*
*
This is a secondary ("chained") controller; it only uses the
CPU0
* registers
. Primary controllers have IPIs and affinity control.
*/
#define MPIC_
PRIM
ARY 0x00000001
#define MPIC_
SECOND
ARY 0x00000001
/* Set this for a big-endian MPIC */
#define MPIC_BIG_ENDIAN 0x00000002
...
...
arch/powerpc/platforms/44x/iss4xx.c
View file @
48b1bf86
...
...
@@ -71,7 +71,7 @@ static void __init iss4xx_init_irq(void)
/* The MPIC driver will get everything it needs from the
* device-tree, just pass 0 to all arguments
*/
struct
mpic
*
mpic
=
mpic_alloc
(
np
,
0
,
MPIC_PRIMARY
,
0
,
0
,
struct
mpic
*
mpic
=
mpic_alloc
(
np
,
0
,
0
,
0
,
0
,
" MPIC "
);
BUG_ON
(
mpic
==
NULL
);
mpic_init
(
mpic
);
...
...
arch/powerpc/platforms/85xx/corenet_ds.c
View file @
48b1bf86
...
...
@@ -31,32 +31,18 @@
#include <linux/of_platform.h>
#include <sysdev/fsl_soc.h>
#include <sysdev/fsl_pci.h>
#include "smp.h"
void
__init
corenet_ds_pic_init
(
void
)
{
struct
mpic
*
mpic
;
struct
resource
r
;
struct
device_node
*
np
=
NULL
;
unsigned
int
flags
=
MPIC_PRIMARY
|
MPIC_BIG_ENDIAN
|
unsigned
int
flags
=
MPIC_BIG_ENDIAN
|
MPIC_BROKEN_FRR_NIRQS
|
MPIC_SINGLE_DEST_CPU
;
np
=
of_find_node_by_type
(
np
,
"open-pic"
);
if
(
np
==
NULL
)
{
printk
(
KERN_ERR
"Could not find open-pic node
\n
"
);
return
;
}
if
(
of_address_to_resource
(
np
,
0
,
&
r
))
{
printk
(
KERN_ERR
"Failed to map mpic register space
\n
"
);
of_node_put
(
np
);
return
;
}
if
(
ppc_md
.
get_irq
==
mpic_get_coreint_irq
)
flags
|=
MPIC_ENABLE_COREINT
;
mpic
=
mpic_alloc
(
np
,
r
.
start
,
flags
,
0
,
256
,
" OpenPIC "
);
mpic
=
mpic_alloc
(
NULL
,
0
,
flags
,
0
,
256
,
" OpenPIC "
);
BUG_ON
(
mpic
==
NULL
);
mpic_init
(
mpic
);
...
...
@@ -65,10 +51,6 @@ void __init corenet_ds_pic_init(void)
/*
* Setup the architecture
*/
#ifdef CONFIG_SMP
void
__init
mpc85xx_smp_init
(
void
);
#endif
void
__init
corenet_ds_setup_arch
(
void
)
{
#ifdef CONFIG_PCI
...
...
@@ -77,9 +59,7 @@ void __init corenet_ds_setup_arch(void)
#endif
dma_addr_t
max
=
0xffffffff
;
#ifdef CONFIG_SMP
mpc85xx_smp_init
();
#endif
#ifdef CONFIG_PCI
for_each_node_by_type
(
np
,
"pci"
)
{
...
...
arch/powerpc/platforms/85xx/ksi8560.c
View file @
48b1bf86
...
...
@@ -57,29 +57,10 @@ static void machine_restart(char *cmd)
static
void
__init
ksi8560_pic_init
(
void
)
{
struct
mpic
*
mpic
;
struct
resource
r
;
struct
device_node
*
np
;
np
=
of_find_node_by_type
(
NULL
,
"open-pic"
);
if
(
np
==
NULL
)
{
printk
(
KERN_ERR
"Could not find open-pic node
\n
"
);
return
;
}
if
(
of_address_to_resource
(
np
,
0
,
&
r
))
{
printk
(
KERN_ERR
"Could not map mpic register space
\n
"
);
of_node_put
(
np
);
return
;
}
mpic
=
mpic_alloc
(
np
,
r
.
start
,
MPIC_PRIMARY
|
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
,
struct
mpic
*
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
,
0
,
256
,
" OpenPIC "
);
BUG_ON
(
mpic
==
NULL
);
of_node_put
(
np
);
mpic_init
(
mpic
);
mpc85xx_cpm2_pic_init
();
...
...
arch/powerpc/platforms/85xx/mpc8536_ds.c
View file @
48b1bf86
...
...
@@ -36,29 +36,11 @@
void
__init
mpc8536_ds_pic_init
(
void
)
{
struct
mpic
*
mpic
;
struct
resource
r
;
struct
device_node
*
np
;
np
=
of_find_node_by_type
(
NULL
,
"open-pic"
);
if
(
np
==
NULL
)
{
printk
(
KERN_ERR
"Could not find open-pic node
\n
"
);
return
;
}
if
(
of_address_to_resource
(
np
,
0
,
&
r
))
{
printk
(
KERN_ERR
"Failed to map mpic register space
\n
"
);
of_node_put
(
np
);
return
;
}
mpic
=
mpic_alloc
(
np
,
r
.
start
,
MPIC_PRIMARY
|
MPIC_WANTS_RESET
|
struct
mpic
*
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
|
MPIC_BROKEN_FRR_NIRQS
,
0
,
256
,
" OpenPIC "
);
BUG_ON
(
mpic
==
NULL
);
of_node_put
(
np
);
mpic_init
(
mpic
);
}
...
...
arch/powerpc/platforms/85xx/mpc85xx_ads.c
View file @
48b1bf86
...
...
@@ -50,28 +50,10 @@ static int mpc85xx_exclude_device(struct pci_controller *hose,
static
void
__init
mpc85xx_ads_pic_init
(
void
)
{
struct
mpic
*
mpic
;
struct
resource
r
;
struct
device_node
*
np
=
NULL
;
np
=
of_find_node_by_type
(
np
,
"open-pic"
);
if
(
!
np
)
{
printk
(
KERN_ERR
"Could not find open-pic node
\n
"
);
return
;
}
if
(
of_address_to_resource
(
np
,
0
,
&
r
))
{
printk
(
KERN_ERR
"Could not map mpic register space
\n
"
);
of_node_put
(
np
);
return
;
}
mpic
=
mpic_alloc
(
np
,
r
.
start
,
MPIC_PRIMARY
|
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
,
struct
mpic
*
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
,
0
,
256
,
" OpenPIC "
);
BUG_ON
(
mpic
==
NULL
);
of_node_put
(
np
);
mpic_init
(
mpic
);
mpc85xx_cpm2_pic_init
();
...
...
arch/powerpc/platforms/85xx/mpc85xx_cds.c
View file @
48b1bf86
...
...
@@ -188,30 +188,10 @@ static struct irqaction mpc85xxcds_8259_irqaction = {
static
void
__init
mpc85xx_cds_pic_init
(
void
)
{
struct
mpic
*
mpic
;
struct
resource
r
;
struct
device_node
*
np
=
NULL
;
np
=
of_find_node_by_type
(
np
,
"open-pic"
);
if
(
np
==
NULL
)
{
printk
(
KERN_ERR
"Could not find open-pic node
\n
"
);
return
;
}
if
(
of_address_to_resource
(
np
,
0
,
&
r
))
{
printk
(
KERN_ERR
"Failed to map mpic register space
\n
"
);
of_node_put
(
np
);
return
;
}
mpic
=
mpic_alloc
(
np
,
r
.
start
,
MPIC_PRIMARY
|
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
,
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
,
0
,
256
,
" OpenPIC "
);
BUG_ON
(
mpic
==
NULL
);
/* Return the mpic node */
of_node_put
(
np
);
mpic_init
(
mpic
);
}
...
...
arch/powerpc/platforms/85xx/mpc85xx_ds.c
View file @
48b1bf86
...
...
@@ -35,6 +35,7 @@
#include <sysdev/fsl_soc.h>
#include <sysdev/fsl_pci.h>
#include "smp.h"
#include "mpc85xx.h"
...
...
@@ -62,43 +63,27 @@ static void mpc85xx_8259_cascade(unsigned int irq, struct irq_desc *desc)
void
__init
mpc85xx_ds_pic_init
(
void
)
{
struct
mpic
*
mpic
;
struct
resource
r
;
struct
device_node
*
np
;
#ifdef CONFIG_PPC_I8259
struct
device_node
*
np
;
struct
device_node
*
cascade_node
=
NULL
;
int
cascade_irq
;
#endif
unsigned
long
root
=
of_get_flat_dt_root
();
np
=
of_find_node_by_type
(
NULL
,
"open-pic"
);
if
(
np
==
NULL
)
{
printk
(
KERN_ERR
"Could not find open-pic node
\n
"
);
return
;
}
if
(
of_address_to_resource
(
np
,
0
,
&
r
))
{
printk
(
KERN_ERR
"Failed to map mpic register space
\n
"
);
of_node_put
(
np
);
return
;
}
if
(
of_flat_dt_is_compatible
(
root
,
"fsl,MPC8572DS-CAMP"
))
{
mpic
=
mpic_alloc
(
np
,
r
.
start
,
MPIC_PRIMARY
|
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_BIG_ENDIAN
|
MPIC_BROKEN_FRR_NIRQS
|
MPIC_SINGLE_DEST_CPU
,
0
,
256
,
" OpenPIC "
);
}
else
{
mpic
=
mpic_alloc
(
np
,
r
.
start
,
MPIC_
PRIMARY
|
MPIC_
WANTS_RESET
|
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
|
MPIC_BROKEN_FRR_NIRQS
|
MPIC_SINGLE_DEST_CPU
,
0
,
256
,
" OpenPIC "
);
}
BUG_ON
(
mpic
==
NULL
);
of_node_put
(
np
);
mpic_init
(
mpic
);
#ifdef CONFIG_PPC_I8259
...
...
@@ -154,9 +139,6 @@ static int mpc85xx_exclude_device(struct pci_controller *hose,
/*
* Setup the architecture
*/
#ifdef CONFIG_SMP
extern
void
__init
mpc85xx_smp_init
(
void
);
#endif
static
void
__init
mpc85xx_ds_setup_arch
(
void
)
{
#ifdef CONFIG_PCI
...
...
@@ -189,9 +171,7 @@ static void __init mpc85xx_ds_setup_arch(void)
ppc_md
.
pci_exclude_device
=
mpc85xx_exclude_device
;
#endif
#ifdef CONFIG_SMP
mpc85xx_smp_init
();
#endif
#ifdef CONFIG_SWIOTLB
if
(
memblock_end_of_DRAM
()
>
max
)
{
...
...
arch/powerpc/platforms/85xx/mpc85xx_mds.c
View file @
48b1bf86
...
...
@@ -51,6 +51,7 @@
#include <asm/qe_ic.h>
#include <asm/mpic.h>
#include <asm/swiotlb.h>
#include "smp.h"
#include "mpc85xx.h"
...
...
@@ -155,10 +156,6 @@ static int mpc8568_mds_phy_fixups(struct phy_device *phydev)
* Setup the architecture
*
*/
#ifdef CONFIG_SMP
extern
void
__init
mpc85xx_smp_init
(
void
);
#endif
#ifdef CONFIG_QUICC_ENGINE
static
void
__init
mpc85xx_mds_reset_ucc_phys
(
void
)
{
...
...
@@ -363,9 +360,7 @@ static void __init mpc85xx_mds_setup_arch(void)
}
#endif
#ifdef CONFIG_SMP
mpc85xx_smp_init
();
#endif
mpc85xx_mds_qe_init
();
...
...
@@ -439,26 +434,11 @@ machine_arch_initcall(p1021_mds, swiotlb_setup_bus_notifier);
static
void
__init
mpc85xx_mds_pic_init
(
void
)
{
struct
mpic
*
mpic
;
struct
resource
r
;
struct
device_node
*
np
=
NULL
;
np
=
of_find_node_by_type
(
NULL
,
"open-pic"
);
if
(
!
np
)
return
;
if
(
of_address_to_resource
(
np
,
0
,
&
r
))
{
printk
(
KERN_ERR
"Failed to map mpic register space
\n
"
);
of_node_put
(
np
);
return
;
}
mpic
=
mpic_alloc
(
np
,
r
.
start
,
MPIC_PRIMARY
|
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
|
struct
mpic
*
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
|
MPIC_BROKEN_FRR_NIRQS
|
MPIC_SINGLE_DEST_CPU
,
0
,
256
,
" OpenPIC "
);
BUG_ON
(
mpic
==
NULL
);
of_node_put
(
np
);
mpic_init
(
mpic
);
mpc85xx_mds_qeic_init
();
...
...
arch/powerpc/platforms/85xx/mpc85xx_rdb.c
View file @
48b1bf86
...
...
@@ -29,6 +29,7 @@
#include <sysdev/fsl_soc.h>
#include <sysdev/fsl_pci.h>
#include "smp.h"
#include "mpc85xx.h"
...
...
@@ -44,49 +45,28 @@
void
__init
mpc85xx_rdb_pic_init
(
void
)
{
struct
mpic
*
mpic
;
struct
resource
r
;
struct
device_node
*
np
;
unsigned
long
root
=
of_get_flat_dt_root
();
np
=
of_find_node_by_type
(
NULL
,
"open-pic"
);
if
(
np
==
NULL
)
{
printk
(
KERN_ERR
"Could not find open-pic node
\n
"
);
return
;
}
if
(
of_address_to_resource
(
np
,
0
,
&
r
))
{
printk
(
KERN_ERR
"Failed to map mpic register space
\n
"
);
of_node_put
(
np
);
return
;
}
if
(
of_flat_dt_is_compatible
(
root
,
"fsl,MPC85XXRDB-CAMP"
))
{
mpic
=
mpic_alloc
(
np
,
r
.
start
,
MPIC_PRIMARY
|
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_BIG_ENDIAN
|
MPIC_BROKEN_FRR_NIRQS
|
MPIC_SINGLE_DEST_CPU
,
0
,
256
,
" OpenPIC "
);
}
else
{
mpic
=
mpic_alloc
(
np
,
r
.
start
,
MPIC_
PRIMARY
|
MPIC_
WANTS_RESET
|
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
|
MPIC_BROKEN_FRR_NIRQS
|
MPIC_SINGLE_DEST_CPU
,
0
,
256
,
" OpenPIC "
);
}
BUG_ON
(
mpic
==
NULL
);
of_node_put
(
np
);
mpic_init
(
mpic
);
}
/*
* Setup the architecture
*/
#ifdef CONFIG_SMP
extern
void
__init
mpc85xx_smp_init
(
void
);
#endif
static
void
__init
mpc85xx_rdb_setup_arch
(
void
)
{
#ifdef CONFIG_PCI
...
...
@@ -104,10 +84,7 @@ static void __init mpc85xx_rdb_setup_arch(void)
#endif
#ifdef CONFIG_SMP
mpc85xx_smp_init
();
#endif
printk
(
KERN_INFO
"MPC85xx RDB board from Freescale Semiconductor
\n
"
);
}
...
...
arch/powerpc/platforms/85xx/p1010rdb.c
View file @
48b1bf86
...
...
@@ -32,24 +32,9 @@
void
__init
p1010_rdb_pic_init
(
void
)
{
struct
mpic
*
mpic
;
struct
resource
r
;
struct
device_node
*
np
;
np
=
of_find_node_by_type
(
NULL
,
"open-pic"
);
if
(
np
==
NULL
)
{
printk
(
KERN_ERR
"Could not find open-pic node
\n
"
);
return
;
}
if
(
of_address_to_resource
(
np
,
0
,
&
r
))
{
printk
(
KERN_ERR
"Failed to map mpic register space
\n
"
);
of_node_put
(
np
);
return
;
}
mpic
=
mpic_alloc
(
np
,
r
.
start
,
MPIC_PRIMARY
|
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
|
MPIC_BROKEN_FRR_NIRQS
|
MPIC_SINGLE_DEST_CPU
,
struct
mpic
*
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
|
MPIC_BROKEN_FRR_NIRQS
|
MPIC_SINGLE_DEST_CPU
,
0
,
256
,
" OpenPIC "
);
BUG_ON
(
mpic
==
NULL
);
...
...
arch/powerpc/platforms/85xx/p1022_ds.c
View file @
48b1bf86
...
...
@@ -26,6 +26,7 @@
#include <sysdev/fsl_soc.h>
#include <sysdev/fsl_pci.h>
#include <asm/fsl_guts.h>
#include "smp.h"
#include "mpc85xx.h"
...
...
@@ -240,38 +241,15 @@ p1022ds_valid_monitor_port(enum fsl_diu_monitor_port port)
void
__init
p1022_ds_pic_init
(
void
)
{
struct
mpic
*
mpic
;
struct
resource
r
;
struct
device_node
*
np
;
np
=
of_find_node_by_type
(
NULL
,
"open-pic"
);
if
(
!
np
)
{
pr_err
(
"Could not find open-pic node
\n
"
);
return
;
}
if
(
of_address_to_resource
(
np
,
0
,
&
r
))
{
pr_err
(
"Failed to map mpic register space
\n
"
);
of_node_put
(
np
);
return
;
}
mpic
=
mpic_alloc
(
np
,
r
.
start
,
MPIC_PRIMARY
|
MPIC_WANTS_RESET
|
struct
mpic
*
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
|
MPIC_BROKEN_FRR_NIRQS
|
MPIC_SINGLE_DEST_CPU
,
0
,
256
,
" OpenPIC "
);
BUG_ON
(
mpic
==
NULL
);
of_node_put
(
np
);
mpic_init
(
mpic
);
}
#ifdef CONFIG_SMP
void
__init
mpc85xx_smp_init
(
void
);
#endif
/*
* Setup the architecture
*/
...
...
@@ -311,9 +289,7 @@ static void __init p1022_ds_setup_arch(void)
diu_ops
.
valid_monitor_port
=
p1022ds_valid_monitor_port
;
#endif
#ifdef CONFIG_SMP
mpc85xx_smp_init
();
#endif
#ifdef CONFIG_SWIOTLB
if
(
memblock_end_of_DRAM
()
>
max
)
{
...
...
arch/powerpc/platforms/85xx/p1023_rds.c
View file @
48b1bf86
...
...
@@ -30,6 +30,7 @@
#include <asm/prom.h>
#include <asm/udbg.h>
#include <asm/mpic.h>
#include "smp.h"
#include <sysdev/fsl_soc.h>
#include <sysdev/fsl_pci.h>
...
...
@@ -41,10 +42,6 @@
* Setup the architecture
*
*/
#ifdef CONFIG_SMP
void
__init
mpc85xx_smp_init
(
void
);
#endif
static
void
__init
mpc85xx_rds_setup_arch
(
void
)
{
struct
device_node
*
np
;
...
...
@@ -89,33 +86,15 @@ static void __init mpc85xx_rds_setup_arch(void)
fsl_add_bridge
(
np
,
0
);
#endif
#ifdef CONFIG_SMP
mpc85xx_smp_init
();
#endif
}
machine_device_initcall
(
p1023_rds
,
mpc85xx_common_publish_devices
);
static
void
__init
mpc85xx_rds_pic_init
(
void
)
{
struct
mpic
*
mpic
;
struct
resource
r
;
struct
device_node
*
np
=
NULL
;
np
=
of_find_node_by_type
(
NULL
,
"open-pic"
);
if
(
!
np
)
{
printk
(
KERN_ERR
"Could not find open-pic node
\n
"
);
return
;
}
if
(
of_address_to_resource
(
np
,
0
,
&
r
))
{
printk
(
KERN_ERR
"Failed to map mpic register space
\n
"
);
of_node_put
(
np
);
return
;
}
mpic
=
mpic_alloc
(
np
,
r
.
start
,
MPIC_PRIMARY
|
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
|
struct
mpic
*
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
|
MPIC_BROKEN_FRR_NIRQS
|
MPIC_SINGLE_DEST_CPU
,
0
,
256
,
" OpenPIC "
);
...
...
arch/powerpc/platforms/85xx/sbc8548.c
View file @
48b1bf86
...
...
@@ -54,31 +54,10 @@ static int sbc_rev;
static
void
__init
sbc8548_pic_init
(
void
)
{
struct
mpic
*
mpic
;
struct
resource
r
;
struct
device_node
*
np
=
NULL
;
np
=
of_find_node_by_type
(
np
,
"open-pic"
);
if
(
np
==
NULL
)
{
printk
(
KERN_ERR
"Could not find open-pic node
\n
"
);
return
;
}
if
(
of_address_to_resource
(
np
,
0
,
&
r
))
{
printk
(
KERN_ERR
"Failed to map mpic register space
\n
"
);
of_node_put
(
np
);
return
;
}
mpic
=
mpic_alloc
(
np
,
r
.
start
,
MPIC_PRIMARY
|
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
,
struct
mpic
*
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
,
0
,
256
,
" OpenPIC "
);
BUG_ON
(
mpic
==
NULL
);
/* Return the mpic node */
of_node_put
(
np
);
mpic_init
(
mpic
);
}
...
...
arch/powerpc/platforms/85xx/sbc8560.c
View file @
48b1bf86
...
...
@@ -41,28 +41,10 @@
static
void
__init
sbc8560_pic_init
(
void
)
{
struct
mpic
*
mpic
;
struct
resource
r
;
struct
device_node
*
np
=
NULL
;
np
=
of_find_node_by_type
(
np
,
"open-pic"
);
if
(
!
np
)
{
printk
(
KERN_ERR
"Could not find open-pic node
\n
"
);
return
;
}
if
(
of_address_to_resource
(
np
,
0
,
&
r
))
{
printk
(
KERN_ERR
"Could not map mpic register space
\n
"
);
of_node_put
(
np
);
return
;
}
mpic
=
mpic_alloc
(
np
,
r
.
start
,
MPIC_PRIMARY
|
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
,
struct
mpic
*
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
,
0
,
256
,
" OpenPIC "
);
BUG_ON
(
mpic
==
NULL
);
of_node_put
(
np
);
mpic_init
(
mpic
);
mpc85xx_cpm2_pic_init
();
...
...
arch/powerpc/platforms/85xx/smp.c
View file @
48b1bf86
...
...
@@ -27,6 +27,7 @@
#include <sysdev/fsl_soc.h>
#include <sysdev/mpic.h>
#include "smp.h"
extern
void
__early_start
(
void
);
...
...
arch/powerpc/platforms/85xx/smp.h
0 → 100644
View file @
48b1bf86
#ifndef POWERPC_85XX_SMP_H_
#define POWERPC_85XX_SMP_H_ 1
#include <linux/init.h>
#ifdef CONFIG_SMP
void
__init
mpc85xx_smp_init
(
void
);
#else
static
inline
void
mpc85xx_smp_init
(
void
)
{
/* Nothing to do */
}
#endif
#endif
/* not POWERPC_85XX_SMP_H_ */
arch/powerpc/platforms/85xx/socrates.c
View file @
48b1bf86
...
...
@@ -46,28 +46,12 @@
static
void
__init
socrates_pic_init
(
void
)
{
struct
mpic
*
mpic
;
struct
resource
r
;
struct
device_node
*
np
;
np
=
of_find_node_by_type
(
NULL
,
"open-pic"
);
if
(
!
np
)
{
printk
(
KERN_ERR
"Could not find open-pic node
\n
"
);
return
;
}
if
(
of_address_to_resource
(
np
,
0
,
&
r
))
{
printk
(
KERN_ERR
"Could not map mpic register space
\n
"
);
of_node_put
(
np
);
return
;
}
mpic
=
mpic_alloc
(
np
,
r
.
start
,
MPIC_PRIMARY
|
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
,
struct
mpic
*
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
,
0
,
256
,
" OpenPIC "
);
BUG_ON
(
mpic
==
NULL
);
of_node_put
(
np
);
mpic_init
(
mpic
);
np
=
of_find_compatible_node
(
NULL
,
NULL
,
"abb,socrates-fpga-pic"
);
...
...
arch/powerpc/platforms/85xx/stx_gp3.c
View file @
48b1bf86
...
...
@@ -48,28 +48,10 @@
static
void
__init
stx_gp3_pic_init
(
void
)
{
struct
mpic
*
mpic
;
struct
resource
r
;
struct
device_node
*
np
;
np
=
of_find_node_by_type
(
NULL
,
"open-pic"
);
if
(
!
np
)
{
printk
(
KERN_ERR
"Could not find open-pic node
\n
"
);
return
;
}
if
(
of_address_to_resource
(
np
,
0
,
&
r
))
{
printk
(
KERN_ERR
"Could not map mpic register space
\n
"
);
of_node_put
(
np
);
return
;
}
mpic
=
mpic_alloc
(
np
,
r
.
start
,
MPIC_PRIMARY
|
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
,
struct
mpic
*
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
,
0
,
256
,
" OpenPIC "
);
BUG_ON
(
mpic
==
NULL
);
of_node_put
(
np
);
mpic_init
(
mpic
);
mpc85xx_cpm2_pic_init
();
...
...
arch/powerpc/platforms/85xx/tqm85xx.c
View file @
48b1bf86
...
...
@@ -46,28 +46,10 @@
static
void
__init
tqm85xx_pic_init
(
void
)
{
struct
mpic
*
mpic
;
struct
resource
r
;
struct
device_node
*
np
;
np
=
of_find_node_by_type
(
NULL
,
"open-pic"
);
if
(
!
np
)
{
printk
(
KERN_ERR
"Could not find open-pic node
\n
"
);
return
;
}
if
(
of_address_to_resource
(
np
,
0
,
&
r
))
{
printk
(
KERN_ERR
"Could not map mpic register space
\n
"
);
of_node_put
(
np
);
return
;
}
mpic
=
mpic_alloc
(
np
,
r
.
start
,
MPIC_PRIMARY
|
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
,
struct
mpic
*
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
,
0
,
256
,
" OpenPIC "
);
BUG_ON
(
mpic
==
NULL
);
of_node_put
(
np
);
mpic_init
(
mpic
);
mpc85xx_cpm2_pic_init
();
...
...
arch/powerpc/platforms/85xx/xes_mpc85xx.c
View file @
48b1bf86
...
...
@@ -32,6 +32,7 @@
#include <sysdev/fsl_soc.h>
#include <sysdev/fsl_pci.h>
#include "smp.h"
#include "mpc85xx.h"
...
...
@@ -42,29 +43,11 @@
void
__init
xes_mpc85xx_pic_init
(
void
)
{
struct
mpic
*
mpic
;
struct
resource
r
;
struct
device_node
*
np
;
np
=
of_find_node_by_type
(
NULL
,
"open-pic"
);
if
(
np
==
NULL
)
{
printk
(
KERN_ERR
"Could not find open-pic node
\n
"
);
return
;
}
if
(
of_address_to_resource
(
np
,
0
,
&
r
))
{
printk
(
KERN_ERR
"Failed to map mpic register space
\n
"
);
of_node_put
(
np
);
return
;
}
mpic
=
mpic_alloc
(
np
,
r
.
start
,
MPIC_PRIMARY
|
MPIC_WANTS_RESET
|
struct
mpic
*
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
|
MPIC_BROKEN_FRR_NIRQS
,
0
,
256
,
" OpenPIC "
);
BUG_ON
(
mpic
==
NULL
);
of_node_put
(
np
);
mpic_init
(
mpic
);
}
...
...
@@ -138,9 +121,6 @@ static int primary_phb_addr;
/*
* Setup the architecture
*/
#ifdef CONFIG_SMP
extern
void
__init
mpc85xx_smp_init
(
void
);
#endif
static
void
__init
xes_mpc85xx_setup_arch
(
void
)
{
#ifdef CONFIG_PCI
...
...
@@ -174,9 +154,7 @@ static void __init xes_mpc85xx_setup_arch(void)
}
#endif
#ifdef CONFIG_SMP
mpc85xx_smp_init
();
#endif
}
machine_device_initcall
(
xes_mpc8572
,
mpc85xx_common_publish_devices
);
...
...
arch/powerpc/platforms/86xx/pic.c
View file @
48b1bf86
...
...
@@ -31,26 +31,16 @@ static void mpc86xx_8259_cascade(unsigned int irq, struct irq_desc *desc)
void
__init
mpc86xx_init_irq
(
void
)
{
struct
mpic
*
mpic
;
struct
device_node
*
np
;
struct
resource
res
;
#ifdef CONFIG_PPC_I8259
struct
device_node
*
np
;
struct
device_node
*
cascade_node
=
NULL
;
int
cascade_irq
;
#endif
/* Determine PIC address. */
np
=
of_find_node_by_type
(
NULL
,
"open-pic"
);
if
(
np
==
NULL
)
return
;
of_address_to_resource
(
np
,
0
,
&
res
);
mpic
=
mpic_alloc
(
np
,
res
.
start
,
MPIC_PRIMARY
|
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
|
MPIC_BROKEN_FRR_NIRQS
|
MPIC_SINGLE_DEST_CPU
,
struct
mpic
*
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_WANTS_RESET
|
MPIC_BIG_ENDIAN
|
MPIC_BROKEN_FRR_NIRQS
|
MPIC_SINGLE_DEST_CPU
,
0
,
256
,
" MPIC "
);
of_node_put
(
np
);
BUG_ON
(
mpic
==
NULL
);
mpic_init
(
mpic
);
...
...
arch/powerpc/platforms/cell/setup.c
View file @
48b1bf86
...
...
@@ -184,24 +184,10 @@ static int __init cell_publish_devices(void)
}
machine_subsys_initcall
(
cell
,
cell_publish_devices
);
static
void
cell_mpic_cascade
(
unsigned
int
irq
,
struct
irq_desc
*
desc
)
{
struct
irq_chip
*
chip
=
irq_desc_get_chip
(
desc
);
struct
mpic
*
mpic
=
irq_desc_get_handler_data
(
desc
);
unsigned
int
virq
;
virq
=
mpic_get_one_irq
(
mpic
);
if
(
virq
!=
NO_IRQ
)
generic_handle_irq
(
virq
);
chip
->
irq_eoi
(
&
desc
->
irq_data
);
}
static
void
__init
mpic_init_IRQ
(
void
)
{
struct
device_node
*
dn
;
struct
mpic
*
mpic
;
unsigned
int
virq
;
for
(
dn
=
NULL
;
(
dn
=
of_find_node_by_name
(
dn
,
"interrupt-controller"
));)
{
...
...
@@ -211,19 +197,10 @@ static void __init mpic_init_IRQ(void)
/* The MPIC driver will get everything it needs from the
* device-tree, just pass 0 to all arguments
*/
mpic
=
mpic_alloc
(
dn
,
0
,
0
,
0
,
0
,
" MPIC "
);
mpic
=
mpic_alloc
(
dn
,
0
,
MPIC_SECONDARY
,
0
,
0
,
" MPIC "
);
if
(
mpic
==
NULL
)
continue
;
mpic_init
(
mpic
);
virq
=
irq_of_parse_and_map
(
dn
,
0
);
if
(
virq
==
NO_IRQ
)
continue
;
printk
(
KERN_INFO
"%s : hooking up to IRQ %d
\n
"
,
dn
->
full_name
,
virq
);
irq_set_handler_data
(
virq
,
mpic
);
irq_set_chained_handler
(
virq
,
cell_mpic_cascade
);
}
}
...
...
arch/powerpc/platforms/chrp/setup.c
View file @
48b1bf86
...
...
@@ -435,8 +435,7 @@ static void __init chrp_find_openpic(void)
if
(
len
>
1
)
isu_size
=
iranges
[
3
];
chrp_mpic
=
mpic_alloc
(
np
,
opaddr
,
MPIC_PRIMARY
,
isu_size
,
0
,
" MPIC "
);
chrp_mpic
=
mpic_alloc
(
np
,
opaddr
,
0
,
isu_size
,
0
,
" MPIC "
);
if
(
chrp_mpic
==
NULL
)
{
printk
(
KERN_ERR
"Failed to allocate MPIC structure
\n
"
);
goto
bail
;
...
...
arch/powerpc/platforms/embedded6xx/holly.c
View file @
48b1bf86
...
...
@@ -148,30 +148,14 @@ static void __init holly_setup_arch(void)
static
void
__init
holly_init_IRQ
(
void
)
{
struct
mpic
*
mpic
;
phys_addr_t
mpic_paddr
=
0
;
struct
device_node
*
tsi_pic
;
#ifdef CONFIG_PCI
unsigned
int
cascade_pci_irq
;
struct
device_node
*
tsi_pci
;
struct
device_node
*
cascade_node
=
NULL
;
#endif
tsi_pic
=
of_find_node_by_type
(
NULL
,
"open-pic"
);
if
(
tsi_pic
)
{
unsigned
int
size
;
const
void
*
prop
=
of_get_property
(
tsi_pic
,
"reg"
,
&
size
);
mpic_paddr
=
of_translate_address
(
tsi_pic
,
prop
);
}
if
(
mpic_paddr
==
0
)
{
printk
(
KERN_ERR
"%s: No tsi108 PIC found !
\n
"
,
__func__
);
return
;
}
pr_debug
(
"%s: tsi108 pic phys_addr = 0x%x
\n
"
,
__func__
,
(
u32
)
mpic_paddr
);
mpic
=
mpic_alloc
(
tsi_pic
,
mpic_paddr
,
MPIC_PRIMARY
|
MPIC_BIG_ENDIAN
|
MPIC_WANTS_RESET
|
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_BIG_ENDIAN
|
MPIC_WANTS_RESET
|
MPIC_SPV_EOI
|
MPIC_NO_PTHROU_DIS
|
MPIC_REGSET_TSI108
,
24
,
NR_IRQS
-
4
,
/* num_sources used */
...
...
@@ -179,7 +163,7 @@ static void __init holly_init_IRQ(void)
BUG_ON
(
mpic
==
NULL
);
mpic_assign_isu
(
mpic
,
0
,
mpic
_
paddr
+
0x100
);
mpic_assign_isu
(
mpic
,
0
,
mpic
->
paddr
+
0x100
);
mpic_init
(
mpic
);
...
...
@@ -204,7 +188,6 @@ static void __init holly_init_IRQ(void)
#endif
/* Configure MPIC outputs to CPU0 */
tsi108_write_reg
(
TSI108_MPIC_OFFSET
+
0x30c
,
0
);
of_node_put
(
tsi_pic
);
}
void
holly_show_cpuinfo
(
struct
seq_file
*
m
)
...
...
arch/powerpc/platforms/embedded6xx/linkstation.c
View file @
48b1bf86
...
...
@@ -81,29 +81,19 @@ static void __init linkstation_setup_arch(void)
static
void
__init
linkstation_init_IRQ
(
void
)
{
struct
mpic
*
mpic
;
struct
device_node
*
dnp
;
const
u32
*
prop
;
int
size
;
phys_addr_t
paddr
;
dnp
=
of_find_node_by_type
(
NULL
,
"open-pic"
);
if
(
dnp
==
NULL
)
return
;
prop
=
of_get_property
(
dnp
,
"reg"
,
&
size
);
paddr
=
(
phys_addr_t
)
of_translate_address
(
dnp
,
prop
);
mpic
=
mpic_alloc
(
dnp
,
paddr
,
MPIC_PRIMARY
|
MPIC_WANTS_RESET
,
4
,
32
,
" EPIC "
);
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_WANTS_RESET
,
4
,
32
,
" EPIC "
);
BUG_ON
(
mpic
==
NULL
);
/* PCI IRQs */
mpic_assign_isu
(
mpic
,
0
,
paddr
+
0x10200
);
mpic_assign_isu
(
mpic
,
0
,
mpic
->
paddr
+
0x10200
);
/* I2C */
mpic_assign_isu
(
mpic
,
1
,
paddr
+
0x11000
);
mpic_assign_isu
(
mpic
,
1
,
mpic
->
paddr
+
0x11000
);
/* ttyS0, ttyS1 */
mpic_assign_isu
(
mpic
,
2
,
paddr
+
0x11100
);
mpic_assign_isu
(
mpic
,
2
,
mpic
->
paddr
+
0x11100
);
mpic_init
(
mpic
);
}
...
...
arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c
View file @
48b1bf86
...
...
@@ -102,31 +102,14 @@ static void __init mpc7448_hpc2_setup_arch(void)
static
void
__init
mpc7448_hpc2_init_IRQ
(
void
)
{
struct
mpic
*
mpic
;
phys_addr_t
mpic_paddr
=
0
;
struct
device_node
*
tsi_pic
;
#ifdef CONFIG_PCI
unsigned
int
cascade_pci_irq
;
struct
device_node
*
tsi_pci
;
struct
device_node
*
cascade_node
=
NULL
;
#endif
tsi_pic
=
of_find_node_by_type
(
NULL
,
"open-pic"
);
if
(
tsi_pic
)
{
unsigned
int
size
;
const
void
*
prop
=
of_get_property
(
tsi_pic
,
"reg"
,
&
size
);
mpic_paddr
=
of_translate_address
(
tsi_pic
,
prop
);
}
if
(
mpic_paddr
==
0
)
{
printk
(
"%s: No tsi108 PIC found !
\n
"
,
__func__
);
return
;
}
DBG
(
"%s: tsi108 pic phys_addr = 0x%x
\n
"
,
__func__
,
(
u32
)
mpic_paddr
);
mpic
=
mpic_alloc
(
tsi_pic
,
mpic_paddr
,
MPIC_PRIMARY
|
MPIC_BIG_ENDIAN
|
MPIC_WANTS_RESET
|
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_BIG_ENDIAN
|
MPIC_WANTS_RESET
|
MPIC_SPV_EOI
|
MPIC_NO_PTHROU_DIS
|
MPIC_REGSET_TSI108
,
24
,
NR_IRQS
-
4
,
/* num_sources used */
...
...
@@ -134,7 +117,7 @@ static void __init mpc7448_hpc2_init_IRQ(void)
BUG_ON
(
mpic
==
NULL
);
mpic_assign_isu
(
mpic
,
0
,
mpic
_
paddr
+
0x100
);
mpic_assign_isu
(
mpic
,
0
,
mpic
->
paddr
+
0x100
);
mpic_init
(
mpic
);
...
...
@@ -159,7 +142,6 @@ static void __init mpc7448_hpc2_init_IRQ(void)
#endif
/* Configure MPIC outputs to CPU0 */
tsi108_write_reg
(
TSI108_MPIC_OFFSET
+
0x30c
,
0
);
of_node_put
(
tsi_pic
);
}
void
mpc7448_hpc2_show_cpuinfo
(
struct
seq_file
*
m
)
...
...
arch/powerpc/platforms/embedded6xx/storcenter.c
View file @
48b1bf86
...
...
@@ -83,35 +83,17 @@ static void __init storcenter_setup_arch(void)
static
void
__init
storcenter_init_IRQ
(
void
)
{
struct
mpic
*
mpic
;
struct
device_node
*
dnp
;
const
void
*
prop
;
int
size
;
phys_addr_t
paddr
;
dnp
=
of_find_node_by_type
(
NULL
,
"open-pic"
);
if
(
dnp
==
NULL
)
return
;
prop
=
of_get_property
(
dnp
,
"reg"
,
&
size
);
if
(
prop
==
NULL
)
{
of_node_put
(
dnp
);
return
;
}
paddr
=
(
phys_addr_t
)
of_translate_address
(
dnp
,
prop
);
mpic
=
mpic_alloc
(
dnp
,
paddr
,
MPIC_PRIMARY
|
MPIC_WANTS_RESET
,
16
,
32
,
" OpenPIC "
);
of_node_put
(
dnp
);
mpic
=
mpic_alloc
(
NULL
,
0
,
MPIC_WANTS_RESET
,
16
,
32
,
" OpenPIC "
);
BUG_ON
(
mpic
==
NULL
);
/*
* 16 Serial Interrupts followed by 16 Internal Interrupts.
* I2C is the second internal, so it is at 17, 0x11020.
*/
mpic_assign_isu
(
mpic
,
0
,
paddr
+
0x10200
);
mpic_assign_isu
(
mpic
,
1
,
paddr
+
0x11000
);
mpic_assign_isu
(
mpic
,
0
,
mpic
->
paddr
+
0x10200
);
mpic_assign_isu
(
mpic
,
1
,
mpic
->
paddr
+
0x11000
);
mpic_init
(
mpic
);
}
...
...
arch/powerpc/platforms/maple/setup.c
View file @
48b1bf86
...
...
@@ -221,7 +221,7 @@ static void __init maple_init_IRQ(void)
unsigned
long
openpic_addr
=
0
;
int
naddr
,
n
,
i
,
opplen
,
has_isus
=
0
;
struct
mpic
*
mpic
;
unsigned
int
flags
=
MPIC_PRIMARY
;
unsigned
int
flags
=
0
;
/* Locate MPIC in the device-tree. Note that there is a bug
* in Maple device-tree where the type of the controller is
...
...
arch/powerpc/platforms/pasemi/setup.c
View file @
48b1bf86
...
...
@@ -224,7 +224,7 @@ 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
;
mpic_flags
=
MPIC_LARGE_VECTORS
|
MPIC_NO_BIAS
;
nmiprop
=
of_get_property
(
mpic_node
,
"nmi-source"
,
NULL
);
if
(
nmiprop
)
...
...
@@ -234,7 +234,7 @@ static __init void pas_init_IRQ(void)
mpic_flags
,
0
,
0
,
"PASEMI-OPIC"
);
BUG_ON
(
!
mpic
);
mpic_assign_isu
(
mpic
,
0
,
openpic_
addr
+
0x10000
);
mpic_assign_isu
(
mpic
,
0
,
mpic
->
p
addr
+
0x10000
);
mpic_init
(
mpic
);
/* The NMI/MCK source needs to be prio 15 */
if
(
nmiprop
)
{
...
...
arch/powerpc/platforms/powermac/pic.c
View file @
48b1bf86
...
...
@@ -464,18 +464,6 @@ int of_irq_map_oldworld(struct device_node *device, int index,
}
#endif
/* CONFIG_PPC32 */
static
void
pmac_u3_cascade
(
unsigned
int
irq
,
struct
irq_desc
*
desc
)
{
struct
irq_chip
*
chip
=
irq_desc_get_chip
(
desc
);
struct
mpic
*
mpic
=
irq_desc_get_handler_data
(
desc
);
unsigned
int
cascade_irq
=
mpic_get_one_irq
(
mpic
);
if
(
cascade_irq
!=
NO_IRQ
)
generic_handle_irq
(
cascade_irq
);
chip
->
irq_eoi
(
&
desc
->
irq_data
);
}
static
void
__init
pmac_pic_setup_mpic_nmi
(
struct
mpic
*
mpic
)
{
#if defined(CONFIG_XMON) && defined(CONFIG_PPC32)
...
...
@@ -498,14 +486,8 @@ static struct mpic * __init pmac_setup_one_mpic(struct device_node *np,
int
master
)
{
const
char
*
name
=
master
?
" MPIC 1 "
:
" MPIC 2 "
;
struct
resource
r
;
struct
mpic
*
mpic
;
unsigned
int
flags
=
master
?
MPIC_PRIMARY
:
0
;
int
rc
;
rc
=
of_address_to_resource
(
np
,
0
,
&
r
);
if
(
rc
)
return
NULL
;
unsigned
int
flags
=
master
?
0
:
MPIC_SECONDARY
;
pmac_call_feature
(
PMAC_FTR_ENABLE_MPIC
,
np
,
0
,
0
);
...
...
@@ -519,7 +501,7 @@ static struct mpic * __init pmac_setup_one_mpic(struct device_node *np,
if
(
master
&&
(
flags
&
MPIC_BIG_ENDIAN
))
flags
|=
MPIC_U3_HT_IRQS
;
mpic
=
mpic_alloc
(
np
,
r
.
start
,
flags
,
0
,
0
,
name
);
mpic
=
mpic_alloc
(
np
,
0
,
flags
,
0
,
0
,
name
);
if
(
mpic
==
NULL
)
return
NULL
;
...
...
@@ -532,7 +514,6 @@ static int __init pmac_pic_probe_mpic(void)
{
struct
mpic
*
mpic1
,
*
mpic2
;
struct
device_node
*
np
,
*
master
=
NULL
,
*
slave
=
NULL
;
unsigned
int
cascade
;
/* We can have up to 2 MPICs cascaded */
for
(
np
=
NULL
;
(
np
=
of_find_node_by_type
(
np
,
"open-pic"
))
...
...
@@ -568,27 +549,14 @@ static int __init pmac_pic_probe_mpic(void)
of_node_put
(
master
);
/* No slave, let's go out */
if
(
slave
==
NULL
)
return
0
;
/* Get/Map slave interrupt */
cascade
=
irq_of_parse_and_map
(
slave
,
0
);
if
(
cascade
==
NO_IRQ
)
{
printk
(
KERN_ERR
"Failed to map cascade IRQ
\n
"
);
return
0
;
}
mpic2
=
pmac_setup_one_mpic
(
slave
,
0
);
if
(
mpic2
==
NULL
)
{
printk
(
KERN_ERR
"Failed to setup slave MPIC
\n
"
);
/* Set up a cascaded controller, if present */
if
(
slave
)
{
mpic2
=
pmac_setup_one_mpic
(
slave
,
0
);
if
(
mpic2
==
NULL
)
printk
(
KERN_ERR
"Failed to setup slave MPIC
\n
"
);
of_node_put
(
slave
);
return
0
;
}
irq_set_handler_data
(
cascade
,
mpic2
);
irq_set_chained_handler
(
cascade
,
pmac_u3_cascade
);
of_node_put
(
slave
);
return
0
;
}
...
...
arch/powerpc/platforms/pseries/setup.c
View file @
48b1bf86
...
...
@@ -192,8 +192,7 @@ static void __init pseries_mpic_init_IRQ(void)
BUG_ON
(
openpic_addr
==
0
);
/* Setup the openpic driver */
mpic
=
mpic_alloc
(
pSeries_mpic_node
,
openpic_addr
,
MPIC_PRIMARY
,
mpic
=
mpic_alloc
(
pSeries_mpic_node
,
openpic_addr
,
0
,
16
,
250
,
/* isu size, irq count */
" MPIC "
);
BUG_ON
(
mpic
==
NULL
);
...
...
arch/powerpc/sysdev/mpic.c
View file @
48b1bf86
This diff is collapsed.
Click to expand it.
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